Wir verwenden Nginx als Reverse-Proxy für Apache in einem Service, der jedem seine eigene Website zur Verfügung stellt. Bei der Kontoerstellung erstellt das System eine neue Nginx-Konfigurationsdatei für die Domäne mit zwei Einträgen, einen für Port 80 und einen für 443. Wir stellen fest, dass bei etwa 30 Domänen der folgende Fehler auftritt:
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.
Mit rund 200 Domains und zunehmender Größe mussten wir die Größe von server_names_hash_max auf 4112 erhöhen und befürchten, dass dies nicht gut skaliert werden kann. Ich möchte verstehen, wie diese Konfigurationen funktionieren und wie die optimalen Einstellungen aussehen, um sicherzustellen, dass wir mit dieser Methode auf Tausende von Domänen anwachsen können.
Ab dieser Hash-Größe dauert es außerdem einige Sekunden, bis Nginx wieder geladen ist. Dies führt dazu, dass das System beim Neustart nicht mehr verfügbar ist.
Hier sind die allgemeinen Einstellungen (unter Ubuntu Server 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;
# server_name_in_redirect off;
# server_names_hash_max_size 2056;
server_names_hash_max_size 4112;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
ssl_session_cache shared:SSL:10m;
ssl_ciphers ALL:!kEDH:-ADH:+HIGH:+MEDIUM:-LOW:+SSLv2:-EXP;
}
(Unter den Chiffren befinden sich einige Haupt-Site-Konfigurationen und ein Haken an alle):
include /etc/user-nginx-confs/*;
server {
listen 80;
server_name .domain.com;
location / {
proxy_pass http://127.0.0.1:8011;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-SystemUse-Header 111;
}
}
server {
listen 443 ssl;
server_name .suredone.com;
ssl_certificate /etc/apache2/sddbx/sdssl/suredone_chained.crt;
ssl_certificate_key /etc/apache2/sddbx/sdssl/suredone.key;
location / {
proxy_pass http://127.0.0.1:44311;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-SystemUse-Header 111;
}
}
server {
listen 80 default_server;
listen 443 default_server ssl;
server_name _;
ssl_certificate /ssl/site_chained.crt;
ssl_certificate_key /ssl/site.key;
return 444;
}
(Und eine Beispiel-Benutzer-Conf-Datei)
server {
listen 80;
server_name username.domain.com;
location / {
proxy_pass http://127.0.0.1:8011;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-SystemUse-Header 1111;
}
}
server {
listen 443 ssl;
server_name username.domain.com;
ssl_certificate /ssl/site_chained.crt;
ssl_certificate_key /ssl/site.key;
location / {
proxy_pass http://127.0.0.1:44311;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-SystemUse-Header 1111;
}
}
Jede Hilfe und Anleitung wird sehr geschätzt !!