В настоящее время я запускаю nginx на порту 80 с настроенными именами серверов как example.com
и www.example.com
.
У меня также есть Колба приложение, которое я хотел бы сделать доступным через порт 80, но используя имя хоста app.example.com
.
Поскольку nginx уже использует порт 80, как именно мне маршрутизировать app.example.com
запросы к приложению Flask?
Обратите внимание, что у сервера только один IPv4-адрес.
Должно быть довольно легко.
Убедитесь, что сам Flask работает на порту, отличном от 80.
Затем используйте NginX в качестве обратного прокси (и веб-сервера) для обработки, поддомена для app.example.com и, во-вторых, обработайте это как прокси для localhost: 8080 (или где бы то ни было ваше приложение flask).
upstream flask {
server 127.0.0.1:8080; #Flask
}
server {
listen YOUR_PUBLIC_IP:80;
server_name app.example.com;
location / {
proxy_pass http://flask;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
У вас может быть много блоков server {}, все на порту 80, при условии, что server_name изменяется, и использовать их так же, как Apache VirtualHosts.
Непосредственно обслуживать приложение через порт 80 - не лучшая идея. Намного лучше иметь стандартный HTTP-сервер, прослушивающий порт 80 и перенаправляющий запросы на сервер WSGI вашего приложения Python (Flask).
Вы должны настроить nginx для отправки всех запросов для app.example.com на ваш WSGI (сервер приложений Python). Таким образом, запросы на http://example.com:80 будут обслуживаться непосредственно nginx, и все запросы виртуального хоста app.example.com:80 будут перенаправлены на ваш сервер приложений Python. В зависимости от ваших предпочтений вы можете запускать приложение Python / Flask с помощью uWSGI или gunicorn.
Чтобы настроить app.example.com в качестве виртуального хоста, вам необходимо создать файл (например, /etc/nginx/sites-available/app.example.com
если вы используете дистрибутив на основе Debian), который будет содержать что-то вроде этого:
server {
server_name app.example.com;
access_log /var/log/nginx/app-access.log;
error_log /var/log/nginx/app-error.log;
location /static {
root /var/www/app.example.com/static; # adjust to fit your path here
}
location / {
uwsgi_pass unix:/tmp/uwsgi_app.sock;
include /etc/nginx/conf.d/uwsgi_params;
}
}
Содержание location /
раздел необходимо настроить в зависимости от конкретного сервера WSGI, который вы решите использовать - см. ниже.
Затем вам нужно привязать новую конфигурацию виртуального хоста к сайтам с поддержкой сайтов и перезапустить nginx:
ln -sf /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
/etc/init.d/nginx restart
См. Этот документ для получения дополнительной информации о настройка nginx для обслуживания нескольких сайтов (виртуальных хостов) на том же IP-адресе и TCP-порту.
Вот две записи в блоге, описывающие, как настроить nginx с uWSGI: Развертывание Flask с Nginx и uWSGI Настройка Flask с помощью nginx и uWSGI. Если вы предпочитаете gunicorn (порт Python WSGI сервера приложений единорога Ruby), вы можете проверить этот вопрос SO: Запуск приложения Flask с nginx и gunicorn и Обслуживание приложений Flask с помощью Nginx и gunicorn