我有一台服务器配置为通过Ngnix前端在多个域上托管多个node.js + express应用程序。一切都很好,除了从快速路线调用重定向时:
res.redirect('/admin');
然后客户端浏览器重定向到http://0.0.0.0:8090
似乎问题一直是来自express的重定向标头问题,但为了防止它相关,这里是相关域的nginx.conf文件:
server {
listen 0.0.0.0:80;
server_name *.example.com;
access_log /var/log/nginx_example_access.log;
error_log /var/log/nginx_example_error.log debug;
# proxy to node
location / {
proxy_pass http://0.0.0.0:8090/;
proxy_redirect off;
proxy_set_header Host $proxy_host;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
答案 0 :(得分:5)
解决。我的nginx conf文件中有一个问题导致node / express收到错误的请求标头。当相对路径传递到res.redirect
时,它会从传入的req
对象中提取主机并将其设置在响应标头中。
proxy_set_header Host $proxy_host;
应该是
proxy_set_header Host $host;
$proxy_host
是上游主机地址0.0.0.0:port
$host
是传入的请求标头主机example.com
<强>更新强>
正如Louis Chatriot在评论中指出的那样,较新版本的Nginx已将$host
替换为$http_host
,在先前版本中返回example.com:port
但现在返回example.com
。< / p>