【问题标题】:Nginx proxy_pass based on POST/GET/PUT/DELETE parameterNginx proxy_pass 基于 POST/GET/PUT/DELETE 参数
【发布时间】: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 自己可以处理的。研究使用 Nginx 的 Lua 模块。 OpenResty 使安装模块变得容易。还有一个提供 $post_* 变量的模块,尽管 Lua 仍然更适合像这样的复杂逻辑。
  • 至少从像PUT /some/route?live=1 HTTP/1.1 这样的请求的nginx 1.14 请求参数被正确检测到,$arg_live nginx 变量被填充了正确的值。分析请求正文是另一个主题,最好使用一些第三方模块来完成,但是也可以通过 map 块检测一些字符串的存在。

标签: nginx reverse-proxy


【解决方案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;
        }
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。
    猜你喜欢
    • 2012-01-25
    • 2019-09-14
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多