Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use nginx to serve static files from subdirectories of a given directory

I have several sets of static .html files on my server, and I would like use nginx to serve them directly. For example, nginx should serve an URI of the following pattern:

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

with the .html file that is located at /home/www-data/mysite/public/doc/foo/bar.html. You can think of foo as the set name, and bar as the file name here.

I wonder whether the following piece of nginx config would do the job:

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 other words, all requests of the pattern /public/doc/.../....html are going to be handled by nginx, and if any given URI is not found, a default www.mysite.com/404.html is returned.

like image 664
MLister Avatar asked Oct 09 '12 19:10

MLister


1 Answers

It should work, however http://nginx.org/en/docs/http/ngx_http_core_module.html#alias says:

When location matches the last part of the directive’s value: it is better to use the root directive instead:

which would yield:

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;   }        } 
like image 184
cobaco Avatar answered Oct 10 '22 17:10

cobaco