Nous utilisons Nginx en tant que proxy inverse vers Apache dans un service qui donne à chacun son propre site web. Lors de la création d'un compte, le système crée un nouveau fichier de configuration nginx pour le domaine avec deux entrées, une pour le port 80, l'autre pour le 443. Nous remarquons qu'environ toutes les 30 domaines, nous obtenons l'erreur:
Redémarrage de nginx : nginx: [emerg] impossible de construire le serveur_names_hash,
vous devriez augmenter server_names_hash_max_size: 256
ou server_names_hash_bucket_size: 64.
Avec environ 200 domaines et en augmentation, nous avons dû augmenter la taille max du server_names_hash à 4112 et nous sommes préoccupés par le fait que cela ne va pas bien évoluer. Je cherche à comprendre comment ces configurations fonctionnent et quels paramètres optimaux devraient être définis pour nous permettre de passer à des milliers de domaines en utilisant cette méthode.
Aussi, à cette taille de hachage, nginx commence à mettre plusieurs secondes pour recharger, ce qui rend le système indisponible pendant son redémarrage.
Voici les paramètres globaux (fonctionnant sur le serveur 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 {
##
# Paramètres de base
##
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;
##
# Paramètres de journalisation
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Paramètres de compression Gzip
##
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;
##
# Configurations des hôtes virtuels
##
include /etc/nginx/conf.d/*.conf;
ssl_session_cache shared:SSL:10m;
ssl_ciphers ALL:!kEDH:-ADH:+HIGH:+MEDIUM:-LOW:+SSLv2:-EXP;
}
(Ci-dessous se trouvent quelques configurations principales du site et un intercepteur)
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;
}
(Et un exemple de fichier de configuration utilisateur)
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;
}
}
Toute aide et direction est grandement appréciée!!