Nginx multiple roots
I'd like to divert off requests to a particular sub-directory, to another root location. How? My existing block is:
server {
listen 80;
server_name www.domain.com;
location / {
root /home/me/Documents/site1;
index index.html;
}
location /petproject {
root /home/me/pet-Project/website;
index index.html;
rewrite ^/petproject(.*)$ /$1;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
} }
That is, http://www.domain.com should serve /home/me/Documents/site1/index.html whereas http://www.domain.com/petproject should serve /home/me/pet-Project/website/index.html -- it seems that nginx re-runs all the rules after the replacement, and http://www.domain.com/petproject just serves /home/me/Documents/site1/index.html .
Solution 1:
The configuration has the usual problem that generally happens with nginx. That is, using root
directive inside location
block.
Try using this configuration instead of your current location
blocks:
root /home/me/Documents/site1;
index index.html;
location /petproject {
alias /home/me/pet-Project/website;
}
This means that the default directory for your website is /home/me/Documents/site1
, and for /petproject
URI, the content is served from /home/me/pet-Project/website
directory.
Solution 2:
You need the break
flag added to the rewrite rule, so that processing stops, and as this is inside a location block processing will continue inside that block:
rewrite ^/petproject/?(.*)$ /$1 break;
Note I also added /?
to the matching pattern so that you don't end up with double slashes at the beginning of the url.