1. $proxy_host

proxy_set_header Host $proxy_host;
# 默认配置
# 顾名思义,请求头设置的为代理后的域名。

  • 示例1:

当我们配置了 upstream, 那么$proxy_host 的值就是 upstream 的名字

  1. upstream hahaxiong{
  2. server 172.17.3.6:8000 max_fails=1 fail_timeout=3s weight=10;
  3. }
  4. 那么这里 $proxy_host 的值就是 hahaxiong
  • 示例2:

当我们没有配置 upstream, 那么 $proxy_host 的值就是 proxy_pass 后面的地址ip和端口. 172.17.3.6:8000. 如果是 proxy_pass http://www.abc.com:8000; 那么 $proxy_host 的值就是 www.abc.com:8000.

  1. location ^~ /wss/v1
  2. {
  3. proxy_pass http://172.17.3.6:8000;
  4. proxy_set_header Host $proxy_host;
  5. proxy_set_header Connection "upgrade";
  6. proxy_set_header Upgrade $http_upgrade;
  7. tcp_nodelay on;
  8. }

2. $host

proxy_set_header Host $host;
# 当字段不在请求头中就无法传递了,在这种情况下,可通过设置Host变量,将需传递值赋给Host变量
当请求 Header 里 Host 无值的时候,直接拿 server_name 的值进行填充。
当请求 Header 里 Host 的值的时候,就直接拿 请求 Header 里面的 Host 的值。

3. $host:$proxy_port

proxy_set_header Host $host:$proxy_port;
# 服务器名称和端口一起通过代理服务器传递,相对上一项,多了一个 $proxy_port,这个 $proxy_port 是proxy_pass 里面的那个端口,如果没有端口,像80 和 443 的话。也是会使用 80 /443 填充,

  1. 示例:
  2. proxy_pass http://www.baidu.com;
  3. $host:$proxy_port = 百度ip:80

4. $http_host

proxy_set_header Host $http_host;
# 一个不会变化的“Host”头请求字段可通过如下方式被传递:
当请求 Header 里 Host 无值的时候,直接拿 server_name 的值进行填充。并加上端口。如果是 80/443 则不加。 其实就是去 请求url 里面的值。 http://server:port/v1

当请求 Header 里 Host 的值的时候,就直接拿 请求 Header 里面的 Host 的值。