gpt4 book ai didi

node.js - nginx 位置打破 Node ( sails )路线

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:38 26 4
gpt4 key购买 nike

我一直在寻找正确的 nginx 配置来实现服务器位置(与/不同)并让 Node 路由正常工作

上下文

  • Node 应用程序运行于 http://localhost:1337
  • Nginx 服务器的 proxy_pass 指向 Node 应用程序
  • 服务器位置属性/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 时,我得到了正确的 Node 主页。

然后,当请求 www.domain.com/app/test 时,我希望它能给我带来 http://localhost:1337/test 。这并没有发生,我得到的是 404 not found 。因此,由于某种原因,该位置无法识别 Node 路由

奇怪的是,如果位置是/而不是/app,一切都会按预期工作。因此,问题可能与位置有关。

可能的修复

我已经尝试在位置下添加重写,但没有成功:

location /app {
rewrite ^/app(.*) /$1 break;
...
}
<小时/>

您知道为什么会发生这种情况吗?

最佳答案

如果您尝试将前端 URI /app/test 映射到上游 URI /test,那么您的 location 指令上缺少尾随 /。尝试:

location /app/ {
...
proxy_pass http://127.0.0.1:1337/;
...
}

请注意,locationproxy_path 都有一个尾随 /

当然,这意味着 URI /app 将不再起作用,但您可以使用以下方法轻松修复该问题:

location = /app { rewrite ^ /app/ last; }

或者:

location = /app { return 301 /app/; }

参见this document了解更多。

关于node.js - nginx 位置打破 Node ( sails )路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com