我们在一项服务中使用 Nginx 作为 Apache 的反向代理,该服务为任何人提供自己的网站。在创建帐户时,系统会为域创建一个新的 nginx conf 文件,其中包含两个条目,一个用于端口 80,另一个用于 443。我们注意到,每 30 个左右的域,我们都会收到错误消息:
Restarting nginx: nginx: [emerg] could not build the server_names_hash,
you should increase either server_names_hash_max_size: 256
or server_names_hash_bucket_size: 64.
Run Code Online (Sandbox Code Playgroud)
随着大约 200 个域的增长,我们不得不将 server_names_hash_max 大小增加到 4112,并且担心这不会很好地扩展。我希望了解这些配置是如何工作的,以及确保我们可以使用这种方法扩展到数千个域的最佳设置是什么。
此外,在该哈希大小下,nginx 开始需要几秒钟的时间来重新加载,这导致系统在重新启动时不可用。
以下是整体设置(在 Ubuntu 服务器 10.10 nginx/1.0.4 上运行):
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300;
types_hash_max_size 2048;
# server_tokens off;
server_names_hash_bucket_size 64; …
Run Code Online (Sandbox Code Playgroud) nginx ×1