2012-03-28 15 views
64

Ho nginx che funge da proxy inverso ad apache. Ora devo aggiungere un nuovo sottodominio che servirà i file da un'altra directory, ma allo stesso tempo voglio che tutte le direttive di posizione e proxy_pass che ho per l'host predefinito si applichino anche al sottodominio.configurazione sottodominio nginx

So che se copio le regole dall'host predefinito al nuovo sottodominio funzionerà, ma esiste un modo per il sottodominio di ereditare le regole? Qui di seguito è un esempio di configurazione

server { 
    listen  80; 
    server_name www.somesite.com; 
    access_log logs/access.log; 
    error_log logs/error.log error; 


    location /mvc { 
     proxy_pass http://localhost:8080/mvc; 
    } 


    location /assets { 
     alias /var/www/html/assets; 
     expires  max; 
    } 

    ... a lot more locations 
} 

server { 
    listen  80; 
    server_name subdomain.somesite.com; 

    location/{ 
       root /var/www/some_dir; 
       index index.html index.htm; 
     } 
} 

Grazie

risposta

76

Si potrebbe spostare le parti comuni a un altro file di configurazione e include da entrambi i contesti di server. Questo dovrebbe funzionare:

server { 
    listen 80; 
    server_name server1.example; 
    ... 
    include /etc/nginx/include.d/your-common-stuff.conf; 
} 

server { 
    listen 80; 
    server_name another-one.example; 
    ... 
    include /etc/nginx/include.d/your-common-stuff.conf; 
} 

Modifica: ecco un esempio che è effettivamente copiato dal mio server in esecuzione. Configuro le mie impostazioni di base del server in /etc/nginx/sites-enabled (cose normali per nginx su Ubuntu/Debian). Per esempio, il mio principale file di configurazione del 's del server bunkus.org è /etc/nginx/sites-enabled e sembra che questo:

server { 
    listen 80 default_server; 
    listen [2a01:4f8:120:3105::101:1]:80 default_server; 

    include /etc/nginx/include.d/all-common; 
    include /etc/nginx/include.d/bunkus.org-common; 
    include /etc/nginx/include.d/bunkus.org-80; 
} 

server { 
    listen 443 default_server; 
    listen [2a01:4f8:120:3105::101:1]:443 default_server; 

    include /etc/nginx/include.d/all-common; 
    include /etc/nginx/include.d/ssl-common; 
    include /etc/nginx/include.d/bunkus.org-common; 
    include /etc/nginx/include.d/bunkus.org-443; 
} 

Come esempio ecco il file /etc/nginx/include.d/all-common che è incluso da entrambi i server contesti:

index index.html index.htm index.php .dirindex.php; 
try_files $uri $uri/ =404; 

location ~ /\.ht { 
    deny all; 
} 

location = /favicon.ico { 
    log_not_found off; 
    access_log off; 
} 

location ~ /(README|ChangeLog)$ { 
    types { } 
    default_type text/plain; 
} 
+1

Nizza idea. Ho bisogno di racchiudere le direttive in un altro, come ho fatto quello che suggerisci e nginx si lamenta quando lo riavvio che nginx: [emerge] la direttiva "location" non è consentita qui – Thomas

+0

Sto modificando la mia risposta invece di questo commento :) –

+0

Beh, questo è quello che ho provato e ho ricevuto l'errore che ho menzionato. Hai provato e ha funzionato? – Thomas

Problemi correlati