ПРОКСИ СЕРВЕР

Прокси – единая точка входа в приложение, может использоваться в двух режимах: как основной веб-сервер, с помощью которого можно настроить защищённое https соединение, или как прокси, который будет работать за внешним, сконфигурированным на стороне клиента веб-сервером.

Настройка прокси осуществляется с помощью переменных среды, имеющих префикс PROXY

Настройка прокси

Сервисные порты:

  • PROXY_PORT=80 (порт сервиса основного приложения)
  • PROXY_ADMIN_PORT=81 (порт сервиса для доступа к консоли администрирования)
  • PROXY_SSL_PORT=443 (порт сервиса для защищённого HTTPS соединения)

Прокси имеет два режима работы:

  • с поддержкой защищённого https соединения;
  • нешифрованное соединение;

PROXY_SSL_ENABLED - Значение в формате true/false, определяющее использование защищённого https соединения с помощью SSL сертификатов. Значение по умолчанию: true.

# Включить использование https
PROXY_SSL_ENABLED=true

PROXY_CERT_PATH - Строка, содержащая абсолютный или относительный путь к файлу сертификата, выданным удостоверяющим центром заказчика. Файл сертификата должен быть в .pem формате, содержать сертификат объекта, закрытый ключ и образовывать полную цепочку доверия.

# Путь к сертификату
PROXY_CERT_PATH=/etc/ssl/planr.pem

Пример создания сертификата в .pem формате. Для создания, нужно выполнить команду:

cat example.crt example.key > planr.pem

Содержимое получившегося файла сертификата, должно быть вида:

register image

Если при создании сертификата в .pem формате необходимо использовать цепочку сертификатов серверный->промежуточный->корневой, то команда примет вид:

 cat your-server.cert your-intermediate.cert your-root.cert your-server.key > planr.pem

Содержимое получившегося файла сертификата должно быть следующего вида:

register image

Настройка прокси SSL с использованием внешнего веб-сервера Nginx

Для настройки прокси SSL с использованием внешнего веб-сервера Nginx, необходимо:

  • Изменить значения переменных
    • PROXY_PORT=8080 (любой порт отличный от 80 по умолчанию, так как внешний веб-сервер будет прослушивать этот порт)
    • PROXY_ADMIN_PORT=8081 (любой порт отличный от 81 по умолчанию, так как внешний веб-сервер будет прослушивать этот порт)
    • PROXY_SSL_PORT=8443 (любой порт отличный от 443 по умолчанию, так как внешний веб-сервер будет прослушивать этот порт)
  • Убедится, что внешний веб-сервер имеет поддержку websocket.
  • Используя внешний веб-сервер, сделать редирект на http://localhost:8080 (Порт задаётся переменной PROXY_PORT) и на http://localhost:8081 (Порт задаётся переменной PROXY_ADMIN_PORT).

Примеры

Конфигурация для Nginx. При настройке конфигурации Nginx в поле server_name <set_your_domain> необходимо ввести имя вашего домена. В поля ssl_certificate <path to certificate> и <path to key certificate> необходимо указать путь к сертификату и ключу сертификата, соответственно(например, /etc/ssl/certs/example.crt и /etc/ssl/private/example.key).

Конфигурация Nginx

upstream planr {
   server localhost:8080;
}

upstream planr_admin {
   server localhost:8081;
}

server {
  listen 80;
  # указать используемое dns имя
  server_name <set_your_domain>;

  # Redirect all traffic to SSL
  rewrite ^ https://$host$request_uri/ permanent;
}

server {
   listen 81 ssl;
   # указать используемое dns имя
   server_name <set_your_domain>;

   # SSL Cert
   # указать путь к сертификатам на сервере
   ssl_certificate <path to certificate>;
   ssl_certificate_key <path to key certificate>;

   # SSL settings
   ssl_protocols TLSv1.2 TLSv1.3;

   large_client_header_buffers 4 8k;
   proxy_read_timeout 12h;
   # Максимальный размер загружаемого файла
   # 0 - неограниченно, ограничение настраивается в консоли администратора
   client_max_body_size 0;
   client_body_timeout 1h;
   client_header_buffer_size 8k;
   client_header_timeout 1h;
   include /etc/nginx/mime.types;
   gzip on;
   gzip_vary on;
   gzip_min_length 5;
   gzip_proxied expired no-cache no-store private auth;
   gzip_types text/plain application/json text/css text/xml text/javascript application/x-javascri>
   gzip_disable "MSIE [1-6]\.";


   location / {
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $host;

   proxy_pass http://planr_admin;

   # enable WebSockets
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   }
}

server {
   listen 443 ssl;
   server_name <set_your_domain>;

   # SSL Cert
   ssl_certificate <path to certificate>;
   ssl_certificate_key <path to key certificate>;

   # SSL settings
   ssl_protocols TLSv1.2 TLSv1.3;

   large_client_header_buffers 4 8k;
   proxy_read_timeout 12h;
   # Максимальный размер загружаемого файла
   # 0 - неограниченно, ограничение настраивается в консоли администратора
   client_max_body_size 0;
   client_body_timeout 1h;
   client_header_buffer_size 8k;
   client_header_timeout 1h;
   include /etc/nginx/mime.types;
   gzip on;
   gzip_vary on;
   gzip_min_length 5;
   gzip_proxied expired no-cache no-store private auth;
   gzip_types text/plain application/json text/css text/xml text/javascript application/x-javascri>
   gzip_disable "MSIE [1-6]\.";

   location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;

      proxy_pass http://planr;

      # enable WebSockets
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
   }
}


509.1-59ba7826