Waitress 및 NGINX를 사용하여 HTTPS를 통해 Flask 앱을 ​​실행하는 방법 2022년 업데이트.

4968 단어 sslpythonflasknginx
HTTPS를 통해 Flask 앱을 ​​실행하는 것은 간단한 연습처럼 보이지만 이 주제를 다루는 최신 가이드는 많지 않습니다. 다음은 HTTPS를 통해 Flask 앱을 ​​실행하기 위해 수행한 단계입니다.

기본 단계는 다음과 같습니다.
  • Flask 앱을 ​​설정합니다.
  • Waitress로 실행합니다.
  • NGINX에서 리버스 프록시를 사용합니다.
  • SSL을 설정합니다(업데이트됨).
  • NGINX 서버 규칙을 구성합니다.

  • 이 가이드에서는 이미 Flask 앱이 실행 중이라고 가정합니다. 그렇지 않은 경우 간단한 Flask 앱이 있습니다.

    from flask import Flask
    
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "<h1 style='color:blue'> A very simple flask server !</h1>"
    
    if __name__ == "__main__":
        #app.run(host='0.0.0.0')
    
    


    이것을 실행하면 다음이 제공됩니다.



    좋습니다. Flask 앱을 ​​실행 중입니다. 이 서버를 사용하지 않는 이유는 무엇입니까? 플라스크 문서당:

    가볍고 사용하기 쉬운 반면 Flask의 내장 서버는 확장성이 좋지 않아 프로덕션에 적합하지 않습니다. 프로덕션 환경에서 Flask를 올바르게 실행하는 데 사용할 수 있는 옵션 중 일부는 여기에 문서화되어 있습니다.'

    이에 대한 가장 간단한 해결책 중 하나는 Waitress을 사용하는 것입니다. 공식 가이드를 직접 읽어보세요. 하지만 이 예에서는 약간의 변경만 하면 됩니다. 먼저 Waitress를 설치합니다.

    $ pip install waitress
    


    다음으로 Waitress를 사용하고 있음을 알리기 위해 Flask 앱을 ​​일부 변경해야 합니다.

    
    from flask import Flask
    #we import waitress here. 
    from waitress import serve
    
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "<h1 style='color:blue'> A very simple flask server !</h1>"
    
    if __name__ == "__main__":
        #app.run(host='0.0.0.0')
        #We now use this syntax to server our app. 
        serve(app, host='0.0.0.0', port=5000)
    
    


    이제 생산 준비가 완료된 서버에서 Flask 앱을 ​​실행했습니다. 그러나 우리는 여전히 SSL이 필요합니다. 아직 없는 경우 Certbot을 사용하거나 자체 서명된Cert을 사용할 수 있습니다.

    (업데이트: Ömer Faruk Sancak 덕분에)

    다음 명령을 실행하여 SSL을 얻거나 건너뛰고 자체 프로세스를 수행하십시오.

    
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
    sudo apt-get install python3-certbot-nginx
    
    
    sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    
    letsencrypt certonly -a webroot --webroot-path=/var/www/yourdomain.com/html/ -d yourdomain.com -d www.yourdomain.com
    
    
    


    Flask 앱을 ​​마지막으로 변경합니다. https를 사용할 것임을 웨이트리스에게 알려야 합니다. Documentation . 앱에 url_scheme='https'를 추가합니다.

    from flask import Flask
    from waitress import serve
    
    
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "<h1 style='color:blue'> A very simple flask server !</h1>"
    
    if __name__ == "__main__":
        #app.run(host='0.0.0.0')
        serve(app, host='0.0.0.0', port=5000, url_scheme='https')
    


    이제 SSL이 있고 NGINX를 사용할 준비가 되었습니다. 아직 설치하지 않은 경우here 설정 방법입니다.

    웹 서버 규칙은 다음 위치에 있습니다.

    etc/nginx/sites-available/default
    


    거기에 CD를 넣고 예제를 삭제하십시오.

    이것이 우리의 규칙이 될 것입니다. 메모
    example.com & your.ip
    이것은 귀하의 도메인/서버 주소를 사용하는 예일 뿐입니다.

    server {
        listen 443 ssl;
    
    
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    
    
    
    
    
        server_name example.com;
    
    
    
     location / {
    
                proxy_pass http://your.ip.adress:5000;
                proxy_set_header X-Real-IP $remote_addr;
    
    
            }
    
    
    }
    
    
    
    server {
        listen 80;
    
        server_name example.com;
    
        return 302 https://$server_name$request_uri;
    }
    
    
    
    


    이 줄에 참고하십시오.
    proxy_pass http://your.ip.adress:5000;
    다른 포트에서 앱을 실행 중인 경우 이러한 포트가 일치하는지 확인해야 합니다. 예를 들어 포트 3000을 사용하는 경우
    proxy_pass http://your.ip.adress:3000;
    자, 모든 설정이 끝났습니다. 하지만 NGINX에 알려야 하므로 이렇게 서버를 다시 시작합니다.
    sudo systemctl status nginx
    새로 고침하면 SSL로 실행 중인 새 서버가 표시됩니다.

    좋은 웹페이지 즐겨찾기