khai máy chủ trong nginx.conf tôi:https chuyển hướng cho ứng dụng đường ray đằng sau proxy?
listen 1.2.3.4:443 ssl;
root /var/www/myapp/current/public;
ssl on;
ssl_certificate /etc/nginx-cert/server.crt;
ssl_certificate_key /etc/nginx-cert/server.key;
location/{
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://upstreamy;
break;
}
}
khai thượng nguồn trong nginx.conf:
upstream upstreamy {
server unix:/var/www//myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
này hoạt động tốt, myapp có thể truy cập như https://somehost
nhưng ứng dụng được tạo ra http url cho chuyển hướng, vì vậy ví dụ khi xác thực bằng phát minh,/được chuyển hướng đến http://somehost/user/sign_in thay vì https (từ quan điểm của ứng dụng đường ray, đó là tất cả http anyway).
tôi đã cố gắng
proxy_pass https://upstreamy;
nhưng đó chỉ là cố gắng để mã hóa giao thông giữa nginx và kỳ lân chạy ứng dụng đường ray.
Tôi cũng đã cố gắng, trong application_helper.rb:
# http://stackoverflow.com/questions/1662262/rails-redirect-with-https
def url_options
super
@_url_options.dup.tap do |options|
options[:protocol] = Rails.env.production? ? "https://" : "http://"
options.freeze
end
nhưng nó dường như không làm việc.
Làm cách nào để giải quyết vấn đề này?
Chỉnh sửa: vì vậy, mục tiêu không phải là làm cho ứng dụng đường ray yêu cầu ssl hoặc bị buộc phải sử dụng ssl; mục tiêu là làm cho ứng dụng đường ray tạo url https: // khi chuyển hướng ... (Tôi nghĩ rằng tất cả các url khác là tương đối).
Cảm ơn, mà làm việc một cách hoàn hảo! –
Tuyệt vời! Thiết lập nginx có thể rất đau đớn. Rất đau đớn ... :) –
Tôi không thể sử dụng proxy_set_header nhưng tôi chỉ chuyển tiếp mọi thứ tới proxy của mình cho phương thức "đăng" và viết lại url để nhận. Làm việc rất tốt cho đến nay. – nembleton