求教, nginx 怎么在 proxy_pass 的时候 携带 http 请求头部 Host 参数,并且值是 upstream 中配置的 server,不是客户端携带的 Host;

2019-05-28 11:14:38 +08:00
 ytlm
upstream test_backend {
    server test1.com;
    server test2.com;
}

location / {
    proxy_set_header Host $host;
    proxy_pass http://test_backend ;
}

这里的 $host 是请求客户端的 Host,代理过去也是客户端请求过来的 Host,不是我想要的;

如果配置成 $proxy_host,我测试发现代理过去的 Host 设置成 test_backend,也不是我想要的;

求教:
我想要的代理过去的 Host  是 upstream 中配置的 test1.com 或者 test2.com ,根据最终访问哪个域名自动设置;

4670 次点击
所在节点    NGINX
22 条回复
liwb2
2019-07-10 21:02:02 +08:00
可以尝试使用 http_map_module 中的 map 指令看看

map http://nginx.org/en/docs/http/ngx_http_map_module.html

$upstream_addr http://nginx.org/en/docs/http/ngx_http_upstream_module.html#variables

map $upstream_addr $remote_server_name {
default test1.com;
'test1.com:port' test1.com;
'test2.com:port' test2.com;
}


proxy_set_header Host $remote_server_name;

注意 default 取值
ytlm
2019-07-11 09:26:42 +08:00
@liwb2 #21 嗯嗯,感觉应该是可以的,没有实际尝试;但是可能还有一种情况是这个域名的 ip 不是固定的,或者中途换 ip 了,那这边也要相应的修改并重启 nginx ;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568300

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX