Sửa lỗi cảnh báo 'could not build optimal types_hash' của Nginx

beginner Nginx2026-06-12| Thường gặp trên các máy chủ Ubuntu, Debian, CentOS hoặc RHEL chạy Nginx 1.10+ khi xử lý danh sách loại MIME lớn hoặc cấu hình trang web phức tạp.

Error Message

nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 1024 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size
#nginx#quan-tri-linux#may-chu-web#toi-uu-hieu-suat#devops

Cảnh báoCó thể bạn đã thấy thông báo này sau khi chạy lệnh nginx -t hoặc khi cố gắng tải lại dịch vụ. Nó trông như thế này:

nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 1024 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size

Mặc dù lỗi này không làm sập máy chủ của bạn, nhưng nó có nghĩa là Nginx đang sử dụng một phương pháp tra cứu không tối ưu. Điều này có thể dẫn đến việc giảm hiệu suất nhẹ khi phân phối các tệp.

Tại sao Nginx lại báo lỗi này?Nginx sử dụng các bảng băm (hash tables) để nhanh chóng ánh xạ các phần mở rộng tệp (như .php hoặc .png) với các loại MIME tương ứng. Các bảng này cần đủ nhỏ để vừa với bộ đệm (cache) của CPU nhưng cũng phải đủ lớn để tránh xung đột dữ liệu.

Các bản cài đặt Nginx tiêu chuẩn thường xử lý khoảng 100-150 loại MIME theo mặc định. Tuy nhiên, các ứng dụng web hiện đại thường thêm hàng tá loại tùy chỉnh cho phông chữ, định dạng video chuyên dụng hoặc các tệp manifest. Khi tệp mime.types của bạn quá lớn, các ngăn chứa bộ nhớ (memory buckets) mặc định sẽ bị tràn. Nginx sau đó sẽ cảnh báo rằng nó không thể tìm thấy cách 'tối ưu' để sắp xếp các mục này với giới hạn bộ nhớ hiện tại.

Cách khắc phụcĐể loại bỏ cảnh báo này, bạn cần cấp cho Nginx thêm không gian trong cấu hình. Chúng ta sẽ thực hiện việc này bằng cách tăng gấp đôi các giá trị được gợi ý.

1. Mở tệp cấu hình chínhHầu hết các thiết lập đều lưu trữ tệp cấu hình chính tại /etc/nginx/nginx.conf. Hãy mở nó với quyền sudo:

sudo nano /etc/nginx/nginx.conf

2. Điều chỉnh khối httpTìm phần http { ... }. Bạn cần tìm hai chỉ thị cụ thể: types_hash_max_sizetypes_hash_bucket_size. Nếu chúng chưa có sẵn, bạn sẽ cần thêm chúng thủ công.

Đừng chỉ sử dụng các con số mà Nginx gợi ý trong lỗi. Thay vào đó, hãy gấp đôi chúng để đảm bảo bạn không phải quay lại sửa lỗi này vào tuần tới. Nếu lỗi gợi ý 1024 và 64, hãy sử dụng các giá trị sau:

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # Tăng kích thước bảng băm để có hiệu suất tốt hơn
    types_hash_max_size 2048;
    types_hash_bucket_size 128;

    # ... cấu hình hiện có
}

3. Lưu và ThoátNếu bạn đang sử dụng Nano, nhấn Ctrl + O rồi nhấn Enter để lưu. Nhấn Ctrl + X để quay lại terminal.

Xác nhận các thay đổiĐừng bao giờ khởi động lại Nginx mà không kiểm tra cú pháp trước. Một lỗi đánh máy nhỏ có thể khiến toàn bộ trang web của bạn bị ngoại tuyến.

sudo nginx -t

Nếu mọi thứ đều chính xác, đầu ra sẽ trông như thế này:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Bây giờ, hãy tải lại dịch vụ để áp dụng các cài đặt mới:

sudo systemctl reload nginx

Tìm hiểu sâu: Các tham số này có tác dụng gì?- types_hash_max_size: Điều này kiểm soát tổng kích thước của bảng băm. Hãy coi nó như tổng số ô có sẵn cho các loại MIME của bạn.- types_hash_bucket_size: Tham số này đại diện cho kích thước của từng ô (bucket) riêng lẻ. Nó nên là lũy thừa của hai (32, 64, 128) phù hợp với kích thước cache line của CPU. Nếu bạn có các phần mở rộng tệp rất dài, Nginx cần các bucket lớn hơn để lưu trữ chúng.## Mẹo chuyên nghiệp để bảo trìCảnh báo này thường là kiểu sửa lỗi 'thiết lập một lần rồi thôi'. Tuy nhiên, nếu bạn quản lý một dàn máy chủ, tính nhất quán là yếu tố then chốt. Tôi thường thấy các cấu hình bị hỏng trong quá trình chỉnh sửa thủ công hoặc triển khai tự động.

Để đảm bảo mime.types hoặc nginx.conf của bạn không bị thay đổi ngoài ý muốn, tôi khuyên bạn nên tạo mã băm (checksum). Các công cụ như Trình tạo mã băm tại ToolCraft rất hữu ích cho việc này. Bạn có thể nhanh chóng tạo mã băm MD5 hoặc SHA-256 cho tệp cấu hình của mình ngay trên trình duyệt. Đây là một cách đơn giản để xác minh rằng mọi máy chủ trong cụm (cluster) của bạn đang chạy cùng một cấu hình chính xác mà không cần tải dữ liệu nhạy cảm lên máy chủ bên thứ ba. Vẫn thấy cảnh báo? Đừng lo lắng. Một số cấu hình khổng lồ yêu cầu các giá trị thậm chí còn lớn hơn. Bạn có thể tăng gấp đôi các con số một lần nữa lên 4096 và 256 một cách an toàn. Các máy chủ hiện đại có rất nhiều RAM, và tác động bộ nhớ ở đây chỉ tính bằng kilobyte, không phải megabyte.

Related Error Notes