Nginx如何获取get/post传递的参数?

薄洪涛5年前Linux4278

有一些业务场景,需要我们用nginx做url的重写,这样的话我们就需要做参数的拼接,比如我们想把xxx.com/a/1/2 重写成yyy.com/b?a=1&b=2,就需要做参数的拼接;

假如我们的url是这样的xxx.com/abc/1/2,我们想获取1,2 这两个参数,在nginx的配置文件中,我们应该这么写

location ~/abc/(.*)/(.*){
       return 200 $1;
}

这样返回的就是1,如果写$2 那么获取的就是第二个参数2,以此类推,运行结果如下:

[root@localhost sbin]# curl 127.0.0.1/abc/1/2
1

假如我们的url是xxx.com/abc?a=1 这种呢,那简单,只要这样写就可以

    location ~/abc{
       return 200 $arg_a;
    }

$arg_后面拼上参数的名字,就可以获取到参数了,运行结果如下

[root@localhost sbin]# curl 127.0.0.1/abc?a=9527
9527

这里是通过nginx的常用变量来获取的参数,其他的常用变量这里也顺道说一下子

举个栗子,我们的请求url是  http://localhost/index.html?a=1&b=2  同时我们指定自定义的header头为  'c:3'

那么,

$url     对应的就是  /index.html

$args  对应的就是  a=1&b=2

$request_url  对应的就是/index.html?a=1&b=2

$arg_a  对应的就是 1

$arg_b  对应的就是 2

$remote_addr 对应的就是127.0.0.1 (获取的是请求者的ip)

$http_c  对应的是 3


那如果是获取post请求的数据呢?

对于这种我们有两种方法,一是post转成get请求,这一点我之前有写过教程,传送门

第二种,用lua去获取,方法如下

location ~/post{
         content_by_lua_block {
                local data = ngx.req.get_body_data()
                ngx.say(data)
            }
     }

然后我们发现,运行结果是这样的

@localhost sbin]# curl  -X POST -d "data=123&key=456"  127.0.0.1/post 
nil

获取的数据为空

究其原因,主要是 Nginx 诞生之初主要是为了解决负载均衡情况,而这种情况,是不需要读取 body 就可以决定负载策略的,所以这个点对于 API Server 和 Web Application 开发的同学有点怪

我们只需要在location加上下面这句话就可以了

lua_need_request_body on;

运行结果如下

[root@localhost sbin]# curl  -X POST -d "data=123&key=456"  127.0.0.1/post 
data=123&key=456

以上就是nginx对get和post参数的获取

标签: nginx

相关文章

Nginx解决跨域问题

不解释,做个记录location / {     add_header Access-Control-Allow-Origin&n...

nginx转换post请求为get

nginx转换post请求为get

今天调银联收银台回调的时候,遇到一件特别坑的事情,我通过银联付款后,本来应该跳转到我自己定义的回调页面,但是每次都会返回405错误码,很是恼火;查了下日志2019/06/24 14:58:3...

Centos7 下开机自启

我在虚拟机上搭建了一套nginx+php,然后每次开机的时候,都要去手动去运行让服务起来,这我可忍不了了,毕竟我可是懒癌晚期废话少说,我们直接设置开机启动1.在系统目录创建服务文件(不要问为什么,li...

php程序是如何被解析的?

php程序是如何被解析的?

我们每天都在写php代码,然后往服务器上一丢,你就发现php文件就运行了,嘿,是不是很神奇,但是有没有想过,php是如何被解释执行的呢?要知道apache,nginx都是不能解析.php文件的;所以想...

nginx配置详解入门第一篇

nginx配置详解入门第一篇

我们从这张图开始分析nginx配置(借用网图)1. 全局块配置这个全局块配置会影响ngxin的全局,一般包括以下配置user  www; worker_processes ...

nginx转发配置

帮同事搭建博客,选用的是ghost博客后台,这是基于nodejs的一套cms系统,然后需要用nginx去转发,顺便总价下nginx的转发方式及规则server_name  域名;...

发表评论    

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