Compartilhando dados de autenticação entre servidores no nginx

3

Eu tenho um servidor http que usa as portas 9200 e 9292 (para logstash).

Como o servidor não suporta autenticação, Gostaria de definir um proxy reverso nginx para lidar com a autenticação.

Esta é a configuração que usei:

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;

    }
}

e quando vou para http://proxy_host:9292 , o navegador pede autenticação, mas quando redirecionei em algum momento para http://proxy_host:9200 , preciso autenticar novamente.

Existe uma maneira de compartilhar de alguma forma os dados de autenticação entre os dois proxies, para que a autenticação aconteça apenas uma vez?

    
por lev 03.12.2013 / 19:36

1 resposta

1

O problema de autenticação não vem do Nginx, mas dos seus navegadores. Os navegadores da Web diferenciam o domínio de autenticação usando a tupla inteira "[scheme]: // [domain]: [port]", portanto, não importa se seus servidores compartilham o mesmo back-end de autenticação porque seu navegador perguntará e armazenará credenciais separadamente para cada domínio.

A única alternativa que posso imaginar é fazer proxy de ambos os servidores de aplicativos atrás do mesmo bloco de servidor Nginx e distinguir suas consultas por caminho de URL, por exemplo:

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;
  }

}
    
por 28.05.2014 / 13:55