我正在尝试在 nginx 上的一个域下设置 2 个 ember-cli 应用程序。
http://example.com/
http://example.com/bar
App 1 存储在 /var/www/foo 下,App 2 存储在 /var/www/bar 下。
第一个目标是让主根指向 /var/www/bar,并将其设置为/
指向 foo 和/
指向 bar。这主要是为了保持设置方式的一致性。不过,我很乐意改变设置,让它正常工作。
我有以下 nginx 代码片段:
server {
listen 80;
server_name www.example.com;
root /var/www/bar;
location /bar {
root /;
try_files $uri $uri/ /index.html?/$request_uri;
}
location / {
root /var/www/foo;
try_files $uri /index.html?/$request_uri;
}
}
我尝试过其他方法,但还是无法正常工作。似乎location /
覆盖了位置/bar/
。如果我注释掉location /
指令,则/bar
可以工作,但显然不行/
。反之亦然。如何让这两者一起工作?
笔记:此时,ember-cli 并不是真正的促成因素。只要让 index.html 文件工作就可以了。
答案1
指令中的最后一个参数try_files
是 fallback code、location 或 URI。对于后两种情况,nginx 会进行内部重定向,因此预期的行为是转到 location 。你还在location bar 指令/
中犯了一个错误,它将匹配你的文件系统的根目录!root
/
您需要将 fallback URI 更改为/bar/index.html?/$request_uri
。如果理解正确的话,您希望从 提供 bar 的 index.html /var/www/bar/index.html
。两种解决方案:
[1]
server {
listen 80;
server_name www.example.com;
root /var/www;
location /bar {
try_files $uri $uri/ /bar/index.html?/$request_uri;
}
location / {
root /var/www/foo;
try_files $uri /index.html?/$request_uri;
}
}
[2]
server {
listen 80;
server_name www.example.com;
root /var/www/bar;
location /bar/ {
alias /var/www/bar/;
try_files $uri $uri/ /bar/index.html?/$request_uri;
}
location / {
root /var/www/foo;
try_files $uri /index.html?/$request_uri;
}
}