XXX
语法 | proxy_set_header field value; |
默认值 | proxy_set_header Host $proxy_host; |
proxy_set_header Connection close; | |
上下文 | http, server, location |
允许重新定义或者添加发往后端服务器的请求头。value可以包含文本、变量或者它们的组合。 当且仅当当前配置级别中没有定义proxy_set_header指令时,会从上面的级别继承配置。 默认情况下,只有两个请求头会被重新定义:
proxy_set_header Host $proxy_host; proxy_set_header Connection close;
2.1 nginx是支持读取非nginx标准的用户自定义header的,但是需要在http或者server下开启header的下划线支持:
underscores_in_headers on;
2.2 举例
比如我们自定义header为X-Real-IP,通过第二个nginx获取该header时需要这样:
$http_x_real_ip; (一律采用小写,而且前面多了个http_)
2.3 如果需要把自定义header传递到下一个nginx:
如果是在nginx中自定义采用proxy_set_header X_CUSTOM_HEADER $http_host;
如果是在用户请求时自定义的header,
例如curl –head -H “X_CUSTOM_HEADER: foo” http://domain.com/api/test
则需要通过proxy_pass_header X_CUSTOM_HEADER来传递
2.4 语法
underscores_in_headers on|off
默认值:off
使用字段:http, server
是否允许在header的字段中带下划线
核心模块支持内置变量,其名称与Apache中的变量名称相对应。
常用变量如下表格
名称 | 说明 | demo值 |
---|---|---|
$remote_addr | 客户端的ip地址 | |
$http_x_forwarded_for | 相当于网络访问路径 | 待验证 |
$remote_user | 客户端用户名称,认证用 | |
$remote_port | 客户端端口号 | 看似随机 |
$time_local | 用来记录访问时间与时区 | |
$request | 用来记录请求的url与http协议 | |
$status | 用来记录请求状态;成功是200 | |
$body_bytes_sent | 记录发送给客户端文件主体内容大小 | |
$http_referer | 用来记录从那个页面链接访问过来的 | |
$http_user_agent | 记录客户端浏览器的相关信息 | |
$host | 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名 ngxin.arg.test | |
$hostname | 机器名使用 gethostname系统调用的值 | |
$server_addr | 服务器地址,如果没有用listen指明服务器地址, 使用这个变量将发起一次系统调用以取得地址 (造成资源浪费) | 127.0.0.1 nginx 所在服务器IP地址 |
$server_name | 请求到达的服务器名 | 监听 server 下的server_name : localhost |
$server_port | 请求到达的服务器端口号 | 监听 server 下的 listen 端口 : 80 |
$server_protocol | 请求的协议版本,“HTTP/1.0"或"HTTP/1.1” | “HTTP/1.0"或 "HTTP/1.1” |
$scheme | 所用的协议,比如http或者是https | http |
$request_body | 这个变量(0.7.58+)包含请求的主要信息。 在使用proxy_pass或fastcgi_pass指令的location中比较有意义 | |
$request_body_file | 客户端请求主体信息的临时文件名 | |
$request_completion | 如果请求成功,设为"OK"; 如果请求未完成或者不是一系列请求中最后一部分则设为空 | |
$request_filename | 当前请求的文件路径名, 比如/opt/nginx/www/test.php | |
$request_method | 请求的方法,比如"GET"、"POST"等 | GET |
$request_uri | 请求的URI,带参数 | 请求的URI, 带参数 /a/b/c/?d=test&e=123 &username= %E7%94%A8%E6%88%B7 |
$uri | 请求的URI,可能和最初的值有不同,比如经过重定向之类的 | /a/b/c/ |
$http_cookie | cookie 信息 | |
$content_type | 请求信息里的"Content-Type" | |
$content_length | HTTP请求信息里的"Content-Length" | |
$arg_* | *可具体为请求中的某个参数 | $arg_d=test |
$args | 请求中的参数 | d=test&e=123&u sername=%E7%94% A8%E6%88%B7 |
$binary_remote_addr | 远程地址的二进制表示 | |
$document_root | 针对当前请求的根路径设置值 | |
$document_uri | 与$uri相同 | /a/b/c/ |
$http_via | 最后一个访问服务器的Ip地址 | |
$is_args | 如果请求行带有参数,返回“?”,否则返回空字符串 | |
$limit_rate | 对连接速率的限制 | |
$nginx_version | 当前运行的nginx版本号 | |
$pid | worker进程的PID | |
$query_string | 与$args相同 | |
$realpath_root | 按root指令或alias指令算出的当前请求的绝对路径。其中的符号链接都会解析成真实文件路径 |
XXXX
proxy_set_header 就是可设置请求头-并将头信息传递到服务器端。不属于请求头的参数中也需要传递时 重定义下就行啦。