it-swarm.com.de

Mit Nginx zwei Sites von einem Server aus bedienen

Ich habe auf meinem Server eine Rails-App installiert, und jetzt möchte ich noch eine hinzufügen.

Ich möchte, dass Nginx den Antrag prüft und den Verkehr basierend auf dem Domänennamen aufteilt

Beide Sites haben ihre eigene nginx.conf-Verknüpfung zu sites-enabled, aber beim Starten von nginx Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6 wird ein Fehler angezeigt.

Sie hören beide auf 80, aber auf verschiedene Dinge.

Site # 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 zwei:

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

Die Dokumentation sagt:

Wenn der Parameter default_server vorhanden ist, wird der Server zum Standardserver für das angegebene Paar aus Adresse und Port.

Es ist auch offensichtlich, dass es nur einen default -Server geben kann.

Und es heißt auch:

Eine Listen-Direktive kann mehrere zusätzliche Parameter enthalten, die für Socket-bezogene Systemaufrufe spezifisch sind. Sie können in jeder Listen-Direktive angegeben werden, jedoch nur einmal für die angegebene Adresse: Port-Paar.

Sie sollten also default und deferred aus einer der listen 80-Anweisungen entfernen. Gleiches gilt auch für die ipv6only=on-Direktive.

103
VBart

Triff einfach das gleiche Problem, aber die doppelte default_server-Direktive war nicht die einzige Ursache für diese Nachricht.

Sie können den Parameter backlog nur in einer der server_name-Anweisungen verwenden.

Beispiel

standort 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

Ich hatte das gleiche Problem. Ich habe das Problem behoben, indem ich meine Datei /etc/nginx/sites-available/example2.com modifizierte. Ich habe den Serverblock in geändert

server {
        listen 443 ssl; # modified: was listen 80;
        listen [::]:443; #modified: was listen [::]:80;
        . . .
}

In /etc/nginx/sites-available/example1.com habe ich listen 80 und listen [::]:80 auskommentiert, da der Serverblock bereits für 443 konfiguriert wurde.

0
LoganDihel