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