Viết lại URL HAProxy trên lỗi 404


9

Làm cách nào để tạo lại HAProxy thành một back-end khác khi cái đầu tiên bị thiếu tập tin? Những gì tôi cần là errorlocnhưng thực hiện viết lại thay vì chuyển hướng, vì vậy khách hàng không nhận thức được chuyển hướng.

Chúng tôi đã phát triển một ứng dụng với NginX, cả hai đều cân bằng tải ngược proxy và máy chủ web cho các tệp tĩnh. Ứng dụng dựa trên khung Opa yêu cầu các phiên dính dựa trên cookie - được hỗ trợ bởi cả NginX và HAproxy. Tính năng ứng dụng chúng tôi gặp vấn đề là tạo nội dung động. Nó tạo ra hình ảnh theo yêu cầu, nhưng sau khi tạo nó được lưu trên đĩa và có thể được truy cập tĩnh với đường dẫn xác định.

Vấn đề đã được giải quyết dễ dàng với NginX - nó cố gắng đọc tệp cục bộ và chỉ sử dụng back-end cân bằng tải nếu tệp bị thiếu (chưa được tạo):

server {
  server_name wkaliszu.pl;
  location /thumb {
    root /path_on_disk/to_cached_content;
    expires 7d;
    # try to access already generated content
    try_files $uri @wkaliszu;
  }
  location / {
    # reverse proxy to the application
    [...]
  }
  location @wkaliszu {
    # reverse proxy to the application
    [...]
  }
}

Máy chủ đã được di chuyển và hiện sử dụng HAPproxy để cân bằng tải, đây không phải là máy chủ web và không hỗ trợ tính năng này. Bây giờ việc tạo phần mềm động được thực hiện mỗi khi khách hàng cố gắng truy cập tài nguyên, việc này chậm hơn nhiều và lãng phí tài nguyên. Sẽ ổn nếu nó có thể sử dụng back-end tiếp theo nếu lần đầu tiên (máy chủ web bộ nhớ đệm đơn giản cho các tệp tĩnh) không thành công với lỗi 404, nhưng tôi không thể tìm ra cách thực hiện đơn giản. Chuyển hướng /thumbđến NginX, cố gắng đọc tệp tĩnh và viết lại thành HAproxy với tiêu đề HTTP mới chỉ xuất hiện trong đầu tôi, nhưng tôi muốn tìm thứ gì đó tốt hơn.


Ngăn xếp ứng dụng nào bạn sử dụng máy chủ ứng dụng phụ trợ?
jeffatrackaid

Câu trả lời:


1

Các phụ trợ của HAProxy là lên hoặc xuống (hoặc đang trên đường lên / xuống).

Có nhiều cách khác nhau để kiểm tra sức khỏe của phụ trợ nhưng tôi không biết bất kỳ cách nào cung cấp theo dõi dựa trên mỗi yêu cầu. Khi một yêu cầu không thành công, phần phụ trợ đó sẽ được đánh dấu là xuống hoặc sẽ bị lỗi (trên đường được xem xét xuống).

Đây là logic rất khác so với thiết lập Nginx của bạn, đó là định tuyến các yêu cầu trên cơ sở mỗi yêu cầu.

Tôi thấy một vài lựa chọn ở đây:

  • Nginx là Proxy lưu trữ
  • Sử dụng máy chủ ứng dụng cho nội dung tĩnh
  • Sử dụng CDN

Proxy lưu trữ

Trong HAProxy, bạn sẽ sử dụng ACL để định tuyến các yêu cầu nội dung tĩnh đến một phụ trợ cụ thể. Các nút phụ trợ này sẽ chạy nginx bằng proxy lưu trữ. Nếu nginx có tập tin lưu trữ, nó sẽ chỉ phục vụ nó. Nếu không, nó sẽ gọi phụ trợ của bạn.

Sử dụng máy chủ ứng dụng cho nội dung tĩnh

Nếu máy chủ ứng dụng của bạn hoạt động hiệu quả trong việc phục vụ nội dung tĩnh, bạn có thể không cần phải phân tách yêu cầu trong haproxy. Chỉ cần gửi tất cả yêu cầu đến phụ trợ ứng dụng của bạn. Xây dựng logic vào chúng để phục vụ nội dung tĩnh nếu có và nếu không gửi yêu cầu đến phụ trợ.

Tùy chọn CDN

Nếu bạn có thể sử dụng một miền dành riêng cho nội dung tĩnh, bạn có thể sử dụng CDN. Tại CDN, bạn chỉ cần trỏ URL nguồn tới các nút ứng dụng của bạn. Sau đó, bạn có thể kiểm soát bộ đệm ẩn ở cấp độ CDN. Điều này tương tự với bộ nhớ đệm Nginx ở trên ngoại trừ nhà cung cấp CDN đang xử lý nó cho bạn.

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.