2012-10-09 10 views
41

Mam kilka zestawów statycznych plików .html na moim serwerze, a ja chciałbym użyć nginx, aby obsługiwać je bezpośrednio. Na przykład, nginx powinien służyć URI z następującym wzorem:Użyj nginx do udostępniania plików statycznych z podkatalogów danego katalogu

www.mysite.com/public/doc/foo/bar.html 

z plikiem .html, który znajduje się w /home/www-data/mysite/public/doc/foo/bar.html. Możesz użyć foo jako nazwy zestawu, a bar jako nazwy pliku tutaj.

Zastanawiam się, czy po kawałek nginx config by wykonać zadanie:

server { 
    listen  8080; 
    server_name www.mysite.com mysite.com; 
    error_log  /home/www-data/logs/nginx_www.error.log; 
    error_page 404 /404.html; 

    location /public/doc/ { 
     autoindex   on; 
     alias    /home/www-data/mysite/public/doc/; 
    } 

    location = /404.html { 
     alias    /home/www-data/mysite/static/html/404.html; 
    } 
} 

Innymi słowy, wszystkie wnioski wzoru /public/doc/.../....html zamiar być obsługiwane przez nginx, a jeśli dana URI nie jest znaleziony, zwracany jest domyślny www.mysite.com/404.html.

Odpowiedz

61

To powinno działać, jednak http://nginx.org/en/docs/http/ngx_http_core_module.html#alias mówi:

Gdy lokalizacja jest zgodna z ostatnią część wartości tej dyrektywy: lepiej jest użyć dyrektywy korzeniowy Zamiast:

który przyniósłby:

server { 
    listen  8080; 
    server_name www.mysite.com mysite.com; 
    error_log  /home/www-data/logs/nginx_www.error.log; 
    error_page 404 /404.html; 

    location /public/doc/ { 
    autoindex on; 
    root /home/www-data/mysite; 
    } 

    location = /404.html { 
    root /home/www-data/mysite/static/html; 
    }  
} 
+0

dzięki za napiwek! jedno pytanie, czy muszę używać wyrażenia regularnego takiego jak '^ (/ public/doc /)' tutaj? Lub '/ public/doc /' jest w porządku? – MLister

+0

just/public/doc/jest wystarczający w tym przypadku, a właściwie nieco lepszy, ponieważ nie ma (małego) dodatkowego obciążenia dopasowania do regex – cobaco