Рубрики
Без рубрики

Как запустить приложение Flask через HTTPS, используя официантку и Nginx. 2020 (2021) обновлен.

Запуск приложения Flask по HTTPS кажется, что это должно быть простым упражнением, однако их не так много … Tagged с Python, Flask, Nginx, Ssl.

Запуск приложения Flask по HTTPS кажется, что это должно быть простым упражнением, однако, не так много современных руководств, охватывающих эту тему. Вот шаги, которые я предпринял, чтобы запустить приложение Flask по HTTPS.

Вот основные шаги.

  1. Установите приложение Flask.
  2. Запустите его с официанткой.
  3. Используйте обратный прокси с Nginx.
  4. Установите SSL.
  5. Настройте правила Nginx Server.

Это руководство предполагает, что у вас уже есть приложение Flask. Если вы здесь нет, это простое приложение Flask.

from flask import Flask


app = Flask(__name__)

@app.route("/")
def hello():
    return "

A very simple flask server !

" if __name__ == "__main__": #app.run(host='0.0.0.0')

Запуск этого должен дать вам следующее.

Хорошо, у нас работает приложение Flask, почему бы просто не использовать этот сервер? За документацию на колбу:

«В то время как встроенный сервер Flask’s Flask не подходит для производства, так как он не очень хорошо масштабируется. Некоторые из вариантов, доступных для правильного запуска колбы в производстве, здесь задокументированы ».

Одним из самых простых решений для этого является использование Официантка Не стесняйтесь читать официальное руководство самостоятельно. Но для этого примера нам нужно только внести небольшие изменения. Сначала установите официантку.

$ pip install waitress

Затем нам нужно внести некоторые изменения в наше приложение Flask, чтобы сообщить, что мы используем официантку.

from flask import Flask
#we import waitress here. 
from waitress import serve


app = Flask(__name__)

@app.route("/")
def hello():
    return "

A very simple flask server !

" 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 Анкет

Мы сделаем одно последнее изменение в нашем приложении Flask. Нам нужно сообщить, что официантка узнает, что мы будем использовать HTTPS. Документация Анкет Добавляем url_scheme = 'https' к нашему приложению.

from flask import Flask
from waitress import serve


app = Flask(__name__)

@app.route("/")
def hello():
    return "

A very simple flask server !

" if __name__ == "__main__": #app.run(host='0.0.0.0') serve(app, host='0.0.0.0', port=5000, url_scheme='https')

Теперь у нас есть наш SSL, и мы готовы использовать Nginx. Если у вас еще нет установки Здесь Как это настроить.

Наши правила веб -сервера будут в

etc/nginx/sites-available/default

CD там и удалите пример.

Это будут наши правила. Примечание

Пример.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.address: 5000;

Если вы запускаете свое приложение на другом порте, вам нужно убедиться, что они соответствуют. Например, если вы используете порт 3000 это было бы

proxy_pass http://your.ip.address: 3000;

Хорошо, все конфигурации сделаны. Но нам нужно сообщить Nginx, поэтому мы так же перезагружаем наш сервер.

Sudo SystemCtl Status nginx

Обновите, и вы должны увидеть новый сервер, работающий с SSL.

Оригинал: “https://dev.to/thetrebelcc/how-to-run-a-flask-app-over-https-using-waitress-and-nginx-2020-235c”