Chuyển hướng tất cả lưu lượng HTTP sang HTTPS khi sử dụng Bộ cân bằng tải HTTP (S) trên Google Compute Engine


18

Tôi đã thiết lập Cân bằng tải HTTP / HTTPS trên Google Compute Engine với 2 Quy tắc chuyển tiếp toàn cầu (HTTP và HTTPS). Mỗi quy tắc trỏ đến một dịch vụ back-end với giao thức HTTP.

Tôi muốn tất cả các yêu cầu http://*để đi đến https://*.

Khi bộ cân bằng tải nói chuyện với các dịch vụ back-end qua HTTP, tôi không nghĩ rằng tôi có thể lấy nginx trên dịch vụ back-end để gửi lại a 301.

Tôi đã thử hàng tá các chỉnh sửa nhỏ trên google tính toán và tất cả đều kết thúc với việc tính toán google trở lại 502.

Tôi chắc chắn rằng ai đó đã thiết lập điều này trước đây. Bất kỳ lời khuyên hoặc con trỏ theo đúng hướng được nhiều đánh giá cao.


Chuyển hướng HTTP sang HTTPS (sử dụng SSL) hiện không được hỗ trợ thông qua bộ cân bằng tải HTTP / HTTPS. Chuyển hướng cần phải được cấu hình trên máy chủ web của bạn (apache, nginx, v.v.). Như đã nói, xin vui lòng gửi yêu cầu tính năng này cho trình theo dõi sự cố công khai của Compute Engine ( code.google.com/p/google-compute-engine/issues/list ).
Faizan

Cảm ơn bạn; đã mở một vấn đề: code.google.com/p/google-compute-engine/issues/ mẹo
Ryan Leckey

Ok hoàn hảo, tôi đã chuyển tiếp yêu cầu tính năng đến kỹ thuật.
Faizan

@Faizan - có một dòng thời gian khi tính năng này sẽ có sẵn? Đã khoảng 2 năm kể từ khi tính năng này được yêu cầu. Cách giải quyết là vụng về.
Talonx

Liên kết mới cho yêu cầu này làsuetracker.google.com/issues/35904733 (mặc dù liên kết cũ vẫn chuyển hướng).
Daniel Compton

Câu trả lời:


19

Chúng tôi có một thiết lập tương tự bằng cách sử dụng bộ cân bằng tải HTTP / HTTPS và chúng tôi đã quản lý để buộc HTTPS. Nó không thể trực tiếp từ bộ cân bằng tải nhưng bạn có thể thiết lập nó từ dịch vụ phụ trợ của mình. Bộ cân bằng tải Google Cloud sẽ đặt tiêu đề http X-Forwarded-Proto với giá trị http hoặc https. Bạn kiểm tra tiêu đề này trong dịch vụ phụ trợ của bạn (trong trường hợp của chúng tôi là Varnish nhưng điều này cũng có thể được thực hiện trong Nginx) và nếu giá trị là http thì bạn gửi lại 301.


8
Cảm ơn! Vì lợi ích của hậu thế: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }
Ryan Leckey

Bạn nên sử dụng 426tiêu đề nâng cấp HTTP thay vì 301. Đọc thêm: stackoverflow.com/questions/17873247/
mẹo

3
Tôi không đồng ý Vikram, bạn phải sử dụng 301 cho mục đích SEO. Nếu bạn trả lại mã gia đình 4xx, pagerank của bạn sẽ không chuyển từ các liên kết trỏ đến http cũ sang https. 301 là mã dự kiến, ít nhất là nếu bạn quan tâm đến SEO trên trang web của mình.
cyrrill

1
@VikramTiwari, câu trả lời của bài đăng thực sự nêu rõ: "Thậm chí không phải là về việc nâng cấp từ http: // lên https: // chút nào"
Rambatino

1

Tôi đã đối mặt với vấn đề này ngày hôm nay và đã có thể giải quyết nó bằng cách sử dụng cân bằng tải TCP. Nếu bạn không cần các tùy chọn cân bằng tải cụ thể HTTP / HTTPS, có lẽ bạn có thể sử dụng bộ cân bằng tải TCP (không có SSL) để nhận lưu lượng truy cập đến cả cổng 80 và 443. Đối với lưu lượng truy cập từ cổng 80, bạn có thể gửi lại 301.


1
Cân bằng tải tcp không được phép cho cổng 80 doc > TCP Proxy Cân bằng tải hỗ trợ các cổng sau: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222
Giovanni Toraldo
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.