nginx proxy_set_header设置、自定义header

这篇具有很好参考价值的文章主要介绍了nginx proxy_set_header设置、自定义header。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、背景

XXX

2、语法

语法 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的字段中带下划线

3、内置变量

核心模块支持内置变量,其名称与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指令算出的当前请求的绝对路径。其中的符号链接都会解析成真实文件路径

3、工作原理

XXXX

4、总结

       proxy_set_header 就是可设置请求头-并将头信息传递到服务器端。不属于请求头的参数中也需要传递时 重定义下就行啦。文章来源地址https://www.toymoban.com/news/detail-776538.html

到了这里,关于nginx proxy_set_header设置、自定义header的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Nginx】proxy_set_header的变量与X-Forwarded-For伪造客户端IP漏洞

    上面突然说,需要检查Nginx反向代理的安全问题并给出了修改方法,小白的我一脸懵逼,明明都是中文,连在一起咋就看不明白了。于是乎,对着修改内容简单学习了一下,在此做个记录,如有问题请大佬们指点指点。 在Nginx中的location里,我们通常会配置proxy_set_header,如下

    2024年02月19日
    浏览(30)
  • Nginx 获取自定义请求header头和URL参数

    在 ngx_lua 中访问 Nginx 内置变量 ngx.var.http_HEADER 即可获得请求头HEADER的内容。 在 nginx配置中,通过$http_HEADER 即可获得请求头HEADER的内容。 案例: 在nginx的location配置中,在获取header配置时, 须要在header名称前面加上固定前缀“http_“,并将header名称中的“-”中划线变为下划线

    2024年02月04日
    浏览(24)
  • Nginx的proxy buffer参数设置

    1. proxy_buffering 作用:该指令开启从后端被代理服务器的响应body缓冲。     如果proxy_buffering开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令 proxy_buffer_size 和 proxy_buffers 指定的缓冲区里边.     如果响应body无法放在内存里边,那么部分内容会被写到磁

    2024年02月08日
    浏览(35)
  • Nginx:设置响应header的content-type

    Nginx通常根据/etc/nginx/mime.types文件中类型设置content-type 有时需要根据实际需要指定content-type,比如对于下载,如果按照mime.types里面的定义: image/jpeg                            jpeg jpg; 那么当下载图片时,浏览器会在窗口内直接显示图片,而不是另存为文件 。 通过设置

    2024年02月12日
    浏览(27)
  • websocket创建时附加额外信息 [如自定义headers信息(利用nginx)]

    目录 情景描述: 解决方案 一、服务端要求前端创建websocket时附带的token,必须放在request的headers中(常出现在第三方的合作中);  思路:  整体效果:  具体步骤: 二、服务端只需要获取到token,不介意前端在创建时怎么传的 思路: 整体效果: 具体实现: 前端创建webs

    2023年04月08日
    浏览(24)
  • Nginx使用proxy_cache指令设置反向代理缓存静态资源

    CentOS7中解压tar包的方式安装Nginx: CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客 参考上面流程实现搭建Nginx的基础上,实现静态资源的缓存设置。 注意上面安装时的目录是在/opt/nginx目录下,这里是在/usr/local/nginx目录下。 nginx作为一款高

    2024年02月14日
    浏览(35)
  • nginx设置add_header失效 配置cors跨域失效无效的解决方案

    希望对大家有帮助,有用的话记得点个赞评个论,让俺知道这个法子可以帮助到大家哟!(虽然我这个法子很野) 最近在完成一个项目,后端API地址和前端地址不一致,这就涉及到了跨域的问题。 由于服务端加了一层Nginx作为反代,所以很自然的想到要去 .conf 配置文件中 加

    2024年02月12日
    浏览(29)
  • nginx.conf报错:“set“ directive is not allowed here in xxx(http块下不能用set定义变量)

    在nginx.conf的http块中定义变量: 在server块中使用变量替换IP地址: 然后nginx容器启动的时候就报错了: 原因:我不该把这句直接加到http块下, 要这样加到http块下的server块下的location里: 这样就没问题 但是我又另外报了一个错误: using uninitialized \\\"server_ip_addr\\\" variable 我另外记

    2024年02月13日
    浏览(21)
  • http.header.Set()与Add()区别;

    在Go语言中进行HTTP请求时, http.Header 对象表示HTTP请求或响应的头部信息。 http.Header 是一个 map[string][]string 类型的结构,用于存储键值对,其中键表示HTTP头字段的名称,值是一个字符串切片,可以存储多个相同名称的头字段值。 http.Header 提供了两个主要的方法来设置头部字

    2024年02月07日
    浏览(31)
  • Refused to set unsafe header “cookie“

    记 web端微信登陆之后,保存登录状态的问题: 发送给后台的后续请求在head添加 但是报错 Refused to set unsafe header “cookie” 原因是w3c中不允许手动设置cookie 解决方法: 1.把Cookie改成Authorization,让后端从Authorization中拿到相关登录信息; 2.前端来做登录,每次发送openid给后台,

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包