Saya memiliki Botol server berjalan melalui port 5000, dan's baik-baik saja. Saya bisa mengaksesnya di http://example.com:5000
Tapi apakah itu mungkin untuk hanya mengakses http://example.com? I'm asumsi itu berarti aku harus mengubah port dari 5000 ke 80. Tapi ketika saya mencoba yang di Labu, saya mendapatkan pesan kesalahan ini ketika saya menjalankan itu.
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
Menjalankan lsof-i :80
kembali
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)
Apakah saya perlu untuk membunuh proses-proses yang pertama? Apakah itu aman? Atau ada cara lain untuk menjaga Labu berjalan pada port 5000 tapi memiliki main web domain redirect entah bagaimana?
Untuk eksternal terlihat server, di mana anda don't menggunakan apache atau server web anda cukup ketik
flask run --host=0.0.0.0 --port=80
Jadi itu's muntah bahwa pesan kesalahan karena anda telah apache2
yang berjalan pada port 80.
Jika ini adalah untuk pengembangan, aku hanya akan meninggalkan hal seperti itu pada port 5000.
Jika itu's untuk produksi baik:
Tidak Dianjurkan
apache2
pertama; Tidak direkomendasikan karena negara dalam dokumentasi:
Anda dapat menggunakan built-in server selama pengembangan, tetapi anda harus menggunakan full penyebaran pilihan untuk aplikasi produksi. (Jangan menggunakan builtin pengembangan server produksi.)
Fitur
HTTP
lalu lintas melalui apache2
ke Labu.Dengan cara ini, apache2
dapat menangani semua file statis (yang's sangat baik untuk - jauh lebih baik dari debug server yang dibangun ke dalam Labu) dan bertindak sebagai reverse proxy untuk konten dinamis, menyampaikan permintaan tersebut ke Labu.
Di sini's link untuk dokumentasi resmi tentang pengaturan Flask dengan Apache + mod_wsgi.
Edit 1 - Klarifikasi untuk @Djack
HTTP Proxy lalu lintas ke Labu melalui apache2
Ketika permintaan datang ke server pada port 80 (HTTP
) atau port 443 (HTTPS
) web server seperti Apache atau Nginx menangani hubungan permintaan dan bekerja keluar apa yang harus dilakukan dengan itu. Dalam kasus kami, permintaan yang diterima harus dikonfigurasi untuk melewati ke Labu pada WSGI protokol dan ditangani oleh kode Python. Ini adalah "dinamis" part.
reverse proxy untuk konten dinamis
Ada beberapa keuntungan untuk mengkonfigurasi server web anda seperti di atas;
Jika anda menggunakan berikut untuk mengubah port atau host:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
gunakan kode berikut untuk memulai server (saya masuk utama untuk labu app.py):
python app.py
alih-alih menggunakan:
flask run
Jika anda ingin aplikasi anda pada port yang sama aku.e port=5000 maka hanya di dalam terminal jalankan perintah ini:
fuser -k 5000/tcp
dan kemudian jalankan:
python app.py
Jika anda ingin berjalan pada port tertentu, misalnya jika anda ingin berjalan pada port=80, di file utama hanya menyebutkan hal ini:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
Masalah anda adalah, bahwa anda memiliki webserver apache sudah berjalan yang sudah menggunakan port 80. Jadi, anda dapat:
Membunuh apache: Anda mungkin harus melakukan hal ini melalui /etc/init.d/apache2 stop
, bukan hanya membunuh mereka.
Menyebarkan labu aplikasi dalam proses apache, sebagai flask di apache menjelaskan.
Aku harus mengatur FLASK_RUN_PORT
di lingkungan saya yang ditentukan nomor port. Waktu berikutnya anda memulai aplikasi anda, Termos akan memuat bahwa variabel lingkungan dengan nomor port yang anda pilih.
Cara termudah dan Solusi Terbaik
Simpan anda .py file dalam sebuah folder. Hal ini saya nama folder adalah tes. Pada command prompt jalankan perintah berikut ini
c:\test> set FLASK_APP=application.py
c:\test> set FLASK_RUN_PORT=8000
c:\test> flask run
----------------- Berikut akan dikembalikan ----------------
* Serving Flask app "application.py"
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
127.0.0.1 - - [23/Aug/2019 09:40:04] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [23/Aug/2019 09:40:04] "[33mGET /favicon.ico HTTP/1.1[0m" 404 -
Sekarang pada browser anda ketik: http://127.0.0.1:8000. Terima kasih