如何避免使用nginx配置进行AWS ELB健康检查的基本身份验证

vhmi4jdf  于 2023-05-28  发布在  Nginx
关注(0)|答案(2)|浏览(198)

我在尝试为ELB运行状况检查实现基本身份验证时遇到问题。我已经搜索了相当多的nginx文件配置,以避免下面显示的401错误,ELB由于基本身份验证而返回
unhealthy in target-group hogehoge due to (reason Health checks failed with these codes: [401])
我已经尝试修改nginx.conf来避免它,但它不起作用。下面的代码给出了[emerg] "server" directive is not allowed here错误。

http {
    server {
        location / {
            if (!$http_x_forwarded_for) {
                auth_basic           'Please enter ID and password';
                auth_basic_user_file /usr/src/redmine/.htpasswd;
            }
        }
    }
}

如何避免由于基本身份验证而导致的ELB运行状况检查401错误?
谢谢你的帮助

ctzwtxfj

ctzwtxfj1#

最简单的方法是为ELB创建一个位置,例如:

location /elb-status {
  access_log off;
  return 200;
}

您只需要将Ping Path更改为/elb-status
如果你想在测试时在浏览器上看到一些东西,你可能需要更改content-type,因为默认值为application/octet-stream,浏览器将提供保存文件,所以类似这样的东西应该可以工作:

location /elb-status {
   access_log off;
   return 200 'your text goes here';
   add_header Content-Type text/plain;
}

如果你想检查user-agent,可以使用如下方法:

set $block 1;

# Allow all the ELB health check agents.
if ($http_user_agent ~* '^ELB-HealthChecker\/.*$') {
    set $block 0;
}
if (!$http_x_forwarded_for) {
    set $block 1
}

if ($block = 1) {
    auth_basic           'Please enter ID and password';
    auth_basic_user_file /usr/src/redmine/.htpasswd;
}
1wnzp6jl

1wnzp6jl2#

为什么不使用401状态代码作为您的成功健康检查??
这意味着您的服务正在请求基本的认证...换句话说,服务是可用的。
ELB允许您指定预期的https状态代码。“高级运行状况检查设置”

相关问题