我试图配置nginx代理传递请求到另一个服务器,只有当$request_body变量匹配特定的正则表达式。但它对我不起作用。
server{
listen 80 default;
server_name www.applozic.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
if ($request_body ~* (.*)appId(.*)) {
proxy_pass http://apps.applozic.com;
}
}
}
请求体为:
{
"applicationId": "appId",
"authenticationTypeId": 1,
"enableEncryption": false,
"notificationMode": 0,
"deviceType": 4,
}
4条答案
按热度按时间6fe3ivhb1#
我找到解决办法了。
我在nginx(open resty)配置文件中做了以下更改
ujv3wf0j2#
我能说的最好的问题是,在执行if语句时,变量
$request_body
可能没有被读入内存。建议的替代方案是使用lua支持或compile nginx with the echo modules and run echo_request_body。
tquggr8v3#
一个自动化测试的工作示例,以防对其他人有用:https://github.com/ericminio/learning-nginx/tree/master/payload_filter
配置
lymnna714#
当使用集成时,这并不容易,比如在某些情况下,你的nginx并不允许你做额外的代理来改变整个设计,那么你可以尝试nginx-if-request-body来实现结果。