9

Tôi có bộ cân bằng tải đàn hồi của ELB được cấu hình để tải các yêu cầu của người dùng cuối trên HTTPS, trên backend tôi có ứng dụng đang chạy trên máy chủ Tomcat được cấu hình trên HTTP.Vấn đề với chuyển hướng HTTPS sang HTTP bằng trình cân bằng tải đàn hồi tới máy chủ Tomcat

Vì vậy, khi người dùng cuối của tôi yêu cầu ứng dụng yêu cầu trên HTTPS, vì họ truy cập ELB, giờ đây, ELB chuyển hướng nội bộ trên HTTP tới máy chủ tomcat. Trong tomcat, ứng dụng của tôi được bảo vệ thông qua Spring Security và nếu yêu cầu là tài nguyên được bảo vệ và người dùng không đăng nhập vào người dùng được chuyển hướng đến trang đăng nhập được cấu hình. Bây giờ, chuyển hướng này cho người dùng cuối sẽ qua HTTP, vì máy chủ tomcat đã nhận được yêu cầu ban đầu từ ELB dưới dạng HTTP. Điều này bây giờ sẽ dẫn đến 404 vì tôi chưa định cấu hình cho lưu lượng truy cập nội bộ trên HTTP.

Làm cách nào để chúng tôi giải quyết vấn đề này? Là lựa chọn duy nhất để có HTTPS cả trên enduser-ELB và từ ELB-tomcat hoặc am i thiếu một số điều ở đây?

Trả lời

9

ELB đặt tiêu đề X-Forwarded-Proto cho phép bạn cho biết giao thức nào khách hàng đã sử dụng để kết nối với trình cân bằng tải của bạn. Xem documentation.

Bạn có thể định cấu hình bảo mật mùa xuân để xem tiêu đề này, xem this answer chẳng hạn.

+1

Cảm ơn bạn rất nhiều .. Đã giải quyết được sự cố của tôi .. –

0

Tôi đã có một thời gian khó khăn để tìm kiếm điều này trên mạng và cuối cùng tôi tìm thấy một cách để làm điều đó.

Vấn đề là ngay khi http được chuyển hướng đến cổng https trên ELB nội bộ, nó được sử dụng để chuyển hướng trở lại cổng 80, do đó tạo vòng lặp. Điều này xảy ra vì ELB tắt SSL và sau đó kết nối lại cổng 80.

Cuối cùng sau khi một số nghiên cứu tôi có quy tắc viết lại chính xác để quản lý X-Forwarded-Proto theo cách mà ngay cả khi ELB giảm tải xuống SSL tomcat thì yêu cầu xuất xứ đã sử dụng SSL.

Điều này được thực hiện bằng cách sử dụng Van Tomcat trên Tomcat 8. Chắc chắn rằng nó có thể được thực hiện trên các phiên bản trước đó. Tôi đã bật quy tắc viết lại trên Tomcat bằng cách sử dụng van. Sau đó, nó đơn giản như viết các quy tắc chuyển hướng trên Apache.

Sau đây là các bước sau:

Bước 1:

a. Mở context.xml trong thư mục conf tomcat b. Dán dòng sau ngay bên dưới

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> 

Lưu ý: Điều này sẽ cho phép van trên toàn cầu. Trong trường hợp này cần phải được kích hoạt cho máy chủ cụ thể sau đó nó phải được dán bên trong của server.xml cho rằng tên miền cụ thể

Bước 2:

a. Mở conf/server.xml b. Paste dòng lệnh sau ngay trên </Host>

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> 

Bước 3:

a. Mở thư mục chứa tệp web.xml. Ví dụ: nếu ứng dụng được lưu trữ trong ROOT thì web.xml sẽ nằm trong webapps/ROOT/WEB-INF

b. Tương tự, nếu ứng dụng được lưu trữ trong webapps/myappfolder thì web.xml sẽ nằm trong webapps/myappfolder/WEB-INF

c. Trong thư mục WEB-INF Tạo một tệp mới rewrite.config. và dán quy tắc ghi lại sau đây:

RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 
Các vấn đề liên quan