Proteção de senha NGINX para tudo, mas um único terminal

1

Eu tenho duas instâncias do EC2 na AWS. Estou usando o NGINX 1.6 para ambos. As duas instâncias estão conectadas a um balanceador de carga da AWS. Para que as instâncias sejam consideradas "em funcionamento", a carga balanceada envia uma solicitação HTTP para os dois servidores que esperam um resultado 200 (OK).

Agora, gostaria de proteger por senha o acesso à Web para ambas as instâncias. Para isso usei estes na configuração do NGINX:

 auth_basic "Restricted";
 auth_basic_user_file /var/www/mywebapp/public/.htpasswd

O problema é que não é possível informar a AWS sobre as credenciais e, assim que você ativar a proteção por senha, as duas instâncias serão consideradas quase que imediatamente outOfService e não serão mais abordadas.

Gostaria de definir um ponto de extremidade na configuração do NGINX, digamos /heartbeat que servirá um arquivo, digamos itsok.html na minha pasta pública, sem a necessidade de verificação de credencial, mantendo a proteção por senha para todos os outros endpoints do meu aplicativo da web.

até agora, todas as minhas tentativas falharam. Como faço para isso?

Aqui está o meu arquivo de configuração atual do NGINX:

# Default server configuration
#
server {

        # Useful logs for debug.
        access_log      /var/www/laravel/access.log;
        error_log       /var/www/laravel/error.log;
        rewrite_log     on;

        listen   80;
        server_name mywebapp.com;

        root "/var/www/mywebapp/public";
        index index.php index.html index.htm;

        location / {
            try_files $uri $uri/ /index.php?$query_string;
         }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;

        location = /50x.html {
              root /var/www/mywebapp/public;
        }

       auth_basic "Restricted";
        auth_basic_user_file /var/www/mywebapp/public/.htpasswd;

        # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }

    location ~ /\.ht {
        deny all;
    }
}
    
por JasonGenX 22.05.2016 / 02:17

1 resposta

0

Tente adicionar este local ou algo semelhante. Eu não tentei isso, mas parece bastante trivial. Tenha um arquivo no diretório especificado que o balanceador de carga solicita.

location /heartbeat {
  root /var/www/whatever/;
  auth_basic off;
}

Você pode definir alternadamente um único arquivo PHP que provavelmente seria mais útil, pois mostraria que a pilha inteira está ativa. Isso poderia ser algo assim, mas dependeria do arquivo PHP estar lá. Pode resultar em "sucesso" ou "falha" com base em acessar um banco de dados ou qualquer outra coisa que você queira fazer.

location = load-balancer-test.php {
  auth_basic off; # This is the only new bit
  try_files $uri =404;
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}

Se isso não funcionar, você deve jogar com ele, já que a idéia provavelmente está certa. Se tudo mais falhar no pós-acesso / logs de erros quando você tentar isso e descrever o comportamento.

    
por 22.05.2016 / 03:07

Tags