Dan*_*del 5 nginx node.js express
我有一台服务器配置为通过Ngnix前端在多个域上托管多个node.js + express应用程序.一切都很好,除了从快速路线调用重定向时:
res.redirect('/admin');
Run Code Online (Sandbox Code Playgroud)
然后客户端浏览器重定向到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;
}
}
Run Code Online (Sandbox Code Playgroud)
解决了.我的nginx conf文件中有一个问题导致node/express收到错误的请求标头.传入相对路径时res.redirect,它会从传入req对象中提取主机并将其设置在响应标头中.
proxy_set_header Host $proxy_host;
Run Code Online (Sandbox Code Playgroud)
本来应该
proxy_set_header Host $host;
Run Code Online (Sandbox Code Playgroud)
$proxy_host是上游主机地址0.0.0.0:port
$host 是传入的请求标头主机 example.com
UPDATE
正如Louis Chatriot在评论中指出的那样,Nginx的新版本已经取代$host了$http_host,在以前的版本中会返回,example.com:port但现在又返回了example.com.
| 归档时间: |
|
| 查看次数: |
1998 次 |
| 最近记录: |