Tengo un servidor Flask funcionando a través del puerto 5000, y está bien. Puedo acceder a él en http://example.com:5000
Pero, ¿es posible simplemente acceder a él en http://example.com? Supongo que eso significa que tengo que cambiar el puerto de 5000 a 80. Pero cuando intento eso en Flask, me sale este mensaje de error cuando lo ejecuto.
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
La ejecución de lsof -i :80
devuelve
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
¿Tengo que matar estos procesos primero? ¿Es eso seguro? ¿O hay otra manera de mantener Flask corriendo en el puerto 5000 pero tener el dominio del sitio web principal redirigido de alguna manera?
Así que está lanzando ese mensaje de error porque tienes apache2
corriendo en el puerto 80.
Si esto es para el desarrollo, me gustaría dejarlo como está en el puerto 5000.
Si es para producción tampoco:
No se recomienda
apache2
;No se recomienda como se indica en la documentación:
Puede utilizar el servidor incorporado durante el desarrollo, pero debería utilizar una opción de despliegue completo para las aplicaciones de producción. (No utilice el servidor de desarrollo incorporado en producción).
Recomendado
HTTP
tráfico a través de apache2
a Flask.De esta manera, apache2
puede manejar todos sus archivos estáticos (que es muy bueno en - mucho mejor que el servidor de depuración integrado en Flask) y actuar como un proxy inverso para su contenido dinámico, pasando esas peticiones a Flask.
Aquí'hay un enlace a la documentación oficial sobre la configuración de Flask con Apache + mod_wsgi.
Edición 1 - Aclaración para @Djack
Proxy de tráfico HTTP a Flask a través de apache2
Cuando una petición llega al servidor por el puerto 80 (HTTP
) o por el puerto 443 (HTTPS
) un servidor web como Apache o Nginx gestiona la conexión de la petición y resuelve qué hacer con ella. En nuestro caso una petición recibida debe ser configurada para ser pasada a través de Flask en el protocolo WSGI y manejada por el código Python. Esta es la parte "dinámica".
Proxy inverso para contenido dinámico
Hay algunas ventajas de configurar su servidor web como el anterior;
Tu problema es que tienes un servidor web apache que ya está usando el puerto 80. Por lo tanto, usted puede:
Matar a apache: Probablemente deberías hacer esto a través de /etc/init.d/apache2 stop
, en lugar de simplemente matarlo.
Despliega tu aplicación flask en tu proceso apache, como describe flask in apache.