У меня есть http-сервер, который использует порты 9200 и 9292 (для logstash).
Поскольку сервер не поддерживает аутентификацию, я хотел бы установить обратный прокси-сервер nginx для обработки аутентификации.
Это конфигурация, которую я использовал:
server {
listen 9292 default_server;
server_name proxy_host;
location / {
proxy_pass http://logstash_server:9292;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
server {
listen 9200 default_server;
server_name proxy_host;
location / {
proxy_pass http://logstash_server:9200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
и когда я иду в http://proxy_host:9292
, браузер запрашивает у меня аутентификацию, но когда я в какой-то момент перенаправляюсь на http://proxy_host:9200
, Мне нужно снова пройти аутентификацию.
Есть ли способ каким-либо образом разделить данные аутентификации между обоими прокси, чтобы аутентификация происходила только один раз?
Проблема с аутентификацией исходит не от Nginx, а от ваших браузеров. Веб-браузеры различают домен аутентификации, используя весь кортеж "[scheme]: // [domain]: [port]", поэтому не имеет значения, используют ли ваши серверы один и тот же сервер аутентификации, потому что ваш браузер будет запрашивать и сохранять учетные данные отдельно для каждого домен.
Единственная альтернатива, которую я могу придумать, - проксировать оба сервера приложений за одним и тем же серверным блоком Nginx и различать ваши запросы по URL-пути, например:
server {
listen 9200 default_server;
server_name proxy_host;
location /stash9292 {
proxy_pass http://logstash_server:9292;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location /stash9200 {
proxy_pass http://logstash_server:9200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location / {
proxy_pass http://logstash_server:9200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}