2011-12-14 25 views
6

Tôi đang triển khai một ứng dụng trên Heroku và cố gắng xác định xem yêu cầu đến có an toàn không (request.secure). Điều này ban đầu trở lại sai trên heroku bởi vì nginx xử lý công việc SSL và giao tiếp trên http đồng bằng với máy chủ ứng dụng. Vì vậy, để cho vở kịch đọc các tiêu đề cho phép là biết đó là một yêu cầu an toàn nào để thêm:XForwardedSupport để chơi https! hỗ trợ trên Heroku không

XForwardedSupport = 127.0.0.1

Để application.conf theo khuyến cáo trong bảng tin chơi. Tuy nhiên, sau đó tất cả các yêu cầu (ngoại trừ hình ảnh) không có lỗi. Nó có vẻ là một cái gì đó cơ bản xảy ra trước khi nó chạm vào các bản ghi chơi. Có ai có kinh nghiệm này không?

+0

tôi giả sử vấn đề này là do cách Heroku quản lý định tuyến. Tạo một vé hỗ trợ, họ đang thực sự trả lời nhanh chóng và tôi thực sự hạnh phúc về cách họ giải quyết vấn đề. –

+0

Sẽ làm, tôi sẽ đăng lại ở đây với bất kỳ độ phân giải nào. –

Trả lời

6

Tôi không nghĩ Play hỗ trợ cách yêu cầu được chuyển tiếp (proxy) trên Heroku thông qua tham số cấu hình XForwardedSupport. Điều đó sẽ cần phải được đặt thành địa chỉ của cân bằng tải Heroku và không có cách nào để cấu hình thời gian chạy trước đó. Thay vào đó, bạn chỉ cần nhìn vào tiêu đề yêu cầu x-forwarded-proto để xác định xem yêu cầu đến cân bằng tải Heorku là qua http hoặc https. Có thể một cái gì đó như:

Boolean secure = false; 
    if (request.headers.get("x-forwarded-proto") != null) { 
     secure = request.headers.get("x-forwarded-proto").values.contains("https"); 
    } 
    System.out.println("secure = " + secure); 

BTW: Ngăn tuyết tùng của Heroku không sử dụng Nginx. Nó sử dụng MochiWeb, một máy chủ web dựa trên Erlang.

+0

Điều này chắc chắn có vẻ là vấn đề, như được xác nhận bởi một kỹ sư hỗ trợ heroku. Tôi lo lắng rằng nếu chơi không biết yêu cầu là an toàn thì nó sẽ làm những việc như thực hiện chuyển hướng trở lại url không ssl theo mặc định và các công cụ như thế. Dù sao đi nữa, tôi sẽ thử và xem điều gì khác đã xảy ra và báo cáo lại. Cảm ơn! –

+1

Cho đến nay rất tốt về giải pháp này! Đối với một số trình xử lý chú thích nhất định, tôi buộc phải chuyển hướng lên SSL để hành động không bao giờ có thể được xem qua http thông thường. Nếu bất cứ ai quan tâm tôi sẽ đăng một số mã về cách nó được thực hiện, chúng tôi tìm thấy nó thực sự hữu ích (nhiều hơn như vậy bây giờ mà sửa chữa này hoạt động cho heroku). –

+0

Tôi đã thêm một số suy nghĩ về việc làm điều này hữu ích hơn trong mã Playstream. Tôi muốn được nghe nhiều người hơn trong vé này: [Chơi lỗi # 1406] (https://play.lighthouseapp.com/projects/57987/tickets/1406-play-123-124-playmvcrouter-does-not -ly-support-proxied-ssl # ticket-1406-4) –

3

thnx lần lớn! bạn đã tiết kiệm hàng giờ đấu tranh với heroku + chơi! Tôi có thể khẳng định rằng khi bạn thiết lập này trong application.conf

XForwardedSupport=all 

Heroku ngừng phàn nàn với SIGTERM

Các vấn đề liên quan