Hiện tại tôi có ELB phục vụ cả http://www.example.org và https://www.example.org .
Tôi muốn thiết lập nó để mọi yêu cầu trỏ đến http://www.example.org đều được chuyển hướng đến https://www.example.org .
ELB gửi các yêu cầu https dưới dạng yêu cầu http, vì vậy sử dụng:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
sẽ không hoạt động vì các yêu cầu được gửi tới https://www.example.org vẫn sẽ được gửi đến cổng 80 trên nginx.
Tôi biết có thể viết lại thành
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
Nhưng tất cả mọi thứ tôi đã đọc đều nói rằng if
nên tránh bằng mọi giá trong cấu hình nginx và điều này sẽ dành cho mọi yêu cầu. Ngoài ra, điều đó có nghĩa là tôi phải thiết lập một cấu hình riêng biệt để kiểm tra sức khỏe ( như được mô tả ở đây : "Khi bạn đứng sau ELB, nơi ELB đóng vai trò là điểm cuối HTTPS và chỉ gửi lưu lượng HTTP đến máy chủ của bạn, bạn phá vỡ khả năng đáp ứng với phản hồi HTTP 200 OK để kiểm tra sức khỏe mà ELB cần ").
Tôi đang xem xét đưa thông tin đăng nhập vào mã của ứng dụng web thay vì cấu hình nginx (và vì mục đích của câu hỏi này, giả sử đó là ứng dụng dựa trên Django), nhưng tôi không chắc liệu đó có phải là chi phí cao hơn không các if
cấu hình trong.