объявление сервера в моем 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;
}
}
декларация upstream в nginx.conf:
upstream upstreamy {
server unix:/var/www//myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
это отлично работает, myapp доступен как https://somehost
но приложение генерирует http-url для перенаправления, поэтому, например, при аутентификации с помощью dev/to перенаправляется на http://somehost/user/sign_in вместо https (с точки зрения приложения rails, все это все равно).
Я пробовал
proxy_pass https://upstreamy;
но он просто пытается зашифровать трафик между nginx и единорогами, которые запускают приложение rails.
Я также пробовал в application_helper.rb:
# http://stackoverflow.com/info/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
но, похоже, он не работает.
Как это решить?
Изменить: поэтому цель заключается не в том, чтобы приложение rails требовало ssl, либо для принудительного использования ssl; цель состоит в том, чтобы заставить rails app генерировать https://urls при перенаправлении... (я думаю, что все другие URL-адреса являются относительными).