nginx: [khẩn cấp] không thể tạo server_names_hash, bạn nên tăng server_names_hash_bucket_size


102

Tôi đang trong quá trình thiết lập một máy chủ mới. Máy chủ http mà tôi chọn là NGINX. Tôi muốn thêm miền audi-freunde-einbeck.delàm máy chủ ảo. Tôi đã có 2 miền khác trong đó và nó hoạt động tốt, nhưng khi tôi cố gắng thêm miền được đề cập ở trên và khởi động máy chủ, nó cho tôi, Job failed. See system journal and 'systemctl status' for details. tôi nghĩ đó là do dấu gạch ngang, vì vậy tôi đã thử nhiều miền khác có và không có dấu gạch nối. , nhưng không có may mắn. Cùng một lỗi. Điều gì có thể gây ra điều này? Tôi cũng đã thử khởi động lại, tôi thực sự thua lỗ ở đây. Mọi sự trợ giúp sẽ rất được trân trọng.

Tôi đã tìm hiểu kỹ một chút và phát hiện ra rằng, khi tôi chỉ đặt một miền vào, nó hoạt động. Nhưng khi tôi đặt một miền khác vào, nó dừng lại. Đây là đầu ra ở trạng thái:

[root@netzmelone nginx]# systemctl status nginx
nginx.service - A high performance web server and a reverse proxy server
      Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
      Active: failed (Result: exit-code) since Sun, 16 Dec 2012 11:38:08 +0000; 7s ago
     Process: 14239 ExecStop=/usr/sbin/nginx -g pid /run/nginx.pid; -s quit (code=exited, status=1/FAILURE)
     Process: 14232 ExecStart=/usr/sbin/nginx -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=0/SUCCESS)
     Process: 14242 ExecStartPre=/usr/sbin/nginx -t -q -g pid /run/nginx.pid; daemon on; master_process on; (code=exited, status=1/FAILURE)
    Main PID: 14234 (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/nginx.service

Dec 16 11:38:08 netzmelone nginx[14242]: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
Dec 16 11:38:08 netzmelone nginx[14242]: nginx: configuration file /etc/nginx/nginx.conf test failed

Bạn đã xem bản ghi nào chưa?
willglynn

Tôi nên xem nhật ký nào?
oengelha

hoặc bạn có thể chỉ sử dụng tên miền bên trong server_name của bạn.
saran

Câu trả lời:


207

Điều này rất có thể xảy ra do tên miền dài. Bạn có thể sửa lỗi này bằng cách thêm

server_names_hash_bucket_size  64;

ở đầu httpkhối của bạn (có thể nằm trong /etc/nginx/nginx.conf). Tôi xin trích dẫn từ tài liệu nginx phải làm gì khi lỗi này xuất hiện: In this case, the directive value should be increased to the next power of two. Vì vậy, trong trường hợp của bạn, nó sẽ trở thành 64.

Nếu bạn vẫn gặp lỗi tương tự, hãy thử tăng lên 128 và hơn nữa.

Tham khảo: http://nginx.org/en/docs/http/server_names.html#optimization


8
Thật thú vị, tôi đã phải sử dụng 64 mặc dù thông báo lỗi Nginx cụ thể của tôi đang hướng dẫn tôi sử dụng 32.
Ryan

44
Tương tự như @Ryan - NGINX đã bảo tôi sử dụng 64, nhưng tôi cần 128 để làm cho nó hoạt động.
Jerzy

@jerzy Rõ ràng đã bỏ sót một số chi tiết trần tục buổi sáng.
Erutan409

4
@jerzy Mặc dù cách diễn đạt hơi mơ hồ của loại thông báo lỗi đó gợi ý ngược lại, nó có thể được thiết kế để bao gồm giá trị hiện tại chứ không phải để hướng dẫn bạn sử dụng giá trị nào.
othernode 25/02/19

@jerzy làm thế nào để tăng điều này trong userdata khi cấp phép một phiên bản ec2. vì vậy về cơ bản trong tập lệnh bash?
shan

29
  • mở /etc/nginx/nginx.confvới đặc quyền ghi
  • bỏ ghi chú hoặc thêm server_names_hash_bucket_size 64;
  • khởi động lại nginx sudo service nginx restart

Nếu lỗi vẫn tiếp diễn:

  • tăng server_names_hash_bucket_sizeở các bước 128, 256, 512, v.v. (tăng thêm 2 lũy thừa mỗi lần). ví dụ.server_names_hash_bucket_size 128;
  • khởi động lại nginx mỗi lần cho đến khi hết lỗi (lỗi sẽ luôn giống nhau cho dù bạn đã đặt giá trị nào)

cảm ơn vì đã đề xuất cách tiếp cận gia tăng. tin nhắn của nginx liên tục nói, hãy đặt nó thành 64: S
ybl

5

Điều này nghe có vẻ hơi ngẫu nhiên, nhưng nó có thể giúp ích cho một người mới nginx như tôi.
Tôi đã nhận lỗi này khi tôi rời đi một ;trên server_nameđường.

đã có:

server_name    www.mydomain.com  
access_log     /var/log/nginx/www.mydomain.com; 

sửa chữa:

server_name    www.mydomain.com;  
access_log     /var/log/nginx/www.mydomain.com; 

Tất cả các chỉ thị trong các tệp cấu hình nginx phải kết thúc bằng một ;
Tôi thường đánh dấu ;s trong tệp của mình trước khi lưu / tải lên để kiểm tra lần cuối sau khi chỉnh sửa.


2

Đây là cách tôi đã giải quyết:

cd /etc/nginx/

sudo nano nginx.conf
  • --uncomment hoặc thêm server_names_hash_bucket_size 64 -
  • --increase server_names_hash_bucket_size "164" -
cd /etc/nginx/sites-available/

sudo nginx -t

  • nếu tất cả đều ổn
sudo service nginx restart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.