python change - ¿Cómo hago para que Flask se ejecute en el puerto 80?




port run (5)

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.


Answers

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

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)

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 de apache2 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.

import os
os.listdir("somedirectory")

devolverá una lista de todos los archivos y directorios en "algún directorio".





python networking flask port