2012-07-19 15 views
128

Szukam obsługi adresu URL katalogu głównego subdomeny i katalogu subdomeny do dwóch różnych folderów na moim serwerze. Oto prosty set-up, które mam i nie działa ...Skonfiguruj nginx z wieloma lokalizacjami z różnymi folderami głównymi na poddomenie

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

W tym przykładzie będzie test.example.com/ przyniesie plik indeksu w /web/test.example.com/ www

i zamiar test.example.com/static przyniesie plik indeksu w /web/test.example.com/static

Odpowiedz

156

trzeba użyć dyrektywy alias dla 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; 
    } 

} 

nginx wiki wyjaśnia różnicę pomiędzy root i alias lepiej niż ja:

pamiętać, że może to wyglądać podobnie do dyrektywy korzeniowego na pierwszy rzut oka, ale korzeń dokument nie zmienia, tylko używane ścieżka systemu plików na żądanie. Część lokalizacji żądania została usunięta w przypadku problemów z Nginx.

+42

Nie potrzebuje "aliasu". Proszę przeczytać [oficjalne dokumenty] (http://nginx.org/r/alias), a nie wiki społeczności wypełnione przez użytkowników. Cytat: * Kiedy lokalizacja pasuje do ostatniej części wartości dyrektywy, lepiej użyć dyrektywy root *. – VBart

+4

To działało dla mnie, ale brakowało mu końcowego slasha. Alias ​​powinien przeczytać: alias /web/test.example.com/static/; – ajma

+4

@VBart doktorzy mówią dokładnie to, co cytujesz, mówiąc, ale w ogóle nie usprawiedliwiają tej instrukcji - wydaje się to arbitralnym wyborem stylu. Czy widzisz jakiś logiczny powód za tym? –

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

jakie jest inne pytanie? – TangMonk

+1

@Dooden różnica: 'root /web/test.example.com;' zamiast 'root /web/test.example.com/static;'.nginx mapuje ścieżkę określoną przez * location * do drzewa diretory, a ponieważ ścieżka i katalog źródłowy mają tę samą nazwę, działa z 'root'. – rmoestl

58

System dyrektywa Lokalizacja jest

Jak chcesz przekierować wszystkie żądania, które rozpocznie /static i dane obecne w /var/www/static

tak proste metoda jest odseparowana ostatni folder od pełnej ścieżki Oznacza to, że

Pełna ścieżka: /var/www/static

Ostatni Ścieżka: /static i pierwsza ścieżka: /var/www

location <lastPath> { 
    root <FirstPath>; 
} 

Więc zobaczymy co zrobiłeś błąd, a co twoje rozwiązania

swój błąd:

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

Twoje rozwiązania:

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

To mi pomogło: uświadomiłem sobie, że muszę albo zmienić nazwę mojego folderu, albo skonfigurować dowiązanie symboliczne, aby wszystko działało. – cjm

+1

dziękuję bardzo, nie udało mi się dokładnie w ten sposób :) – bobmoff

Powiązane problemy