[python] 포트 80에서 Flask를 실행하려면 어떻게해야합니까?

포트 5000을 통해 Flask 서버를 실행 중이며 괜찮습니다. http://example.com:5000 에서 액세스 할 수 있습니다 .

그러나 http://example.com 에서 간단히 액세스 할 수 있습니까? 포트를 5000에서 80으로 변경해야한다고 가정합니다. 그러나 Flask에서 시도하면이 오류 메시지가 실행될 때 나타납니다.

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

lsof -i :80반품 실행

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)

이러한 프로세스를 먼저 종료해야합니까? 안전한가요? 아니면 Flask를 포트 5000에서 계속 실행하는 다른 방법이 있습니까?하지만 기본 웹 사이트 도메인이 어떻게 든 리디렉션됩니까?



답변

따라서 apache2포트 80에서 실행 했기 때문에 해당 오류 메시지가 발생합니다 .

이것이 개발 용인 경우 포트 5000에 그대로 둡니다.

프로덕션 용인 경우 :

권장하지 않음

  • apache2먼저 멈춰라 .

설명서에 명시된대로 권장하지 않습니다.

개발 중에 내장 서버를 사용할 수 있지만 프로덕션 응용 프로그램에는 전체 배포 옵션을 사용해야합니다. 프로덕션 환경에서 내장 개발 서버를 사용하지 마십시오.

추천

  • 플라스크를 HTTP통한 프록시 트래픽 apache2.

이렇게하면 apache2모든 정적 파일 (Flask에 내장 된 디버그 서버보다 훨씬 우수함)을 처리하고 동적 콘텐츠에 대한 역방향 프록시 역할을하여 해당 요청을 Flask에 전달할 수 있습니다.

다음 은 Apache + mod_wsgi로 Flask를 설정하는 방법에 대한 공식 문서 링크 입니다.

편집 1-@Djack에 대한 설명

Apache2를 통한 Flask 프록시 프록시 트래픽

요청이 포트 80 ( HTTP) 또는 포트 443 ( HTTPS) 에서 서버로 오면 Apache 또는 Nginx와 같은 웹 서버가 요청의 연결을 처리하고 요청과 관련된 작업을 수행합니다. 이 경우 수신 된 요청은 WSGI 프로토콜의 Flask로 전달되고 Python 코드에 의해 처리되도록 구성되어야합니다. 이것이 “동적”부분입니다.

동적 컨텐츠를위한 리버스 프록시

위와 같이 웹 서버를 구성하면 몇 가지 장점이 있습니다.

  • SSL 종료-웹 서버는 약간의 구성만으로 HTTPS 요청을 처리하도록 최적화됩니다. 파이썬에서는 “자신의 롤”을하지 마십시오. 아마도 비교가 매우 안전하지 않을 것입니다.
  • 보안-인터넷 포트를 열려면 보안을 신중하게 고려해야합니다. Flask의 개발 서버는이를 위해 설계되지 않았으며이 목적을 위해 설계된 웹 서버와 비교하여 오픈 버그 또는 보안 문제가있을 수 있습니다. 잘못 구성된 웹 서버도 안전하지 않을 수 있습니다!
  • 정적 파일 처리-내장 Flask 웹 서버가 정적 파일을 처리 할 수 ​​있지만 권장하지는 않습니다. Nginx / Apache는 이미지, CSS, Javascript 파일과 같은 정적 파일을 처리하는 데 훨씬 효율적이며 Python 코드에서 처리 할 “동적”요청 (데이터베이스에서 내용을 읽거나 내용이 변경되는 경우) 만 전달합니다.
  • + 더 이것은이 질문의 범위에 접해 있습니다. 더 많은 정보를 원하면이 영역에 대해 조사하십시오.

답변

1- 포트 80을 사용하는 다른 응용 프로그램을 중지하십시오. 2- 포트 80으로 응용 프로그램을 실행하십시오.

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


답변

아파치 나 다른 웹 서버를 사용하지 않는 외부에서 보이는 서버의 경우

flask run --host=0.0.0.0 --port=80


답변

다음을 사용하여 포트 또는 호스트를 변경하는 경우 :

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

다음 코드를 사용하여 서버를 시작하십시오 (플라스크의 주요 입구는 app.py입니다).

python app.py

사용하는 대신:

flask run


답변

동일한 포트, 즉 port = 5000에 응용 프로그램을 설치하려면 터미널에서 다음 명령을 실행하십시오.

fuser -k 5000/tcp

그런 다음 다음을 실행하십시오.

python app.py

지정된 포트에서 실행하려면 (예 : port = 80에서 실행하려는 경우) 주 파일에서 다음을 언급하십시오.

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


답변

편리한 방법은 패키지를 사용하는 것입니다 . 플라스크의 환경 변수를 저장할 수 python-dotenv있는 .flaskenv파일을 읽습니다 .

  • pip install python-dotenv
  • .flaskenv앱의 루트 디렉토리에 파일 을 만듭니다

파일 내부에서 다음을 지정하십시오.

FLASK_APP=application.py
FLASK_RUN_HOST=localhost
FLASK_RUN_PORT=80

그런 다음 앱을 실행 flask run하고 해당 포트에서 앱에 액세스 할 수 있습니다.

주의하시기 바랍니다 FLASK_RUN_HOST기본값 127.0.0.1FLASK_RUN_PORT에 기본값을 5000.


답변

이것은 Ubuntu-18에서 나를 위해 일한 유일한 솔루션입니다.

파일 내부에서 다음을 app.py사용하십시오.

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

위의 코드 sudo는 실행에 사용 되지 않는 한 동일한 권한 오류를 발생시킵니다 .

sudo python3 app.py