NGINX 密码保护一切,但只有一个端点

NGINX 密码保护一切,但只有一个端点

我在 AWS 上有两个 EC2 实例。我对这两个实例都使用了 NGINX 1.6。这两个实例连接到 AWS 负载均衡器。为了使实例被视为“已启动并正在运行”,负载均衡器会向两个服务器发送 HTTP 请求,期望得到 200 结果(OK)。

现在,我想用密码保护这两个实例的 Web 访问。为此,我在 NGINX 配置中使用了以下内容:

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

问题是没有办法告诉 AWS 凭证,并且一旦您启用密码保护,这两个实例几乎都会立即被考虑outOfService并且不再被解决。

我想在 NGINX 配置中定义一个端点,比如说/heartbeat它将提供一个文件,比如说itsok.html我的公共文件夹中的文件,而不需要进行凭证检查,同时保留我的 Web 应用程序的所有其他端点的密码保护。

到目前为止,我的所有尝试都失败了。我该如何实现呢?

这是我当前的 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;
    }
}

答案1

尝试添加此位置或类似内容。我还没有尝试过,但似乎很简单。在负载均衡器请求的指定目录中有一个文件。

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

您也可以定义一个 PHP 文件,这可能更有用,因为它会显示整个堆栈已启动。这可能是类似这样的,但它依赖于该 PHP 文件的存在。它可以根据访问数据库或您想要执行的任何其他操作输出“成功”或“失败”。

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

如果不起作用,你应该尝试一下,因为这个想法可能是正确的。如果所有其他方法都失败了,请在尝试时发布访问/错误日志并描述行为。

相关内容