Я развертываю балансировщик нагрузки с nginx, и у меня проблема с аутентификацией клиента.
Этот балансировщик нагрузки перенаправляет трафик на два веб-сервера Apache. Веб-серверы запрашивают сертификат клиента, когда пользователь должен пройти аутентификацию. Это делается правильно, когда мы подключаемся к веб-серверу напрямую: браузер запрашивает сертификат, и проверка выполняется. Но когда соединение выполняется через балансировщик нагрузки, браузер не запрашивает сертификат, и вход в систему не выполняется.
Это образец конфигурации nginx.
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
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;
server {
listen 443 ssl;
server_name xxxxxxxxx.yyy;
index index.html index.htm index.php;
ssl_certificate /etc/ssl/private/xxxxxxxxx.yyy.crt;
ssl_certificate_key /etc/ssl/private/xxxxxxxxx.yyy.key;
ssl_dhparam /etc/ssl/private/dhparams.pem;
ssl_protocols TLSv1.2;
add_header X-Frame-Options SAMEORIGIN;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
server_tokens off;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";
location / {
proxy_pass https://WebServersCluster;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
access_log /var/log/nginx/xxxxxxxxx_access.log;
error_log /var/log/nginx/xxxxxxxxx_error.log;
}
upstream WebServersCluster {
sticky expires=1h secure httponly;
server WebServer1:443;
server WebServer2:443;
keepalive 20;
}
}
Последние два дня я гуглил, но не нашел решения с похожей конфигурацией. У меня есть решение, настраивающее nginx как балансировщик нагрузки TCP (https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/). Это работает, но при этом теряется много информации журнала и параметров, повышающих безопасность движения и управляемость.
Может ли кто-нибудь подтвердить, есть ли какая-либо конфигурация, которая разрешает запрос с веб-сервера напрямую в браузер? Как будет настроен Nginx?
Спасибо за помощь и извините за мой английский.