ПРОКСИ СЕРВЕР
Прокси – единая точка входа в приложение, может использоваться в двух режимах: как основной веб-сервер, с помощью которого можно настроить защищённое 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
Содержимое получившегося файла сертификата, должно быть вида:
Если при создании сертификата в .pem формате необходимо использовать цепочку сертификатов серверный->промежуточный->корневой, то команда примет вид:
cat your-server.cert your-intermediate.cert your-root.cert your-server.key > planr.pem
Содержимое получившегося файла сертификата должно быть следующего вида:
Настройка прокси 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";
}
}