Giải pháp Nginx cho AWS Amazon ELB Health Checks - trả lại 200 mà không cần IF


22

Tôi có đoạn mã sau đang hoạt động trên Nginx để giữ cho kiểm tra sức khỏe AWS ELB hạnh phúc.

map $http_user_agent $ignore {
  default 0;
  "ELB-HealthChecker/1.0" 1;
}

server {
  location / {
    if ($ignore) {
      access_log off;
      return 200;
    }
  }
}

Tôi biết 'IF' tốt nhất nên tránh với Nginx và tôi muốn hỏi liệu có ai đó biết cách mã hóa lại cái này mà không có 'nếu' không?

cảm ơn bạn

Câu trả lời:


62

Đừng quá phức tạp. Chỉ cần kiểm tra sức khỏe ELB của bạn vào một URL đặc biệt chỉ dành cho họ.

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

cảm ơn bạn đã trả lời ... bạn có thể giải thích thêm một chút ... hiện đang trong kiểm tra sức khỏe ELB tôi đang chỉ nó tại /index.html. Bạn có nghĩa là chỉ điểm kiểm tra sức khỏe ở trạng thái '/ elb' và thêm khối máy chủ ở trên? là nó? url / elb-status cần tồn tại? một lần nữa
Adam

hoạt động hoàn hảo khi tôi đặt / trạng thái elb trong ELB và thêm khối máy chủ ở trên - thankyou rất nhiều !!! đánh giá rất cao
Adam

Rất vui vì tôi có thể giúp!
ceejayoz

1
Hmm, tôi đang gettling "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... bất kỳ ý tưởng tại sao điều này có thể được?
Thác nước Michael

1
Giải pháp gọn gàng. 😙
phegde

27

Chỉ cần cải thiện câu trả lời trên, đó là chính xác. Những công việc sau đây tuyệt vời:

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

5

Cập nhật: Nếu xác nhận tác nhân người dùng là cần thiết,

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.