因此,当我指向 nginx conf 中的 node.js 应用程序时,我正在设置一个虚拟路径。相关部分如下所示:
location /app {
rewrite /app/(.*) /$1 break;
proxy_pass http://localhost:3000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Run Code Online (Sandbox Code Playgroud)
效果很好,除了当我的 node.js 应用程序(一个快速应用程序)调用重定向时。
例如,开发箱在端口 8080 上运行 nginx,因此节点应用程序根目录的 url 如下所示:
当我从节点调用重定向到“/app”时,实际的重定向会转到:
小智 60
我只需要解决运行在 nginx 后面的 Jenkins 的相同问题。对我来说是将服务器端口包含在Host
发送给 Jenkins的标头中:
proxy_set_header Host $host:$server_port;
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
mgo*_*ven 22
问题是 Node.js 应用程序没有正确发出重定向。您可以使用proxy_redirect
nginx 来纠正这个问题:
proxy_redirect http://localhost/ http://localhost:8080/;
Run Code Online (Sandbox Code Playgroud)
小智 17
根据关于此问题的对话,正确的解决方案是调整代理的Host
标头指令。
改变这个:
proxy_set_header Host $host;
Run Code Online (Sandbox Code Playgroud)
对此:
proxy_set_header Host $http_host;
Run Code Online (Sandbox Code Playgroud)
$http_host
保存 HTTP HOST 标头中指定的值,其中包括端口。重定向应该选择自定义端口,而无需进一步自定义 OP 的设置。
这些答案(同一张票)进一步详细说明:
小智 6
我尝试了上述解决方案,但是每当节点应用程序在位置标头中发出完全限定的 URL 时,它们都失败了,例如“ http://nodeapp.com:8080/new/location ”
所以我最终使用 $http_host 来传递主机和端口。并使用匹配 ~^ 完全重写 url。
proxy_pass http://10.0.0.3:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect default;
proxy_redirect ~^(https?://[^:]+):\d+(?<relpath>/.+)$ http://10.0.0.3:8000$relpath;
Run Code Online (Sandbox Code Playgroud)
在我们的例子中,Node 服务器在 8080 上运行,我们的 nginx 代理在 8000 上运行。这意味着位置标头中的每个完全限定的 URL 都需要重写。希望这对某人有帮助!!
归档时间: |
|
查看次数: |
71667 次 |
最近记录: |