Estoy tratando de obtener direcciones IP reales de los usuarios que visitan el sitio. Para eso, me gustaría agregar una autorización personalizada para el servicio API. Usar encabezados para ambos casos parece una buena idea.
El problema es que no puedo obtener encabezados personalizados en mi aplicación de matraz que es atendida por servidores web nginx y gunicorn. Obtener los encabezados 'remote_addr' devuelve solo la dirección IP 127.0.0.1 a pesar de que publico desde la red externa, no desde localhost.
Aquí están mis archivos de configuración:
parte de la configuración de nginx //1.14.2
location / { # forward application requests to the gunicorn server proxy_read_timeout 30s; proxy_send_timeout 30s; proxy_connect_timeout 30s; proxy_pass http://127.0.0.1:5000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; add_header CLIENT-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }parte de la configuración de gunicorn //20.0.4
[program:wapp] command=/home/deeslo/processor/venv/bin/gunicorn -b localhost:5000 -w 4 microservice:app directory=/home/deeslo/processor user=deeslo autostart=true autorestart=true stopasgroup=true killasgroup=trueCuando reviso los encabezados, no veo X-Real-IP/CLIENT-IP de nginx ni otros encabezados personalizados que envié en el matraz para hacer encabezados de respuesta.
¿Qué me perdí? No pude resolverlo todavía.
Oh, eso fue totalmente mi culpa.
El problema era que estaba depurando la aplicación en mi IDE donde la aplicación se ejecutaba a través del servidor web integrado, no nginx.
La solución anterior funciona perfectamente, puedo obtener la dirección IP del usuario en la aplicación del matraz con:
request.header['X-Real-IP']