Tôi nên định cấu hình kiểm tra sức khỏe ELB của mình như thế nào khi sử dụng NameVirtualhost và chuyển hướng đến www?


8

ELB của tôi liên tục đưa các trường hợp của tôi ra khỏi dịch vụ, vì kiểm tra sức khỏe HTTP không thành công.

Chúng tôi có ký tự đại diện DNS và chuyển hướng mọi thứ đến www:

vhost.conf:

ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Điều này hoạt động tốt đối với các trình duyệt thực tế, nhưng kiểm tra sức khỏe HTTP đến / thất bại, có lẽ là do nó nhận được 302.

Là tùy chọn tốt nhất để sử dụng kiểm tra sức khỏe TCP, hay có cách nào để HTTP hoạt động?


Chỉ cần sử dụng kiểm tra sức khỏe TCP cho đến khi AWS cho phép tùy chỉnh tiêu đề máy chủ được gửi để kiểm tra sức khỏe. Ngay cả với một mục mặc định trên máy chủ web của bạn, bạn không thực sự kiểm tra sức khỏe của ứng dụng, chỉ có máy chủ web của bạn giống như kiểm tra xem cổng tcp có mở không.
Pykler

Câu trả lời:


11

Câu hỏi này đã được hỏi trên các diễn đàn AWS và câu trả lời là thiết lập một vhost mặc định xử lý lưu lượng trên địa chỉ IP trống và không thực hiện bất kỳ chuyển hướng nào. Điều này có nghĩa là người dùng bình thường đánh vào địa chỉ IP của bạn cũng sẽ không được chuyển hướng.

Ngoài ra, bạn có thể chỉ định phần đường dẫn của URL mà bạn muốn ELB yêu cầu và bỏ qua đường dẫn đó bằng cách thêm một RewriteCond khác:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Người dùng bình thường nhấn URL đó sẽ không được chuyển hướng.

Bạn cũng có thể sử dụng kỹ thuật tương tự để phát hiện Tác nhân người dùng của ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Người dùng bình thường giả mạo Tác nhân người dùng của họ sẽ không được chuyển hướng.

Hoặc địa chỉ IP nội bộ của ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Để tùy chọn này hoạt động, bạn sẽ yêu cầu mod_rpaf(đối với Apache 2.2) hoặc mod_remoteip(đối với Apache 2.4) để sửa đổi REMOTE_ADDRbiến để chứa phần chính xác của nội dung của X-Forwarded-Fortiêu đề. Miễn là bạn thiết lập chính xác, người dùng bình thường không thể tránh phản hồi chuyển hướng.


Vấn đề với việc thiết lập một vhost mặc định là địa chỉ IP sẽ thay đổi mỗi khi một phiên bản mới được tạo ra hoặc khởi động lại, và tôi muốn AMI mặc định của mình bao gồm hỗ trợ kiểm tra sức khỏe. Tôi sẽ xem xét các lựa chọn khác.
chris

Kiểm tra địa chỉ IP tôi chỉ bao gồm kiểm tra xem địa chỉ IP bắt đầu bằng 10.. Phần còn lại của các địa chỉ IP có thể thay đổi bao nhiêu tùy ý và chúng vẫn sẽ được khớp. Phạm vi 10.*.*.*(hoặc 10.0.0.0/8) của các địa chỉ IP không thể định tuyến qua internet.
Ladadadada

Tôi đã sử dụng IP từ xa để đăng nhập địa chỉ IP của người yêu cầu (trái ngược với IP ELB) để tùy chọn thứ 3 hoạt động - cảm ơn!
chris

0

Thêm máy chủ ảo không phải là một ý tưởng hay, vì người ta phải khởi động lại dịch vụ httpd cho máy chủ ảo để được phản ánh. Có một cách khác để làm điều này

  1. Bỏ qua đường dẫn Kiểm tra sức khỏe ELB trong tệp .htaccess
    tách biệt tất cả bốn phần của tên dns như sau
    elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
  2. Đối với tất cả các url còn lại có quy tắc viết lại nội bộ
    thư mục_scr struct: code_folder / website

    RewriteEngine On
    RewriteCond% {HTTP_HOST}! $ [NC]
    RewriteCond% {REQUEST_URI}! ^ / Index.php $
    RewriteRule ^ (. *) $ / $ 1 [L, QSA]

Điều này làm việc rất tốt cho tôi. Xin đề nghị nếu có phương pháp tốt hơn chúc mừng!

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.