我一直在寻找correct nginx configuration to achieve a server location (different from /) and get node routes working
。
语境
- 在http://localhost:1337上运行的节点应用程序
- 具有 proxy_pass 指向节点应用程序的 Nginx 服务器
- 服务器位置属性/app
- http请求重定向到https
Nginx 配置文件
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 not found 。所以,出于某种原因,the location isn't recognizing node routing
.
奇怪的是,如果位置是 / 而不是 /app,那么一切都按预期工作。因此,问题可能与位置有关。
可能的修复
我已经尝试在位置下添加重写但没有运气:
location /app {
rewrite ^/app(.*) /$1 break;
...
}
您知道为什么会发生这种情况吗?