2012-10-09 30 views
41

Ho diversi set di file statici .html sul mio server, e vorrei usare nginx per servirli direttamente. Ad esempio, nginx dovrebbe servire un URI del seguente schema:Usa nginx per servire file statici da sottodirectory di una determinata directory

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

con il file .html che si trova a /home/www-data/mysite/public/doc/foo/bar.html. Puoi pensare a foo come nome del set e bar come nome del file qui.

Mi chiedo se il seguente pezzo di configurazione nginx farebbe il lavoro:

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

In altre parole, tutte le richieste del modello /public/doc/.../....html stanno per essere gestita da nginx, e se un dato URI non è trovato, viene restituito un valore predefinito www.mysite.com/404.html.

risposta

61

Dovrebbe funzionare, tuttavia http://nginx.org/en/docs/http/ngx_http_core_module.html#alias dice:

Quando la posizione corrisponde l'ultima parte del valore della direttiva: è meglio utilizzare la direttiva root invece:

che cedere:

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

grazie per il suggerimento! una domanda però, devo usare regex come '^ (/ public/doc /)' qui? O '/ public/doc /' va bene? – MLister

+0

just/public/doc/è sufficiente in questo caso, e in realtà leggermente migliore dato che non aggiunge il (piccolo) onere aggiuntivo della corrispondenza regex – cobaco