Configura nginx con più posizioni con diverse cartelle radice sul sottodominio


202

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 configurazione che ho e non funziona ...

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, test.example.com/il file indice verrà inserito/web/test.example.com/www

e andando test.example.com/staticporterebbe dentro il file indice/web/test.example.com/static

Risposte:


238

È necessario utilizzare la aliasdirettiva 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/;
  }

}

Il wiki di nginx spiega la differenza tra root e alias meglio di me:

A prima vista potrebbe sembrare simile alla direttiva root, ma la radice del documento non cambia, ma solo il percorso del file system utilizzato per la richiesta. La parte relativa alla posizione della richiesta viene eliminata nella richiesta Problemi di Nginx.

Si noti che roote aliasgestire le barre finali in modo diverso.


67
Non ha bisogno alias. Per favore, leggi i documenti ufficiali , non la wiki della community compilata dagli utenti. Citazione: quando location corrisponde all'ultima parte del valore della direttiva è meglio usare la direttiva root .
VBart

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

8
@Va parte i documenti dicono esattamente ciò che li citi dicendo, ma non giustificano affatto quell'istruzione - sembra una scelta di stile arbitraria. Vedi qualche ragione logica dietro di esso?
Mark Amery,

104

Il sistema della direttiva Location è

Come se volessi inoltrare tutte le richieste che iniziano /statice i tuoi dati presenti/var/www/static

Quindi un metodo semplice è separato dall'ultima cartella dal percorso completo, ciò significa

Percorso completo : /var/www/static

Ultimo percorso: /static e primo percorso:/var/www

location <lastPath> {
    root <FirstPath>;
}

Vediamo quindi cosa hai sbagliato e quali sono le tue soluzioni

Errore tuo :

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

Le tue soluzioni:

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

2
Questo mi ha aiutato: mi ha fatto capire che avevo bisogno di rinominare la mia cartella o impostare un link simbolico per far funzionare le cose.
cjm

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

10
Sembra una limitazione SEVERE sulla libertà di fare ciò che voglio. Voglio che gli URI che iniziano con un determinato percorso vengano serviti da una directory che non contenga quel percorso URI nel suo percorso di file fisico. Con questa soluzione, sono FORZATO di inserire i miei documenti su disco in un percorso che termina con "/ static". Non mi piace per niente. Voglio la libertà assoluta e completa di mettere i file dove voglio.
Szczepan Hołyszewski,

48
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


2
qual è il diverso con chiesto?
TangMonk,

5
@Wooden la differenza: root /web/test.example.com;invece di root /web/test.example.com/static;. nginx esegue il mapping del percorso specificato da location all'albero della directory e poiché il percorso e la directory di origine condividono lo stesso nome, funziona con root.
rmoestl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.