我的代理服务器在ip A上运行,这是人们访问我的Web服务的方式。Nginx配置将重定向到IP B上的虚拟机。
对于IP A上的代理服务器,我在我的站点中有此服务器
server {
listen 443;
ssl on;
ssl_certificate nginx.pem;
ssl_certificate_key nginx.key;
client_max_body_size 200M;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
rewrite ^(.*) https://$http_host$1 permanent;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
该proxy_redirect
是取自我如何才能nginx的通过重写转发HTTP POST请求?
由于重写,影响公共IP的所有内容都将达到443。在内部,我们将转发到虚拟机上的80。
但是当我运行下面的python脚本来测试我们的配置时
import requests
data = {'username': '....', 'password': '.....'}
url = 'http://IP_A/api/service/signup'
res = requests.post(url, data=data, verify=False)
print res
print res.json
print res.status_code
print res.headers
我得到一个405 Method Not Allowed
。在nginx中,我们发现当它到达内部服务器时,内部nginx正在获取一个GET
请求,即使在原始标头中我们执行了一个请求POST
(这在Python脚本中也已显示)。
因此,似乎重写有问题。任何想法如何解决这个问题?当我注释掉重写时,它肯定会达到80,并且通过了。由于重写能够与我们的内部服务器通信,因此重写本身没有问题。只是将重写重写POST
为GET
。
谢谢!
(这也会在Nginx论坛上询问,因为这是严重的阻止因素...)
PUT
,POST
,DELETE
,GET
。在我之前的设置中,我没有在前端为人群提供额外的代理。我在同一台内部服务器(我们的测试服务器)上具有相同的配置。很好