Meu servidor proxy roda no ip A e é assim que as pessoas acessam meu serviço 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 nos 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 tirado de como faço para obter nginx para encaminhar solicitações HTTP POST via reescrita?
Tudo o que atingir o IP público atingirá 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 atingia o servidor interno, o nginx interno estava recebendo uma GET
solicitação, mesmo que no cabeçalho original que fizemos POST
(isso foi mostrado no script Python).
Parece que reescrever tem problema. Alguma idéia de como consertar isso? Quando comentei a reescrita, ela atinge 80, com certeza, e passou. Como a reescrita foi capaz de falar com o servidor interno, a reescrita em si não tem problema. É apenas a reescrita caiu POST
para GET
.
Obrigado!
(Isso também será solicitado no fórum do Nginx porque este é um bloqueador crítico ...)
PUT
,POST
,DELETE
,GET
. Na minha configuração anterior, eu não tinha esse proxy extra na frente, servindo a multidão. Eu tinha a mesma configuração no mesmo servidor interno (nosso servidor de teste). Isso funciona bem.