Проброс TCP-трафика
Прокси-сервер Nginx в режиме проброса TCP-трафика выполняет проброс всего поступающего на него трафика. В этом режиме доступна сквозная аутентификация (NTLM, Kerberos). При этом для работы по HTTPS-протоколу не требуется устанавливать сертификат на сервер с Nginx.
ПРИМЕЧАНИЕ. Nginx при пробросе TCP-трафика не позволяет повторно использовать существующее соединение. В высоконагруженных системах это может увеличить длительность выполнения операции и нагрузку на сервер с Nginx. Как правило, на создание нового соединения тратится 10-30 мс. Например, для некоторых операций в веб-клиенте Directum RX может создаваться несколько таких соединений. Поэтому рекомендуется настроить проброс HTTP(S)-трафика.
Пример настройки Nginx в операционной системе Ubuntu:
1.В конфигурационном файле nginx.conf в начало добавьте строку:
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
2.Убедитесь, что модуль ngx_stream_core_module доступен. Для этого в командной строке выполните команду:
sudo nginx -V
В результате выполнения команды должен присутствовать параметр --with-stream=dynamic:
nginx version: nginx/1.16.1
built by gcc 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
built with OpenSSL 1.1.1 11 Sep 2018
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream=dynamic --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.16.1/debian/debuild-base/nginx-1.16.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
3.В конфигурационном файле nginx.conf в директиве stream укажите список веб-серверов, на которые происходит проброс трафика:
stream {
upstream <your_upstr_name> {
server <your_server 1>:<port>;
server <your_server 2>:<port>;
}
server {
listen <port>;
proxy_pass <your_upstr_name>;
}
}
Где:
•upstream – список веб-серверов;
•server – имя и порт веб-серверов в директиве upstream. При этом в server{...} задается конфигурация для виртуального сервера;
•listen – отслеживаемый адрес и порт или только порт. Адрес может быть именем хоста, например localhost:12345;
•proxy_pass – перенаправление трафика. В качестве значения указывается наименование, заданное выше в директиве upstream.
4.Для стабильной работы добавьте директиву hash, которая предотвращает соединение с разными веб-серверами в рамках одной сессии:
hash $remote_addr consistent; #used “Session persistence” with remote_addr
5.Укажите настройку, при которой конкретный сервер считается сбойным на заданный интервал времени, если возникло указанное число ошибок:
server <your_server 2>:<port> max_fails=3 fail_timeout=60s;
Где:
•server – имя и порт сервера;
•max_fails – максимально допустимое количество ошибок, при превышении которого сервер считается сбойным;
•fail_timeout – время, на которое сервер считается сбойным.
6.Для быстрого выявления проблем с сервером рекомендуется заполнить директиву proxy_connect_timeout:
proxy_connect_timeout 2s;
Значение директивы подбирается опытным путем, зависит от параметров и нагрузки в конкретной сети.
7.Для использования только протокола HTTPS настройте перенаправление с HTTP на HTTPS. Для этого в директиве http добавьте конструкцию:
http {
# redirect from http to https
server {
listen 80;
server_name <cluster.ru>; #domain name, example, yandex.ru
return 301 return 301 https://$server_name/$request_uri
}
}
Пример конфигурационного файла
В стандартный конфигурационный файл Nginx добавлены строки, которые следуют после комментария «redirect from http to https».
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
user nginx;
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;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
# redirect from http to https
server {
listen 80;
server_name cluster.ru;
return 301 https://$server_name$request_uri;
}
}
# use directive stream
stream {
# add Log format
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received"
$upstream_connect_time"';
# name Log file to access_log
access_log /var/log/nginx/access.stream.log proxy;
# add upstream directive and name “mycluster”
upstream mycluster {
hash $remote_addr consistent; #used “Session persistence” with remote_addr
server node-01:443 max_fails=3 fail_timeout=60s;
server node-02:443 max_fails=3 fail_timeout=60s;
}
server {
listen 443;
proxy_pass mycluster; #redirect to “mycluster”
proxy_connect_timeout 2s; # fast fail detect
}
}
© Компания Directum, 2024 |