web-dev-qa-db-fra.com

Servir deux sites à partir d'un serveur avec Nginx

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;
}
63
Chris

La documentation dit:

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.

103
VBart

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;
    }
9
Guy

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.

0
LoganDihel