私のnginx.confのサーバー宣言:
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;
}
}
nginx.conf のアップストリーム宣言:
upstream upstreamy {
server unix:/var/www//myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
これは正常に動作し、myapp はhttps://somehostとして到達可能です
ただし、アプリはリダイレクト用の http url を生成しているため、たとえば、devise で認証する場合、/ はhttps ではなくhttp://somehost/user/sign_inにリダイレクトされます (Rails アプリの観点からは、とにかくすべて http です)。
私は試した
proxy_pass https://upstreamy;
しかし、これは nginx と Rails アプリを実行するユニコーンの間のトラフィックを暗号化しようとするだけです。
また、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
しかし、うまくいかないようです。
これをどのように解決しますか?
編集:したがって、目標は、レールアプリにsslを要求させたり、強制的にsslを使用させたりすることではありません。目標は、リダイレクト時に Rails アプリが https:// URL を生成するようにすることです... (他のすべての URL は相対的だと思います)。