J'ai une application Rails opérationnelle sur mon serveur et j'aimerais maintenant en ajouter une autre.
Je veux que Nginx vérifie quelle est la demande et divise le trafic en fonction du nom de domaine
Les deux sites ont leur propre lien nginx.conf lié symboliquement aux sites activés, mais je reçois une erreur en démarrant nginx Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6
Ils écoutent tous les deux 80, mais pour des choses différentes.
Site n ° 1
upstream blog_Unicorn {
server unix:/tmp/Unicorn.blog.sock fail_timeout=0;
}
server {
listen 80 default deferred;
server_name walrus.com www.walrus.com;
root /home/deployer/apps/blog/current/public;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @blog_Unicorn;
location @blog_Unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_redirect off;
proxy_pass http://blog_Unicorn;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
Site deux:
upstream bubbles_Unicorn {
server unix:/tmp/Unicorn.bubbles.sock fail_timeout=0;
}
server {
listen 80 default deferred;
server_name bubbles.com www.bubbles.com;
root /home/deployer/apps/bubbles/current/public;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @bubbles_Unicorn;
location @bubbles_Unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_Host;
proxy_redirect off;
proxy_pass http://bubbles_Unicorn;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
Le paramètre default_server, s'il est présent, fera du serveur le serveur par défaut pour la paire adresse: port spécifiée.
C'est aussi évident, il ne peut y avoir qu'un seul serveur default.
Et c'est aussi dit:
Une directive d'écoute peut avoir plusieurs paramètres supplémentaires spécifiques aux appels système liés au socket. Ils peuvent être spécifiés dans n'importe quelle directive d'écoute, mais une seule fois pour l'adresse donnée: paire de ports.
Donc, vous devriez supprimer default
et deferred
de l’une des directives listen 80
. Et il en va de même pour la directive ipv6only=on
.
Cliquez sur le même problème, mais la directive dupliquée default_server
n'était pas la seule cause de ce message.
Vous ne pouvez utiliser le paramètre backlog
que sur l'une des directives server_name
.
Exemple
site 1:
server {
listen 80 default_server backlog=2048;
server_name www.example.com;
location / {
proxy_pass http://www_server;
}
site 2:
server {
listen 80; ## NOT NOT DUPLICATE THESE SETTINGS 'default_server backlog=2048;'
server_name blogs.example.com;
location / {
proxy_pass http://blog_server;
}
J'avais le même problème. Je l'ai corrigé en modifiant mon fichier /etc/nginx/sites-available/example2.com. J'ai changé le bloc serveur en
server {
listen 443 ssl; # modified: was listen 80;
listen [::]:443; #modified: was listen [::]:80;
. . .
}
Et dans /etc/nginx/sites-available/example1.com, j'ai commenté listen 80
et listen [::]:80
car le bloc serveur avait déjà été configuré pour 443.