2012-07-19 12 views
128

Sto cercando di servire l'URL di root di un sottodominio e la directory di un sottodominio in due diverse cartelle sul mio server. Ecco la semplice set-up che ho e non funziona ...Configura nginx con più posizioni con diverse cartelle radice sul sottodominio

server { 

    index index.html index.htm; 
    server_name test.example.com; 

    location/{ 
      root /web/test.example.com/www; 
    } 

    location /static { 
      root /web/test.example.com/static; 
    } 
} 

In questo esempio andando a test.example.com/ avrebbe portato il file di indice in /web/test.example.com/ www

e andando a test.example.com/static porterebbe il file di indice in /web/test.example.com/static

risposta

156

È necessario utilizzare la direttiva alias per location /static:

server { 

    index index.html; 
    server_name test.example.com; 

    root /web/test.example.com/www; 

    location /static { 
    alias /web/test.example.com/static; 
    } 

} 

La nginx wiki spiega la differenza tra radice e l'alias meglio di me:

Si noti che potrebbe essere simile alla direttiva radice a prima vista, ma la radice del documento non cambia, solo il percorso del file system utilizzato per la richiesta. La parte relativa alla posizione della richiesta viene eliminata nei problemi Nginx della richiesta.

+42

Non ha bisogno di "alias". Per favore, leggi [i documenti ufficiali] (http://nginx.org/r/alias), non la wiki della comunità compilata dagli utenti. Citazione: * Quando la posizione corrisponde all'ultima parte del valore della direttiva, è preferibile utilizzare la direttiva root *. – VBart

+4

Questo ha funzionato per me, tranne che manca una barra finale. L'alias dovrebbe essere: alias /web/test.example.com/static/; – ajma

+4

@VBart i documenti dicono esattamente quello che le hai citate come dicendo, ma non giustificano affatto questa istruzione - sembra una scelta di stile arbitraria. Vedi qualche motivo logico dietro di esso? –

35
server { 

    index index.html index.htm; 
    server_name test.example.com; 

    location/{ 
     root /web/test.example.com/www; 
    } 

    location /static { 
     root /web/test.example.com; 
    } 
} 

http://nginx.org/r/root

+6

@All, no: http://nginx.org/en/docs/http/ngx_http_core_module.html#alias – Athlan

+0

Qual è il diverso con chiesto? – TangMonk

+1

@Wooden la differenza: 'root /web/test.example.com;' invece di 'root /web/test.example.com/static;'.nginx mappa il percorso specificato da * location * nell'albero delle directory e poiché il percorso e la directory di origine hanno lo stesso nome, funziona con 'root'. – rmoestl

58

Il sistema direttiva Location è

Come si desidera inoltrare tutte le richieste che partono /static i dati presenti in /var/www/static

Quindi, un semplice il metodo è separato dall'ultima cartella dal percorso completo , Questo significa

Percorso completo: /var/www/static

ultimo percorso: /static e Primo percorso: /var/www

location <lastPath> { 
    root <FirstPath>; 
} 

Quindi, consente di vedere ciò che hai fatto errore e qual è il tuo soluzioni

Il tuo errore di scrittura:

location /static { 
    root /web/test.example.com/static; 
} 

Your Solutions:

location /static { 
    root /web/test.example.com; 
} 
+0

Questo mi ha aiutato: mi sono reso conto che avrei dovuto rinominare la mia cartella o impostare un collegamento simbolico per far funzionare le cose. – cjm

+1

grazie mille, stavo fallendo esattamente in questo modo :) – bobmoff

Problemi correlati