J'ai un serveur Flask qui fonctionne sur le port 5000, et tout va bien. Je peux y accéder à l'adresse http://example.com:5000
Mais est-il possible d'y accéder simplement à l'adresse http://example.com ? Je suppose que cela signifie que je dois changer le port de 5000 à 80. Mais lorsque j'essaie cela sur Flask, j'obtiens ce message d'erreur lorsque je l'exécute.
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
L'exécution de lsof -i :80
retourne
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)
Dois-je d'abord tuer ces processus ? Est-ce sans danger ? Ou existe-t-il un autre moyen de faire fonctionner Flask sur le port 5000 tout en redirigeant le domaine du site principal ?
Donc, ce message d'erreur s'affiche parce que apache2
tourne sur le port 80.
Si c'est pour le développement, je laisserais simplement le port 5000 tel quel.
Si c’est pour la production aussi :
Non recommandé
apache2
;Non recommandé comme il est indiqué dans la documentation :
Vous pouvez utiliser le serveur intégré pendant le développement, mais vous devez utiliser une option de déploiement complet pour les applications de production. (N'utilisez pas le serveur de développement builtin en production).
Recommandé
HTTP
à travers apache2
vers Flask.De cette façon, apache2
peut gérer tous vos fichiers statiques (ce qu'il fait très bien - bien mieux que le serveur de débogage intégré à Flask) et agir comme un proxy inverse pour votre contenu dynamique, en passant ces requêtes à Flask.
Voici un lien vers la documentation officielle sur la configuration de Flask avec Apache + mod_wsgi.
Edit 1 - Clarification pour @Djack
Proxy du trafic HTTP vers Flask via apache2
Lorsqu'une requête arrive sur le serveur sur le port 80 (HTTP
) ou le port 443 (HTTPS
), un serveur web comme Apache ou Nginx gère la connexion de la requête et trouve quoi en faire. Dans notre cas, une requête reçue doit être configurée pour être transmise à Flask sur le protocole WSGI et traitée par le code Python. C'est la partie "dynamique" ;.
reverse proxy pour contenu dynamique
Il y a quelques avantages à configurer votre serveur web comme ci-dessus ;
Votre problème est que vous avez un serveur web Apache en cours d'exécution qui utilise déjà le port 80. Donc, vous pouvez soit :
Arrêter apache : Vous devriez probablement le faire via /etc/init.d/apache2 stop
, plutôt que de simplement les tuer.
Déployez votre application flask dans votre processus apache, comme [flask in apache][1] le décrit.
[1] : http://flask.pocoo.org/docs/deploying/mod_wsgi/#configuring-apache