NGINX Location Configuration for Static Sites
The Problem:
I was really frustrated when I couldn’t figure out how to add a static location to NGINX for a website I made for a game. I kept trying to do something like this:
location / {
root /home/ubuntu/personal-website;
}
location /array {
root /home/ubuntu/game-website/_site;
}
But everytime I tried to visit http://ptsteadman.com/array
, I would get a 404
error. I tried a bunch of things: I changed the “root” of the the /
location
to my game website, and it worked. But no matter what I did, after using sudo service nginx restart
, trying to visit the /array
location still resulted in
a 404. I couldn’t add the new route/location.
The Solution:
Eventually, I realized that the text after the slash in the location is the
directory that NGINX will try to find in the “root” location. So, location /array
will look for the directory (or file) array
in whatever directory
“root” is set to. So, I created a symlink to the root of my static jekyll site
with the command ln -s /home/ubuntu/array-website/_site /home/ubuntu/array
,
and then I could set up my nginx config file in sites-enabled
as below:
location / {
root /home/ubuntu/personal-website;
}
location /array {
root /home/ubuntu;
}
I think this stuff is all pretty obvious to someone who really understands NGINX
and file serving, but I only touch NGINX when I’ve finished a project and feel
impatient to deploy. I think it’s very confusing that NGINX seems to handle
paths differently between /
locations and and /foo
locations, but a real
understanding of NGINX might clear things up.