어떻게 하면 플라스크를 포트 80에서 작동시킬 수 있나요?
5000번 포트를 통해 플라스크 서버를 가동하고 있는데 괜찮습니다.http://example.com:5000 에서 액세스 할 수 있습니다.
하지만 http://example.com에서 간단하게 접속할 수 있을까요?포트를 5000에서 80으로 변경해야 할 것 같습니다.하지만 플라스크에서 시도하면 실행할 때 이 오류 메시지가 나타납니다.
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)
먼저 이 프로세스를 종료해야 합니까?그거 안전한 거야?또는 포트 5000에서 Flask를 계속 실행하면서 메인 웹 사이트 도메인을 리다이렉트할 수 있는 다른 방법이 있습니까?
1- 포트 80을 사용하는 다른 응용 프로그램을 중지합니다. 포트 80을 사용하여 응용 프로그램을 2회 실행합니다.
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
Apache 또는 기타 웹 서버를 사용하지 않는 외부에서 볼 수 있는 서버의 경우 입력만 하면 됩니다.
flask run --host=0.0.0.0 --port=80
되는 것은, 「 」 「 」 「 so 、 「 」apache2
팔십 냥
개발용이라면 포트 5000에 그대로 두겠습니다.
어느쪽인가를 실가동하는 경우:
권장하지 않음
- (Stop)
apache2
번째; 첫번,,
매뉴얼에 기재되어 있는 바와 같이 권장하지 않습니다.
개발 중에는 빌트인 서버를 사용할 수 있지만 프로덕션 애플리케이션에는 완전한 배포 옵션을 사용해야 합니다(실가동 시에는 빌트인 개발 서버를 사용하지 마십시오).
권장된
- " "
HTTP
를 통과하는apache2
플라스크로 이동합니다.
하면요.apache2
는 모든 정적 파일(플라스크에 내장된 디버깅서버보다 훨씬 뛰어난 기능)을 처리할 수 있으며, 이러한 요청을 플라스크에 전달하여 동적 콘텐츠의 역방향 프록시 역할을 합니다.
Apache + mod_wsgi에서 Flask를 설정하는 방법에 대한 공식 문서 링크입니다.
편집 1 - @Djack 설명
apache2를 통해 Flask에 대한 HTTP 트래픽 프록시
80상의 ( 「 「 80 」 ) 。HTTP
443Port 443).HTTPS
Apache 또는 Nginx와 같은 웹 서버는 요청 연결을 처리하고 이 연결을 사용하여 무엇을 할지 결정합니다.이 경우 수신된 요청은 WSGI 프로토콜의 Flask로 전달되고 Python 코드로 처리되도록 구성해야 합니다.이것은 "동적인" 부분입니다.
동적 콘텐츠용 리버스 프록시
위와 같이 웹 서버를 설정하는 것에는 몇 가지 이점이 있습니다.
- SSL 종단 - 웹 서버는 약간의 구성만으로 HTTPS 요청을 처리하도록 최적화됩니다.Python에서는, 「자신의 것을 롤」하지 말아 주세요.이것은 아마 매우 안전하지 않을 것입니다.
- 보안 - 인터넷에 대한 포트를 열려면 보안에 대한 세심한 고려가 필요합니다.Flask의 개발 서버는 이를 위해 설계되지 않았으며 이를 위해 설계된 웹 서버와 비교하여 해결되지 않은 버그나 보안 문제가 있을 수 있습니다.설정이 잘못된 웹 서버도 안전하지 않을 수 있습니다.
- 정적 파일 처리 - 내장된 Flask 웹 서버가 정적 파일을 처리하는 것은 가능하지만 이는 권장되지 않습니다. Nginx/Apache는 이미지, CSS, Javascript 파일 등의 정적 파일을 처리하는 데 훨씬 효율적이며 동적 요청(데이터베이스에서 내용을 읽거나 내용을 변경하는 경우)만 전달합니다.Python 코드에 의해 dled 됩니다.
- +더. 이 질문의 범위에 가깝습니다.더 많은 정보를 원하시면 이 분야에 대해 조사를 해보시기 바랍니다.
다음을 사용하여 포트 또는 호스트를 변경하는 경우:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
다음 코드를 사용하여 서버를 시작합니다(플라스크의 주요 입구는 app.py입니다).
python app.py
다음을 사용하는 대신:
flask run
편리한 방법은 패키지를 사용하는 것입니다.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.1
그리고.FLASK_RUN_PORT
디폴트로 하다5000
.
Ubuntu-18에서는 이 솔루션밖에 사용할 수 없었습니다.
파일 내부app.py
, 사용방법:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
위의 코드는 다음 경우를 제외하고 동일한 권한 오류를 발생시킵니다.sudo
를 사용하여 실행합니다.
sudo python3 app.py
포트 80에서 실행 중인 프로세스를 쉽게 비활성화하고 이 명령을 실행할 수 있습니다.
flask run --host 0.0.0.0 --port 80
또는 .py 파일 내에서 실행하는 것이 좋습니다.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
애플리케이션을 동일한 포트(예: 포트=)에 배치하려면 터미널에서 다음 명령을 실행합니다.
fuser -k 5000/tcp
다음 명령을 실행합니다.
python app.py
지정된 포트(예: 포트=80)에서 실행하려는 경우 기본 파일에서 다음을 언급하십시오.
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
나는 설정해야 했다.FLASK_RUN_PORT
지정된 포트 번호로 이동합니다.다음에 앱을 시작할 때 Flask는 선택한 포트 번호로 환경 변수를 로드합니다.
제 시나리오에서는 다음과 같은 절차가 매우 효과적이었습니다.
패키지 설치:
pip install --upgrade pip pip install python-dotenv
앱 디렉토리 "flaskr/.flaskenv"에 숨김 파일 만들기
다음 콘텐츠 추가:
FLASK_APP=flaskr FLASK_RUN_HOST=localhost FLASK_RUN_PORT=8000
마지막으로 플라스크 명령을 한 번 더 실행합니다.
flask run
현재 작업 중인 버전은 다음과 같습니다.
pip freeze |grep -i flask Flask==1.1.1
문제는 포트 80을 이미 사용하고 있는 Apache 웹 서버가 이미 실행 중이라는 것입니다.따라서 다음 중 하나를 수행할 수 있습니다.
이것은 아마 이이를 것이 좋을 것 같습니다.
/etc/init.d/apache2 stop
그냥 죽이는 게 아니라요apache의 플라스크가 설명한 바와 같이 apache 프로세스에 플라스크 앱을 도입합니다.
응용 프로그램의 포트 번호를 변경할 필요는 없습니다.www 서버(nginx 또는 apache)를 flask 포트에 대한 프록시 쿼리로 설정하기만 하면 됩니다. 를 기울이다uWSGI
.
app.run(port=80,debug=True)
는 debug .
가장 쉽고 최적의 솔루션
.py 파일을 폴더에 저장합니다.이 경우 내 폴더 이름은 test입니다.명령 프롬프트에서 다음을 실행합니다.
c:\test> set FLASK_APP=application.py
c:\test> set FLASK_RUN_PORT=8000
c:\test> flask run
---------------------------------------------------------------------------------
* 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 -
브라우저에 http://127.0.0.1:8000 이라고 입력합니다.감사해요.
다음 단계로 해결했습니다.
1개의 열린 cmd
실행 2회 실행ipconfig
3 cmd에서 IPv4 주소 복사
4 다음에 IPv4 를 로컬호스트로서 사용합니다.
app.run(debug=True, port=5000, host='localhost')
localhost 를 IPv4 주소로 바꿉니다.
프런트 엔드의 경우는, 순서 4 를 다음과 같이 실시합니다.
'http://localhost:5000/auth'에서 'localhost'를 IPv4 주소로 바꿉니다.
참고: {프런트 엔드 및 백엔드}에 동일한 포트를 사용합니다.
6 양쪽 프로젝트를 동시에 실행(백엔드와 프런트 엔드)
언급URL : https://stackoverflow.com/questions/20212894/how-do-i-get-flask-to-run-on-port-80
'programing' 카테고리의 다른 글
Windows XP의 Java 최대 메모리 (0) | 2022.10.30 |
---|---|
다른 SELECT 값을 기반으로 SELECT하는 방법 (0) | 2022.10.30 |
SSL(자기서명) 증명서를 사용하여 스프링 및 휴지기를 통해 MariaDB 연결 (0) | 2022.10.30 |
ALTER 테이블 - MySQL에 자동 증가 추가 (0) | 2022.10.30 |
Javadoc: HTML 태그가 없는 줄 바꿈? (0) | 2022.10.30 |