• 716-472-4484
  • ptsteadman@gmail.com

首页

我一直在尽可能充分利用那台长期运行的 AWS t2.micro 实例,
这意味着我在同一台服务器上用不同的路径跑着很多项目。每当我完成一个项目时,我都得重新学习一遍:如何在 NGINX 的虚拟主机里添加新的 “location”(路径)。

当我为正在开发的游戏做了一个 Jekyll 静态站点,却怎么也弄不清如何给它加一个静态 location 时,我真的很崩溃。我一直在尝试类似下面这样的写法:

location / {
  root /home/ubuntu/personal-website;
}
location /array {
  root /home/ubuntu/array-website/_site;
}

但每次我访问 [http://ptsteadman.com/array],都会得到 404。
我试了很多办法:把 / 这个 location 的 root 改成我的游戏站点路径,它是能工作的。但无论我怎么改,执行 sudo service nginx restart 之后,访问 /array 这个 location 仍然是 404。我就是没法把新路由/location 加进去。

最后我才意识到:location 里斜杠后面的文本,其实是 NGINX 会在 root 目录下尝试寻找的目录名。
也就是说,location /array 会在 root 指定的目录里去找名为 array 的目录(或文件)。
因此我用 ln -s /home/ubuntu/array-website/_site /home/ubuntu/array 把静态 Jekyll 站点的根目录做了一个软链接到 /home/ubuntu/array,然后把 sites-enabled 里的 nginx 配置写成下面这样:

location / {
  root /home/ubuntu/personal-website;
}
location /array {
  root /home/ubuntu;
}

我猜对那些真正理解 NGINX 和静态文件服务的人来说,这些都很显然;
但我只有在做完一个项目、迫不及待想部署时才会碰 NGINX。
我觉得最让人迷惑的是:NGINX 对 //foo 这类 location 的路径处理方式看起来不一样。
也许对 NGINX 有更深入的理解就能把这些疑惑捋顺。