Проброс HTTP(S)-трафика
<< Click to Display Table of Contents >> Администрирование (Windows) > Расширенная установка > Настройка Directum RX в кластере через обратный прокси-сервер > Настройка Nginx Проброс HTTP(S)-трафика |
В режиме проброса HTTP(S)-трафика недоступна сквозная аутентификация (NTLM, Kerberos). Чтобы настроить сквозную аутентификацию, используйте коммерческую версию Nginx Plus.
Для проброса HTTPS-трафика на компьютер с прокси-сервером Nginx требуется установка сертификата. Дополнительно появляется возможность переопределять заголовки на уровне протокола HTTP.
1.В конфигурационном файле nginx.conf в директиве http укажите список веб-серверов, на которые происходит проброс трафика:
http {
upstream <your_upstr_name> {
server <your_server 1>:<port>;
server <your_server 2>:<port>;
}
server {
listen <port> <protocol>;
location / {
proxy_pass https://<your_upstr_name>;
}
}
}
Где:
•upstream – список веб-серверов;
•server – имя и порт веб-сервера в директиве upstream. При этом в server{...} задается конфигурация для виртуального сервера;
•listen – отслеживаемый адрес и порт или только порт. Адрес может быть именем хоста;
•proxy_pass – список веб-серверов, на которые происходит проброс трафика.
2.При необходимости дополните конструкцию параметрами, которые позволяют предотвратить закрытие соединения и использовать его повторно в течение определенного интервала времени. Настройка актуальна для высоконагруженных систем, т.к. позволяет сократить время создания соединения.
upstream <your_upstr_name> {
...
keepalive_timeout 60s;
}
server {
...
location / {
proxy_pass …
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}
Вместо указанных выше настроек можно создать пул соединений с помощью директивы keepalive_requests, в которой ограничивается число используемых соединений. Директива задает максимальное число запросов, которые можно сделать по одному постоянному (keep-alive) соединению. Когда максимальное число запросов сделано, соединение закрывается. Это необходимо, чтобы освободить память, выделенную под конкретные соединения. Не рекомендуется задавать слишком большое значение в качестве максимального числа запросов, так как это может приводить к чрезмерному потреблению памяти.
3.Укажите настройку, при которой конкретный сервер считается сбойным на заданный интервал времени, если возникло указанное число ошибок:
server <your_server 2>:<port> max_fails=3 fail_timeout=60s;
Где:
•server – имя и порт сервера;
•max_fails – максимально допустимое количество ошибок, при превышении которого сервер считается сбойным;
•fail_timeout – время, на которое сервер считается сбойным.
4.Для быстрого выявления проблем с сервером заполните директиву proxy_connect_timeout:
proxy_connect_timeout 2s;
Значение директивы подбирается опытным путем, зависит от параметров и нагрузки в конкретной сети.
5.Заполните директивы proxy_send_timeout, proxy_read_timeout и send_timeout. Рекомендуемые значения:
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
6.В директиве server укажите настройки, связанные с используемыми протоколами, сертификатом и закрытым ключом:
server {
...
ssl_certificate /etc/nginx/certs/test.crt;
ssl_certificate_key /etc/nginx/certs/test-key-decrypted.key;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
...
}
Если файл закрытого ключа имеет расширение *.pfx, преобразуйте его в формат *.crt или *.key с помощью указанных ниже команд.
Извлечение открытой части:
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.crt
Извлечение закрытой части:
openssl pkcs12 -in certificate.pfx -nocerts -out key-encrypted.key
Удаление пароля и ограничение доступа к файлу закрытого ключа:
openssl rsa -in key-encrypted.key -out key-decrypted.key
chmod 600 key-decrypted.key
7.Для корректной работы укажите настройки, переопределяющие заголовки:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
8.Для использования только протокола HTTPS настройте перенаправление c HTTP на HTTPS. Для этого в директиве http добавьте конструкцию:
http {
# redirect from http to https
server {
listen 80;
server_name zavnlbcluster; #domain name, example, yandex.ru
return 301 https://$server_name$request_uri;
}
}
Пример конфигурационного файла
В стандартный конфигурационный файл добавлены строки, которые следуют после строки «include /etc/nginx/conf.d/*.conf;». Далее приведен пример настройки Nginx в операционной системе Ubuntu:
worker_processes 1;
worker_rlimit_nofile 4096;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
large_client_header_buffers 4 16k;
# redirect from http to https
server {
listen 80;
server_name cluster.ru;
return 301 https://$server_name$request_uri;
}
# add upstream directive and name “mycluster”
upstream mycluster {
server node-01:443 max_fails=3 fail_timeout=60;
server node-01:443 max_fails=3 fail_timeout=60;
keepalive_timeout 60s;
}
upstream rx-centrifugo {
hash $remote_addr consistent;
server node01:443;
server node01:443;
}
server {
listen 443 ssl;
server_name cluster.ru;
ssl_certificate /etc/nginx/certs/testcert_linux.crt;
ssl_certificate_key /etc/nginx/certs/testcert_linux.key;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://mycluster; #redirect to “https://mycluster”
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 2s; # fast fail detect
}
location /Centrifugo/ {
proxy_pass https://rx-centrifugo;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
© Компания Directum, 2024 |