Bagaimana cara mendapatkan Labu untuk berjalan pada port 80?

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?

Mengomentari pertanyaan (2)

1 - Stop aplikasi lain yang menggunakan port 80. 2 - menjalankan aplikasi dengan port 80 :

if __name__ == '__main__':
      app.run(host='0.0.0.0', port=80)
Komentar (5)

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
Komentar (4)
Larutan

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

  • Stop 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

  • Proxy 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;

  • SSL Termination - web server akan dioptimalkan untuk menangani permintaan HTTPS dengan hanya sedikit konfigurasi. Don't "roll anda sendiri" dalam Python yang mungkin sangat tidak aman dalam perbandingan.
  • Keamanan - Membuka port untuk internet membutuhkan pertimbangan yang hati-hati dari keamanan. Labu's pengembangan server ini tidak dirancang untuk ini dan bisa membuka bug atau masalah keamanan dibandingkan dengan web server yang dirancang untuk tujuan ini. Catatan yang buruk dikonfigurasi server web juga dapat menjadi tidak aman!
  • File statis Penanganan - Hal ini dimungkinkan untuk builtin Labu web server untuk menangani file statis namun hal ini tidak dianjurkan; Nginx/Apache jauh lebih efisien dalam penanganan file statis seperti gambar, CSS, file Javascript dan hanya akan memberikan "dinamis" permintaan (orang-orang di mana konten tersebut sering baca dari database atau perubahan konten) yang akan ditangani oleh kode Python.
  • +lebih. Hal ini berbatasan dengan ruang lingkup untuk pertanyaan ini. Jika anda ingin info lebih lanjut melakukan penelitian ke daerah ini.
Komentar (3)

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
Komentar (0)

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)
Komentar (0)

Masalah anda adalah, bahwa anda memiliki webserver apache sudah berjalan yang sudah menggunakan port 80. Jadi, anda dapat:

  1. Membunuh apache: Anda mungkin harus melakukan hal ini melalui /etc/init.d/apache2 stop, bukan hanya membunuh mereka.

  2. Menyebarkan labu aplikasi dalam proses apache, sebagai flask di apache menjelaskan.

Komentar (0)

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.

Komentar (0)

mengatur port dengan app.menjalankan(port=80,debug=True) anda harus mengatur debug untuk benar ketika pada dev

Komentar (0)

Anda don't perlu mengubah nomor port untuk aplikasi anda, hanya mengkonfigurasi server www (nginx atau apache) untuk proxy query ke labu port. Membayar attantion pada uWSGI.

Komentar (0)

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

Komentar (0)