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_pass
到http://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 参数的主要内容,如果未能解决你的问题,请参考以下文章