我一直在寻找correct nginx configuration to achieve a server location (different from /) and get node routes working
。
server {
listen 80;
server_name domain.com;
return 301 https://$server_name$request_uri;
}
server {
#listen 80 default_server;
#listen [::]:80 default_server;
listen 443 ssl;
server_name domain.com;
# add Strict-Transport-Security to prevent man in the middle attacks
add_header Strict-Transport-Security "max-age=31536000";
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location /app {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:1337/;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_key sfs$request_uri$scheme;
}
}
导航至 www.domain.com/app 时,我会获得正确的节点主页。
然后,在请求 www.domain.com/app/test 时,我希望它能为我带来http://localhost:1337/test。那是没有发生的,我找不到404了。因此,出于某种原因,the location isn't recognizing node routing
。
奇怪的是如果位置是/而不是/ app,一切都按预期工作。因此,问题可能与位置有关。
我已经尝试在位置下添加重写而没有运气:
location /app {
rewrite ^/app(.*) /$1 break;
...
}
你知道为什么会发生这种情况吗?
答案 0 :(得分:1)
如果您尝试将前端URI /app/test
映射到上游URI /test
,那么您在/
指令上缺少尾随location
。尝试:
location /app/ {
...
proxy_pass http://127.0.0.1:1337/;
...
}
请注意,location
和proxy_path
都有一个尾随/
。
当然,这意味着URI /app
将不再有效,但您可以通过以下方式轻松解决:
location = /app { rewrite ^ /app/ last; }
或:
location = /app { return 301 /app/; }
有关详情,请参阅this document。