Meu servidor proxy é executado no ip A e é assim que as pessoas acessam meu serviço da web. A configuração do nginx será redirecionada para uma máquina virtual no ip B.
Para o servidor proxy no IP A, eu tenho isso em meus sites disponíveis
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;
}
}
O proxy_redirect
foi retirado de como obtenho o nginx para encaminhar solicitações HTTP POST via reescrita?
Tudo o que atingir o IP público atingirá o 443 por causa da reescrita. Internamente, estamos encaminhando para 80 na máquina virtual.
Mas quando eu executo um script python como o abaixo para testar nossa configuração
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
Estou recebendo um 405 Method Not Allowed
. No nginx, descobrimos que quando ele atingiu o servidor interno, o nginx interno estava recebendo uma solicitação de GET
, mesmo que no cabeçalho original tenhamos feito um POST
(isso foi mostrado no script Python).
Então parece que reescrever tem problema. Alguma ideia de como consertar isso? Quando eu comentei a reescrita, ela atinge 80 com certeza, e passou. Como reescrever foi capaz de falar com o nosso servidor interno, então reescrever-se não tem problema. É apenas a reescrita que caiu POST
to GET
.
Obrigado!
(Isso também será perguntado no fórum do Nginx porque este é um bloqueador crítico ...)