nginx配置proxy_set_header Host $host的作用?

nginx配置upstream负载均衡后请求400,配置proxy_set_header Host $host成功.
请问这是什么原理? proxy_set_header Host $host有什么作用?

upstream配置:

clipboard.png

路由配置:
起初没有配置 proxy_set_header Host $host 等参数, 请求总是报 400(bad request).

clipboard.png

而不配置负载均衡时, 仅配置一个 server 则可以正常代理:

clipboard.png

阅读 24.4k
2 个回答

proxy_set_header Host $host这一行的作用是把原http请求的Header中的Host字段也放到转发的请求里。
如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。

代理的后端服务器可以通过 Host 头得知用户访问的真正的域名, 如不设置, 则得到是代理服务(nginx)的 ip, 这样对于动态拼接的 url,后端服务器能在页面里返回正确的 url.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏