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

时间:2017-09-30 06:41:57

标签: amazon-web-services nginx passenger amazon-elb

我在尝试为ELB healthcheck实施基本身份验证时遇到了麻烦。 我已经搜索了很多,以找出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 healthcheck的401错误?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

最简单的方法是为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;
}

如果您想检查用户代理,可以使用以下内容:

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