我有一个使用端口 9200 和 9292(用于 logstash)的 http 服务器。
由于服务器不支持身份验证,我想设置一个 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
,我需要再次进行身份验证。
有没有办法以某种方式在两个代理之间共享身份验证数据,以便身份验证只发生一次?
答案1
身份验证问题不是来自 Nginx,而是来自您的浏览器。Web 浏览器使用整个元组“[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;
}
}