...
27. Настроить обратное проксирование.
Обратное проксирование можно настроить с помощью различных программных средств, с учетом предпочтений заказчика. В отдельной статье рассмотрим настройку рассмотрена настройка обратного проксирования через IIS.
В рамках данной статьи рассматривается наиболее предпочтительный вариант с использованьем NGINX в качестве обратного прокси.
Пример конфигурационных файлов для настройки обратного проксирования в NGINX (for Windows) Пример конфигурационного файла NGINX:
| Code Block | ||||
|---|---|---|---|---|
| ||||
#user nobody; worker_processes 1; #error_log# logs/error.log; #error_log logs/error.log notice;Расширенный лог для отладки #error_log logs/error.log info; #pidevents { logs/nginx.pid; events { worker_connections 1024worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_formatsendfile main '$remote_addr - $remote_user [$time_local] "$request" ' on; # client_max_body_size 20G; # КРИТИЧНО: Увеличиваем буферы для тяжелых Kerberos-тикетов '$status $bodylarge_client_bytesheader_sent "$http_referer" 'buffers 4 64k; #proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size '"$http_user_agent" "$http_x_forwarded_for"'; 256k; # #access_logПоддержка постоянных logs/access.logсоединений с main; браузером sendfilekeepalive_timeout 300s; keepalive_requests on1000; #tcp_nopush# 1. Настройка Upstream on; #keepalive_timeout 0; keepalive_timeout 65; с Keep-Alive (обязательно для Negotiate/NTLM) upstream vitros_backend { #gzip on; server {server 127.0.0.1:4615; listen 80 default_server; server_name vitro.example.ru;keepalive 64; } # Редирект с client_max_body_size 100000M; proxy_http_versionHTTP на HTTPS server { listen 80 default_server; listen 1.1; proxy_pass_request_headers on; proxy_pass_request_body on; proxy_buffer_size 1M;[::]:80 default_server; server_name dev-vs.vitro.dev; proxy_buffersif ( $host 4 1M; != "dev-vs.vitro.dev" ){ proxy_read_timeout 1hreturn 444; proxy_send_timeout 1h; } location / { return 301 https://$host$request_uri; } # Основной SSL сервер #proxying traffic to server { upstream application (Vitro.Server.Core.Web) listen 443 ssl default_server; proxy_pass http://127.0.0.1:4615; proxy_set_header X-Real-IP $remote_addr; proxy_set_header listen [::]:443 ssl default_server; server_name dev-vs.vitro.dev; ssl_certificate C:/nginx/conf/ssl/dev-vs.vitro.dev.crt; ssl_certificate_key C:/nginx/conf/ssl/dev-vs.vitro.dev.key; ssl_protocols TLSv1.2 TLSv1.3; # Оптимизация SSL для Windows ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; if ( $host != "dev-vs.vitro.dev" ){ return 444; } # Общие настройки проксирования для Windows Auth proxy_http_version 1.1; proxy_pass_request_headers on; proxy_pass_request_body on; proxy_read_timeout 1h; proxy_send_timeout 1h; location / { # 2. Используем upstream proxy_pass http://vitros_backend; # 3. КРИТИЧНО: Отключаем буферизацию для трансляции NTLM-рукопожатия proxy_buffering off; proxy_request_buffering off; # 4. Сбрасываем заголовок Connection для работы Keep-Alive до бэкенда proxy_set_header Connection ""; # 5. Проброс заголовков proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Для поддержки WebSockets proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; # Раскомментируйте, если нужны только сокеты } location /workflow/manager { X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_headerproxy_pass http://localhost:4616/workflow/manager; X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header HostConnection $host; } ""; location /workflow/manager { proxy_buffering off; proxy_set_pass http://localhost:4616/workflow/managerheader Host $host; } } } |




