플라스크에 원격 연결을 허용하는 방법?


30

가상 머신에서 실행되는 시스템 내부에서에서 실행중인 서버에 액세스 할 수 있습니다 127.0.0.1:5000.

vm의 '원격'주소가 192.168.56.101 (ping 및 ssh가 제대로 작동)이지만 가상 컴퓨터 나 로컬 컴퓨터에서 모두 192.168.50.101:5000을 사용하여 서버에 액세스 할 수 없습니다.

원격 연결을 방해하는 것이 있다고 생각합니다.

/ etc / network / interfaces는 다음과 같습니다.

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw가 비활성화되었습니다.

이 문제를 어떻게 해결합니까?

답변:


48

우선-다음의 출력을 확인하여 HTTP 서버가 192.168.50.101:5000어디서나 ( 0.0.0.0:5000) 청취 하고 있는지 확인하십시오.

netstat -tupln | grep ':5000'

그렇지 않은 경우 Flask의 설명서 를 참조 하여 localhost 이외의 주소에 바인딩 하십시오 .

그렇다면 iptables를 사용하여 트래픽을 허용하십시오.

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

플라스크의 문서에서 :

외부에서 볼 수있는 서버 서버를 실행하면 네트워크의 다른 컴퓨터가 아닌 자신의 컴퓨터에서만 서버에 액세스 할 수 있습니다. 디버깅 모드에서는 응용 프로그램 사용자가 컴퓨터에서 임의의 Python 코드를 실행할 수 있기 때문에 이것이 기본값입니다.

디버그를 비활성화하거나 네트워크의 사용자를 신뢰하는 경우 run()다음과 같이 메서드 호출을 변경하여 서버를 공개적으로 사용할 수 있습니다 .

app.run(host='0.0.0.0')

1) 출력은 127.0.0.1:5000 0.0.0.0:* LISTEN입니다. 이것은 서버가 다른 로컬 호스트의 주소를 듣지 않는 것을 의미합니까? 2) 내가 UFW 5000을 허용, 어떤 결과를 시도하지
— 일리아 Smagin

그렇기 때문에 Flask의 문서를보고 모든 주소를 수신하도록 구성하는 것이 좋습니다. 당신은 그것을 보았습니까? 방화벽을 통해서만 허용해도 문제가 해결되지 않습니다.
— Marcin Kaminski

예, 고맙습니다. 이미보고 있습니다. 이미 localtunnel을 사용했습니다 (너무 많이 알고 있지만 작동합니다). netstat의 출력 "127.0.0.1:5000 0.0.0.0:* LISTEN"의 의미를 이해하려고합니다.
— Ilya Smagin

localtunnel이 필요하지 않습니다. :) netstat 출력에 표시되는 내용은 HTTP 서버가 로컬 시스템의 연결 만 수락한다는 것입니다. Flask 구성에서 SERVER_NAME 변수를 변경해야합니다.
— Marcin Kaminski

2
질문을 좋아하고이 답변을 찬성하기 위해 여기에 계정을 만들었습니다!
— Hephaestus 2016 년


4

방금 같은 문제가있었습니다. 이를 해결하기 위해 응용 프로그램을 실행하는 방법을 업데이트했습니다.

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

host = 0.0.0.0을 사용하면 로컬 네트워크를 통해 내 앱에 액세스 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.