перенаправление https для приложения rails за прокси?

объявление сервера в моем 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

, но приложение генерирует URL-адрес http для перенаправления, поэтому, например, при аутентификации с помощью devise / перенаправляется на http ://somehost/user/sign _в вместо https (с точки зрения приложения rails, все равно это http ).

Я пытался

proxy_pass https://upstreamy;

, но это просто попытка зашифровать трафик между nginx и единорогами, которые запускают приложение rails.

Я также пробовал в приложении _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

, но, похоже, это не сработало.

Как решить эту проблему?

Изменить :Таким образом, цель состоит не в том, чтобы заставить приложение rails требовать ssl или заставить использовать ssl; цель состоит в том, чтобы заставить приложение rails генерировать https :// URL-адреса при перенаправлении... (Я думаю, что все остальные URL-адреса являются относительными ).

20
задан Ace Suares user1266770 3 May 2012 в 13:43
поделиться