Configuré nginx y gunicorn para servir la aplicación de matraz. Y comencé gunicorn con este comando gunicorn --bind 0.0.0.0:5000 wsgi:app Se puede acceder a mi sitio web desde mi dirección IP proporcionada en el puerto 80. Sin embargo, también se puede acceder a él en el puerto 5000. Parece que mi proxy inverso funciona como debería, pero también se puede acceder al servidor gunicorn.
Estoy planeando deshabilitar el puerto 5000, pero no estoy seguro de que esta sea la forma correcta y segura de resolver este problema.
Este es mi archivo de configuración de nginx:
server { server_name <my_ip_adress>; access_log /var/log/nginx/domain-access.log; location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Scheme $scheme; proxy_connect_timeout 10; proxy_read_timeout 10; # This line is important as it tells nginx to channel all requests to port 5000. # We will later run our wsgi application on this port using gunicorn. proxy_pass http://127.0.0.1:5000/; } }Está vinculando gunicorn a 0.0.0.0 , por lo tanto, está disponible en las interfaces externas. Suponiendo que esto es solo una caja, en su lugar:
gunicorn --bind 127.0.0.1:5000 wsgi:appEsto ya no escucha solicitudes de interfaces externas, lo que significa que todas las solicitudes deben pasar por nginx.
Por supuesto, si vinculó gunicorn a 0.0.0.0 , podría crear una regla de firewall con iptables para DROP tráfico a ese puerto desde interfaces externas.
Si está utilizando un proveedor de la nube, es posible que implemente esta funcionalidad de firewall de forma nativa en su plataforma; por ejemplo, los grupos de seguridad en AWS EC2 le permitirían crear un grupo de 'servidor web' que solo permite el tráfico a través de los puertos 80 y 443.