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


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.