2012-12-03 4 views
61

Ich habe eine Rails-App auf meinem Server laufen und jetzt möchte ich eine andere hinzufügen.Serving zwei Standorte von einem Server mit Nginx

Ich möchte Nginx zu überprüfen, was die Anforderung und Verkehr auf Domain-Namen

Beide Standorte ihre eigenen nginx.conf haben Symlink in sites-enabled, aber ich erhalte eine Fehlermeldung starten nginx Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6

Basis Split ist

Sie hören beide auf 80, aber für 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; 
} 
+1

FYI konfiguriert worden war, die Die Syntax 'default' wurde in '0.8.21 http://nginx.org/en/docs/http/request_processing' in 'default_server' geändert.html – spuder

+0

@spuder Danke, das plötzlich behoben mein '" default_server "-Parameter kann für die Standard" listen "Direktive nur angegeben werden. Fehler – user3132194

Antwort

100

The documentation says:

Der default_server Parameter, falls vorhanden, bewirkt, dass der Server der Standardserver für die angegebene werden Adresse: Portpaar.

Es ist auch offensichtlich, es kann nur einen Standard Server geben.

Und es sagt auch:

A hören Richtlinie mehrere zusätzliche spezifische Parameter Socket bezogene Systemaufrufe haben. Sie können in jeder listen-Direktive angegeben werden, aber nur einmal für die angegebene Adresse: Port-Paar.

Also, sollten Sie default und deferred von einem der listen 80 Richtlinien entfernen. Und das gilt auch für die ipv6only=on Richtlinie.

+0

Okay, ich habe das getan und habe die Fehlerüberprüfung bei Nginx-Start überstanden. Site 2 funktioniert wie erwartet, Site 1 gibt 400 von nginx zurück. Irgendwelche Vorschläge? – Chris

+0

Was ist im Fehlerprotokoll? – VBart

+0

das gleiche wie das: http://stackoverflow.com/questions/7334193/nginx-reverse-proxy-many-html-status-code-400-responses-why keine Fehler aber "-" 400 0 "-" " - "im Zugriffsprotokoll – Chris

6

Drücken Sie einfach das gleiche Problem, aber die doppelte default_server Direktive war nicht die einzige Ursache, wenn diese Nachricht.

Sie können den Parameter backlog nur für eine der server_name-Anweisungen verwenden.

Beispiel

Seite 1:

server { 
    listen 80 default_server backlog=2048; 
    server_name www.example.com; 
    location/{ 
     proxy_pass http://www_server; 
    } 

Seite 2:

server { 
    listen 80; ## NOT NOT DUPLICATE THESE SETTINGS 'default_server backlog=2048;' 
    server_name blogs.example.com; 
    location/{ 
     proxy_pass http://blog_server; 
    } 
0

ich das gleiche Problem haben. Ich habe es behoben, indem ich meine Datei /etc/nginx/sites-available/example2.com geändert habe. Ich änderte den Server-Block

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

Und in /etc/nginx/sites-available/example1.com ich aus listen 80 kommentiert und listen [::]:80, da der Server-Block bereits für 443.

+0

Dies beantwortet nicht wirklich die Frage.Wenn Sie eine andere Frage haben, können Sie fragen Klicken Sie dazu auf [Frage stellen] (https://stackoverflow.com/questions/ask). Sie können [Kopfgeld hinzufügen] (https://stackoverflow.com/help/privileges/set-bounties) hinzufügen, um mehr Aufmerksamkeit zu erhalten zu dieser Frage auf einmal haben Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation). - [Aus Bewertung] (/ review/low-quality-posts/18990255) –

Verwandte Themen