Jeg har en Flask-server som kjører gjennom port 5000, og det går bra. Jeg kan få tilgang til den på http://example.com:5000
Men er det mulig å bare få tilgang til den på http://example.com? Jeg antar at det betyr at jeg må endre porten fra 5000 til 80. Men når jeg prøver det på Flask, får jeg denne feilmeldingen når jeg kjører den.
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
Kjører lsof -i :80
returnerer
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)
Må jeg drepe disse prosessene først? Er det trygt? Eller er det en annen måte å holde Flask kjørende på port 5000, men ha hovednettstedets domene omdirigert på en eller annen måte?
Så det kaster opp den feilmeldingen fordi du har apache2
som kjører på port 80.
Hvis dette er for utvikling, ville jeg bare la det være som det er på port 5000.
Hvis det er for produksjon heller:
Ikke anbefalt
apache2
først;Anbefales ikke slik det står i dokumentasjonen:
Du kan bruke den innebygde serveren under utvikling, men du bør bruke et fullstendig distribusjonsalternativ for produksjonsapplikasjoner. (Ikke bruk den innebygde utviklingsserveren i produksjon).
Anbefalt.
HTTP
trafikk gjennom apache2
til Flask.På denne måten kan apache2
håndtere alle de statiske filene dine (noe den er veldig god til - mye bedre enn feilsøkingsserveren som er innebygd i Flask) og fungere som en omvendt proxy for det dynamiske innholdet ditt, og sende disse forespørslene til Flask.
Her er en lenke til den offisielle dokumentasjonen om å sette opp Flask med Apache + mod_wsgi.
Edit 1 - Presisering for @Djack.
Proxy HTTP-trafikk til Flask gjennom apache2
Når en forespørsel kommer til serveren på port 80 (HTTP
) eller port 443 (HTTPS
), håndterer en webserver som Apache eller Nginx tilkoblingen av forespørselen og finner ut hva som skal gjøres med den. I vårt tilfelle skal en mottatt forespørsel konfigureres til å sendes videre til Flask på WSGI-protokollen og håndteres av Python-koden. Dette er den "dynamiske" delen.
Omvendt proxy for dynamisk innhold
Det er noen fordeler med å konfigurere webserveren din som ovenfor;
Problemet ditt er at du allerede har en Apache-webserver som allerede bruker port 80. Så du kan enten:
Drep apache: Du bør sannsynligvis gjøre dette via /etc/init.d/apache2 stop
, i stedet for bare å drepe dem.
Distribuer flask-appen din i apache-prosessen, slik flask in apache beskriver.