python - run - send_file flask
¿Cómo hago para que Flask se ejecute en el puerto 80? (5)
1- Detener otras aplicaciones que usan el puerto 80. 2- ejecutar la aplicación con el puerto 80:
if __name__ == ''__main__'':
app.run(host=''0.0.0.0'', port=80)
Tengo un servidor Flask corriendo por el puerto 5000, y está bien. Puedo acceder a ella 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 lo pruebo en Flask, aparece 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
Ejecutando lsof -i :80
devoluciones
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)
¿Debo matar estos procesos primero? ¿Eso es seguro? ¿O hay otra forma de mantener Flask ejecutándose en el puerto 5000 pero redirigir el dominio principal del sitio web de alguna manera?
Gracias.
Así que está arrojando ese mensaje de error porque tiene apache2
ejecutándose en el puerto 80.
Si esto es para el desarrollo, simplemente lo dejaría como está en el puerto 5000.
Si es para producción:
No recomendado
- Detener
apache2
primero;
No recomendado como se indica en la documentación:
Puede usar el servidor incorporado durante el desarrollo, pero debe usar una opción de implementación completa para las aplicaciones de producción. (No use el servidor de desarrollo integrado en producción).
Recomendado
- Tráfico
HTTP
proxy a través deapache2
a Flask.
De esta manera, apache2
puede manejar todos sus archivos estáticos (que es muy bueno, mucho mejor que el servidor de depuración integrado en Flask) y actúa como un proxy inverso para su contenido dinámico, pasando esas solicitudes a Flask.
Aquí hay un enlace a la documentación oficial sobre la configuración de Flask con Apache + mod_wsgi.
Edit 1 - Aclaración para @Djack
Tráfico HTTP proxy a Flask a través de apache2
Cuando llega una solicitud al servidor en el puerto 80 ( HTTP
) o en el puerto 443 ( HTTPS
), un servidor web como Apache o Nginx maneja la conexión de la solicitud y determina qué hacer con ella. En nuestro caso, una solicitud recibida debe configurarse para pasarla a Flask en el protocolo WSGI y manejarse mediante el código Python. Esta es la parte "dinámica".
proxy inverso para contenido dinámico
Hay algunas ventajas para configurar su servidor web como el anterior;
- Terminación SSL: el servidor web estará optimizado para manejar solicitudes HTTPS con solo una pequeña configuración. No hagas "roll the own" en Python, que probablemente sea muy inseguro en comparación.
- Seguridad: abrir un puerto a Internet requiere una cuidadosa consideración de la seguridad. El servidor de desarrollo de Flask no está diseñado para esto y podría tener fallas abiertas o problemas de seguridad en comparación con un servidor web diseñado para este propósito. Tenga en cuenta que un servidor web mal configurado también puede ser inseguro.
- Manejo de archivos estáticos: es posible que el servidor web incorporado del Flask maneje archivos estáticos; sin embargo, esto no es recomendable; Nginx / Apache son mucho más eficientes en el manejo de archivos estáticos como imágenes, CSS, archivos Javascript y solo pasarán solicitudes "dinámicas" (aquellas en las que el contenido se lee a menudo desde una base de datos o el contenido cambia) para ser manejadas por el código Python.
- + más. Esto está al borde del alcance de esta pregunta. Si desea más información, investigue sobre esta área.
No necesita cambiar el número de puerto para su aplicación, simplemente configure su servidor www (nginx o apache) para realizar consultas proxy al puerto del matraz. Pague attantion en uWSGI
.
Para servidores externamente visibles, donde no use apache u otro servidor web, simplemente escriba
flask run --host=0.0.0.0 --port=80
Su problema es que ya tiene un servidor web Apache en ejecución que ya está utilizando el puerto 80. Entonces, puede:
Mata a apache: probablemente deberías hacer esto a través de
/etc/init.d/apache2 stop
, en lugar de simplemente matarlos.Implemente su aplicación de matraz en su proceso de apache, como describe el matraz en apache .