2012-12-03 8 views
61

Ho un'applicazione Rails installato e funzionante sul mio server e ora mi piacerebbe aggiungerne un altro.Serving due siti da un server con Nginx

voglio Nginx per verificare ciò che la richiesta è per il traffico e divisa in base al nome del dominio

Entrambi i siti hanno un proprio nginx.conf link simbolico all'interno di siti abilitati, ma ottengo un errore di partenza nginx Starting nginx: nginx: [emerg] duplicate listen options for 0.0.0.0:80 in /etc/nginx/sites-enabled/bubbles:6

sono entrambi in ascolto su 80, ma per cose diverse.

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

Sito due:

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, il sintassi 'default' cambiato in 'default_server' in 0.8.21 http://nginx.org/en/docs/http/request_processing.html – spuder

+0

@spuder Grazie, questo improvvisamente risolto il mio parametro "default_server" può essere specificato per l'errore predefinito "listen" only' error – user3132194

risposta

100

The documentation says:

Il parametro default_server, se presente, farà sì che il server per diventare il server di default per le specifiche indirizzo: coppia di porte.

E 'anche ovvio, non ci può essere un solo server predefinito.

Ed è dice anche:

Un ascoltare direttiva può avere diversi parametri aggiuntivi specifici per chiamate di sistema di socket-related. Possono essere specificati in qualsiasi direttiva di ascolto, ma solo una volta per l'indirizzo specificato: coppia di porte.

Quindi, è necessario rimuovere default e deferred da uno dei listen 80 direttive. E lo stesso vale per la direttiva ipv6only=on.

+0

Ok ho fatto e superato il controllo degli errori su nginx che inizia. Il sito 2 funziona come previsto, il sito 1 restituisce 400 di nginx. Eventuali suggerimenti? – Chris

+0

Cosa c'è nel registro errori? – VBart

+0

uguale a questo: http://stackoverflow.com/questions/7334193/nginx-reverse-proxy-many-html-status-code-400-responses- perché Nessun errore ma "-" 400 0 "-" " - "nel registro degli accessi – Chris

6

appena colpito questo stesso problema, ma la direttiva duplicato default_server non era l'unica causa se questo messaggio.

È possibile utilizzare solo il parametro backlog su una delle direttive server_name.

Esempio

sito 1:

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

sito 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

ho avuto lo stesso problema. Ho riparato modificando il mio file /etc/nginx/sites-available/example2.com. Ho cambiato il blocco del server per

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

E in /etc/nginx/sites-available/example1.com ho commentato listen 80 e listen [::]:80 perché il blocco del server era già stato configurato per 443.

+0

Questo in realtà non risponde alla domanda.Se hai una domanda diversa, puoi chiedere facendo clic su [Chiedi domanda] (https://stackoverflow.com/questions/ask) .Puoi anche [aggiungere una taglia] (https://stackoverflow.com/help/privileges/set-bounties) per attirare più attenzione a questo una volta che hai abbastanza [reputazione] (https://stackoverflow.com/help/whats-reputation). - [Dalla recensione] (/ recensione/post di bassa qualità/18990255) –

Problemi correlati