Làm thế nào để cho phép kết nối từ xa đến Flask?


30

Bên trong hệ thống, chạy trên máy ảo, tôi có thể truy cập máy chủ đang chạy tại 127.0.0.1:5000.

Mặc dù địa chỉ 'từ xa' của vm là 192.168.56.101 (ping và ssh hoạt động tốt), tôi không thể truy cập máy chủ với 192.168.50.101, 000 không phải từ máy ảo cũng như từ máy cục bộ.

Tôi đoán có một cái gì đó ngăn chặn các kết nối từ xa.

Đây / etc / mạng / giao diện:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw không hoạt động.

Làm sao để giải quyết vấn đề này?

Câu trả lời:


48

Trước hết - hãy đảm bảo rằng máy chủ HTTP của bạn đang lắng nghe 192.168.50.101:5000hoặc ở mọi nơi ( 0.0.0.0:5000) bằng cách kiểm tra đầu ra của:

netstat -tupln | grep ':5000'

Nếu không, hãy tham khảo tài liệu của Flask để liên kết với một địa chỉ khác ngoài localhost.

Nếu có, cho phép lưu lượng sử dụng iptables:

iptables -I INPUT -p tcp --dport 5000 -j ACCEPT

Từ tài liệu của Flask:

Máy chủ có thể nhìn thấy bên ngoài Nếu bạn chạy máy chủ, bạn sẽ nhận thấy rằng máy chủ chỉ có thể truy cập được từ máy tính của bạn chứ không phải từ bất kỳ máy chủ nào khác trong mạng. Đây là mặc định vì trong chế độ gỡ lỗi, người dùng ứng dụng có thể thực thi mã Python tùy ý trên máy tính của bạn.

Nếu bạn đã gỡ lỗi bị vô hiệu hóa hoặc tin tưởng người dùng trên mạng của mình, bạn có thể đặt máy chủ ở chế độ công khai đơn giản bằng cách thay đổi cuộc gọi của run()phương thức thành như sau:

app.run(host='0.0.0.0')

1) đầu ra là 127.0.0.1 giáp000 0.0.0.0:* LISTEN. Điều này có nghĩa là máy chủ không nghe địa chỉ tha localhost khác? 2) Tôi đã thử ufw cho phép 5000, không có kết quả
Ilya Smagin

Đây là lý do tại sao tôi đề nghị xem xét các tài liệu của Flask để cấu hình nó để nghe trên tất cả các địa chỉ. Bạn đã nhìn nó chưa? Cho phép nó thông qua tường lửa một mình sẽ không sửa chữa nó.
Marcin Kaminski

Vâng, cảm ơn bạn, tôi hiểu rồi, đã tìm rồi. Đã sử dụng localtunnel (Tôi biết nó quá nhiều, nhưng nó hoạt động). Chỉ cần cố gắng để hiểu đầu ra của netstat "127.0.0.1 giáp000 0.0.0.0:* LISTEN" nghĩa là gì.
Ilya Smagin

Bạn không cần localtunnel :) Điều mà đầu ra netstat cho bạn thấy là máy chủ HTTP của bạn chỉ chấp nhận các kết nối từ máy cục bộ của bạn. Có vẻ như bạn cần thay đổi biến SERVER_NAME trong cấu hình của Flask.
Marcin Kaminski

2
Tạo một tài khoản ở đây chỉ để yêu thích câu hỏi và nâng cao câu trả lời này!
Hephaestus

6

Cách tốt nhất để làm điều đó

flask run --host=0.0.0.0

4

Tôi vừa gặp vấn đề tương tự. Để giải quyết nó, tôi đã cập nhật cách chạy ứng dụng:

 app.run(debug=True,host='0.0.0.0')

Sử dụng máy chủ = 0.0.0.0 cho phép tôi truy cập ứng dụng của mình thông qua mạng cục bộ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.