Mi servidor proxy se ejecuta en ip A y así es como las personas acceden a mi servicio web. La configuración de nginx redirigirá a una máquina virtual en la ip B.
Para el servidor proxy en IP A, tengo esto en mis sitios disponibles
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;
}
}
El proxy_redirect
fue tomado de cómo hago que nginx reenvíe solicitudes HTTP POST a través de reescribir
Todo lo que llegue a la IP pública llegará a 443 debido a la reescritura. Internamente, estamos reenviando a 80 en la máquina virtual.
Pero cuando ejecuto un script de Python como el siguiente para probar nuestra configuración
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
Estoy obteniendo un 405 Method Not Allowed
. En nginx encontramos que cuando llegó al servidor interno, el nginx interno estaba recibiendo una GET
solicitud, aunque en el encabezado original hicimos un POST
(esto se mostró en el script de Python).
Entonces parece que reescribir tiene un problema. ¿Algúna idea de cómo arreglar esto? Cuando comenté la reescritura, seguro que llega a 80, y pasó. Dado que rewrite pudo hablar con nuestro servidor interno, entonces reescribir en sí no tiene ningún problema. Es solo la reescritura reducida POST
a GET
.
¡Gracias!
(Esto también se preguntará en el foro de Nginx porque es un bloqueador crítico ...)
PUT
,POST
,DELETE
,GET
. En mi configuración anterior no tenía este proxy adicional en el frente sirviendo a la multitud. Tenía la misma configuración en el mismo servidor interno (nuestro servidor de prueba). Eso funciona bien