Nginx 反向代理不适用于 API/v2_soap

Nginx 反向代理不适用于 API/v2_soap

我在 nginx 的反向代理上遇到了问题......

问题 ->

我有一台装有 nginx 的服务器 A,它通过端口 80 和 443 接收许多连接...一些连接来自 api/rest 和 api/v2_soap...对于这些连接,我制定了一条代理规则来重定向到服务器 B 的连接,服务器 B 将处理 api 请求

服务器A的规则:

location /api/rest {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
proxy_pass http://10.0.0.2;
proxy_redirect off;
}


location /api/v2_soap {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
proxy_pass http://10.0.0.2;
proxy_redirect off;
}

很好...当我查看服务器 B nginx acess.log 时,所有连接都被重定向到服务器 B...太好了...

但是当连接正在处理时,服务器 B 访问日志显示一些 GET 请求为状态 200,一些 POST 请求为状态 500

mydomain.com.br 10.0.0.2 - - [17/Jun/2019:15:35:21 -0300] "GET /api/v2_soap?wsdl=1 HTTP/1.0" 200 244478 "-" "-" "xxxx.xxxx.xxxx"

mydomain.com.br 10.0.0.2 - - [17/Jun/2019:15:35:25 -0300] "GET /api/v2_soap?wsdl=1 HTTP/1.0" 200 244478 "-" "-" "xxxx.xxxx.xxxx"

mydomain.com.br 10.0.0.2 - - [17/Jun/2019:15:35:26 -0300] “POST /api/v2_soap HTTP/1.0” 500 423 “-” “Axis/1.4” “xxxx.xxxx.xxxx.xxxx”

mydomain.com.br 10.0.0.2 - - [17/Jun/2019:15:35:28 -0300] “POST /api/v2_soap HTTP/1.0” 500 423 “-” “Axis/1.4” “xxxx.xxxx.xxxx.xxxx”

nginx 服务器 B 上的 api 配置如下:

# API config
location /api/rest {
rewrite ^/api/rest /api.php?type=rest last;
}

# API config
location /api/v2_soap {
rewrite ^/api/v2_soap /api.php?type=v2_soap last;

现在的问题是...哪里出了问题,我必须添加什么,我必须做些什么才能使 apis rest 和 soap 在我的服务器上正常工作...

我认为核心问题是 soap 连接...因为我发现一些其余状态 POST 和 GET 的状态为 200

答案1

规则相当混乱rewrite。在服务器 A,您已将 URI 重写/api/rest为,/api/v2_soap$1将删除这些 URI 并在 URI 后面留下任何参数/值并传递给服务器 B,例如,如果您发送/api/rest/abc123到服务器 A,服务器 B 将接收为/abc123

从您共享的访问日志来看,如果wsdlURI 后有参数/api/v2_soap,则您的应用程序/服务响应 http 200,否则返回 http 500,这可能意味着您的应用程序无法识别该请求。

我建议检查你的应用程序需要什么请求负载然后仅配置

答案2

关于 v2_soap 500,也许答案在这里:

# API configuration 
location /api/v2_soap { 
rewrite ^/api/v2_soap /api.php?type=v2_soap last;
}

我搜索了互联网和 nginx 文档,只找到了这条规则,但有一些变化,都没有起作用

*事实:如果我使用服务器 A 接收并处理 api/v2_soap 连接,它就可以工作!并且在服务器 A 的 nginx 配置中,它只是

# API config location /api/rest { 
rewrite ^/api/rest /api.php?type=rest last; 
} 

没有针对 v2_soap 的规则,我尝试在服务器 B 上仅使用 api/rest 规则。

相关内容