Flask приложение с Nginx и Gunicorn, используя пользовательское доменное имя для IP: порт - PullRequest
0 голосов
/ 03 марта 2020

Я развернул приложение Flask в Ubuntu с Gunicorn и Nginx обслуживание запросов

Nginx conf:

server {
server_name server_name domain_name;

location / {
    include proxy_params;
    proxy_pass http://unix:/home/darshit/myproject/myproject.sock;
}

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem; # managed by 
Certbot
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
if ($host = domain_name) {
    return 301 https://$host$request_uri;
} # managed by Certbot


listen 80;
server_name server_name domain_name;
return 404; # managed by Certbot
}

Теперь приложение принимает запрос через порт 443 для httos. Частный ip был сопоставлен с publi c ip, а порт 443 сервера был сопоставлен для обслуживания запросов через порт 9991. Чтобы получить доступ к приложению через inte rnet, пользователь должен нажать: https://domain_name: 9991

Я хочу, чтобы приложение обслуживало запросы без указания имени порта, например, на https://domain_name

Какие изменения необходимо внести? Любая помощь будет оценена

1 Ответ

0 голосов
/ 03 марта 2020

Предполагая, что ваш gunicorn прослушивает порт 9991, вам необходимо настроить nginx для входящих запросов к нему.

Вот как вы это делаете:

server {
    listen 80 default_server;

    server_name _;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name _;

    ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location /static  {
    alias /path/to/static/folder/of/application;
    }

    location / {
         proxy_pass http://localhost:9991;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection 'upgrade';
         proxy_set_header Host $host;
         proxy_cache_bypass $http_upgrade;
     }
}

Примечания :

Первый блок кода прослушивает порт 80 для любого соединения и просто выполняет постоянное перенаправление на порт 443. Это необходимо для того, чтобы, если пользователь вводит http://example.com, это следует перенаправить на https://example.com

Теперь второй блок прослушивает порт 443 для защищенных соединений с ключами, настроенными ниже, и, по существу, направляет запрос к порту 9991, где работает ваш оружейный.

Pro-tip: Я добавил дополнительный блок location /static, который в основном соответствует любому запросу с /static в нем и обслуживает его из папки stati c вашего приложения. Файлы stati c, такие как изображения, таблицы стилей и т. Д. c, не должны обслуживаться сервером приложений, в идеале они должны обслуживаться веб-сервером, например nginx.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...