Nginx proxy_pass 基于 POST/GET/PUT/DELETE 参数

Posted

技术标签:

【中文标题】Nginx proxy_pass 基于 POST/GET/PUT/DELETE 参数【英文标题】:Nginx proxy_pass based on POST/GET/PUT/DELETE parameter 【发布时间】:2013-09-27 06:39:17 【问题描述】:

我正在尝试根据我的请求中的 POST/GET/PUT/DELETE 参数配置 nginx 以执行 proxy_pass

如果live=1,我想proxy_passhttp://10.0.0.2:8000,如果live=0,我想http://10.0.0.2:8081

我尝试使用if ($arg_live = "1"),但它只适用于 GET 请求。

谢谢,

佩德罗

【问题讨论】:

我遇到了同样的问题,我相信你需要为 POST 解析 $request_body 但不知何故,设置它时非常棘手 nginx proxy_pass based on whether request method is POST, PUT or DELETE的可能重复 对于未来的访问者来说,这不仅仅是普通 Nginx 自己可以处理的。研究使用 Nginx 的 Lua 模块。 OpenResty 使安装模块变得容易。还有一个提供 $post_* 变量的模块,尽管 Lua 仍然更适合像这样的复杂逻辑。 至少从像PUT /some/route?live=1 HTTP/1.1 这样的请求的nginx 1.14 请求参数被正确检测到,$arg_live nginx 变量被填充了正确的值。分析请求正文是另一个主题,最好使用一些第三方模块来完成,但是也可以通过 map 块检测一些字符串的存在。 【参考方案1】:

我建议你试试这个..

if ($request_method = 'POST') 
 #your_directives_here

【讨论】:

【参考方案2】:
   if ($arg_live = "0")
        rewrite ^ /live1 last;
    
    if ($arg_live = "1") 
        rewrite ^ /live0 last;
    
    location /live0/ 
        proxy_pass http://live0-server;
    
    location /live1/ 
        proxy_pass http://live1-server;
    

【讨论】:

请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。

以上是关于Nginx proxy_pass 基于 POST/GET/PUT/DELETE 参数的主要内容,如果未能解决你的问题,请参考以下文章

nginx 位置 /sub/$VAR/ 到 proxy_pass /sub/$VAR/

Nginx Proxy_pass简述

nginx 之 proxy_pass详解

Nginx配置proxy_pass转发的/路径问题

nginx 反向代理之 proxy_pass

nginx 之proxy_pass