Nginx 获取自定义请求header头和URL参数

canca1年前 (2023-04-17)nginx730

一、获取 header 请求头

在 ngx_lua 中访问 Nginx 内置变量 ngx.var.http_HEADER 即可获得请求头HEADER的内容。

在 nginx配置中,通过$http_HEADER 即可获得请求头HEADER的内容。

案例:

$.ajax({
.......
headers: { 
    Accept: "application/json; charset=utf-8", 
    X-TimerLocal: "Bin"  //这个是自定义的请求头
},
.......
});

在nginx的location配置中,在获取header配置时,须要在header名称前面加上固定前缀“http_“,并将header名称中的“-”中划线变为下划线,举例说明:


       自定义的header名称为X-TimerLocal,那在nginx中使用$http_x_timerlocal 来获取到X-TimerLocal的值。

if ($http_x_timerlocal  = 'BIN') {
    rewrite ^(.*/timerbin/.*)$ https://$host$1 permanent;
}

包含X-TimerLocal=BIN的header请求进行判断,若是发现路径中包含/timerbin/路径时,对请求URL进行重写,从新跳转。


二、获取url参数

在 ngx_lua 中访问 Nginx 内置变量 ngx.var.arg_PARAMETER 即可获得GET参数PARAMETER的内容。

在 nginx配置中,通过$arg_PARAMETER 即可获得GET参数PARAMETER的内容。

案例:


通过 http://www.test.com?name=hello&id=123 来验证url的请求参数,能够在nginx中获取到,只需要修改nginx.conf 配置文件如下,就可以在access.log中看到id和name在log中

http {

    include       mime.types;

    default_type  application/octet-stream;



    log_format main '{ "@timestamp": "$time_iso8601", '

    '"servername": "$http_host", '

    '"id": "$arg_id",'

    '"name": "$arg_name",'

    '"remote_addr": "$remote_addr",'

    '"referer": "$http_referer",'

    '"request": "$request",'

    '"request_time": "$request_time",'

    '"status": $status,'

    '"bytes":$body_bytes_sent,'

    '"agent": "$http_user_agent",'

    '"x_forwarded": "$http_x_forwarded_for",'

    '"upstr_addr": "$upstream_addr",'

    '"upstr_host": "$upstream_http_host",'

    '"ups_resp_time": "$upstream_response_time" }';



    access_log  logs/access.log main;

    server_names_hash_bucket_size 128

相关文章

nginx 反向代理时丢失端口的解决方案,443端口变80

今天,配置nginx反向代理时遇到一个问题,当设置nginx监听80端口时转发请求没有问题。但一旦设置为监听其他端口,就一直跳转不正常;如,访问欢迎页面时应该是重定向到登录页面,在这个重定向的过程中端...

nginx if判断&&和||写法

今天在写nginx配置的时候需要用到if判断的&&,但是查了一下文档if并不支持&&的写法,现在将方法记录一下①nginx if判断&&(并且)写法,即...

Nginx 之 ip_hash 问题

起因公司项目上用到了Asp.Net Core SignalR,由于SignalR需要长链接,所以在进行水平扩展的时,不仅需要Redis做底板,还需要将同一个链接的请求打到同一台机器上;作为一个资深面相...

详解nginx的root与alias

详解nginx的root与alias

nginx版本: 1.18.01. 结论location命中后如果是root,会把请求url的 ip/域名+port替换为root指定的目录,访问资源如果是alias,会把请求url的ip/域名+po...

会话丢失-NGINX配置之underscores_in_headers

1.描述 问题 NGINX代理某个web服务时,单机情况下也出现不停的要求认证的情况 初步分析 去掉NGINX代理,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。