nginx 服务中 proxy_set_header 指令设置代理服务信息

2019-12-25 0 By admin

proxy_set_header 指令说明

允许将字段重新定义或附加到传递给核心服务器的请求标头。
他的值可以是文本、变量或者是文本和变量的组合。
当代理没有对指定和header行进行修改时,那么这个header行将从上级请求中继承。

一、默认情况下,nginx 对代理的设置

proxy_set_header Host $proxy_host;
proxy_set_header Connection close;

二、相关的关键词介绍

2.1、nginx 服务接受到请求后,会创建的有关变量

  1. $host :nginx 服务接受到的域名或者主机IP地址。(优先级如下:HTTP请求行的主机名->”HOST”请求头字段->符合请求的服务器名)
  2. $server_port : nginx 服务此 server 监听的端口。
  3. $http_host : 是$host 和 $server_port 两个变量的结合。

2.2、转发时,由 proxy_pass 指令创建的变量

  1. $proxy_host :proxy_pass 指令设置的后端服务器的域名(或者IP地址)和端口。
  2. $proxy_port :proxy_pass 指令设置的后端服务器的监听端口。

Nginx 服务中的变量列表:http://nginx.org/en/docs/varindex.html。

三、代理转发中请求头中的HOST 设置

当 nginx 中的 server 模块接受到请求,则 $host、$server_port、$http_host 这三个变量我们就可以确定了。
当设置完成 proxy_pass 指令,则 $proxy_host $proxy_port 变量我们也可以确定了。

3.1、使用默认配置的效果

对于这个请求,我们已经知道接受时的环境变量;我们也知道会将请求转发到后端的服务器的IP地址和端口。
另外根据 nginx 的默认配置(proxy_set_header Host $proxy_host;);我们知道在转发请求过程中,nginx 会修改请求的头信息(header),将请求的域名改为 $proxy_host。
这种没有特殊修改 HOST 变量的配置,在某种情况下是可用的。比如后端服务有自己独立的域名,并且返回的页面中没有域名信息(否则跳转操作更改域名)。

3.2、常用的反向代理配置

一般常用的反向代理配置为: proxy_set_header Host $host:$server_port;
使用 nginx 接受到的 域名和端口信息,重写转发的请求头。这样使后端核心服务器创建的请求环境变量和 nginx 代理服务器的请求环境变量相同。
如此一来,如果后端核心服务器中的动态代码使用到头信息(header)中的域名和端口信息,则可以确保产生正确的解决;否则就很可能使页面无法正确访问。