Назад | Перейти на главную страницу

Могу ли я запустить два серверных приложения на 80-м порту?

В настоящее время я запускаю 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