在 nginx 中的服务器之间共享身份验证数据

在 nginx 中的服务器之间共享身份验证数据

我有一个使用端口 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;
  }

}

相关内容