我有以下在 Nginx 上运行的代码,以确保 AWS ELB 健康检查顺利进行。
map $http_user_agent $ignore {
default 0;
"ELB-HealthChecker/1.0" 1;
}
server {
location / {
if ($ignore) {
access_log off;
return 200;
}
}
}
我知道使用 Nginx 时最好避免使用“IF”,我想问一下是否有人知道如何在没有“if”的情况下重新编码?
谢谢
答案1
不要把事情搞得太复杂。只需将您的 ELB 健康检查指向一个专门为它们而设的特殊 URL 即可。
server {
location /elb-status {
access_log off;
return 200;
}
}
答案2
只是为了改进上面的答案,这是正确的。以下方法效果很好:
location /elb-status {
access_log off;
return 200 'A-OK!';
# because default content-type is application/octet-stream,
# browser will offer to "save the file"...
# the next line allows you to see it in the browser so you can test
add_header Content-Type text/plain;
}
答案3
更新:如果需要用户代理验证,
set $block 1;
# Allow only the *.example.com hosts.
if ($host ~* '^[a-z0-9]*\.example\.com$') {
set $block 0;
}
# Allow all the ELB health check agents.
if ($http_user_agent ~* '^ELB-HealthChecker\/.*$') {
set $block 0;
}
if ($block = 1) { # block invalid requests
return 444;
}
# Health check url
location /health {
return 200 'OK';
add_header Content-Type text/plain;
}