deklaracja serwer w moim nginx.conf:Przekierowanie https dla aplikacji rails za 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;
}
}
upstream deklaracja w nginx.conf:
upstream upstreamy {
server unix:/var/www//myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
to działa prawidłowo, MojaApl jest osiągalny jako https://somehost
ale aplikacja generuje http adresy URL dla przekierowań, więc na przykład podczas uwierzytelniania za pomocą urządzenia devise,/jest przekierowywany na http://somehost/user/sign_in zamiast na https (z punktu widzenia aplikacji szyny, to wszystko jest w ogóle http).
Próbowałem
proxy_pass https://upstreamy;
ale właśnie próbuje szyfrowania ruchu między nginx i jednorożce uruchamianych aplikacji Rails.
Próbowałem też w 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
ale wydaje się nie działać.
Jak można to rozwiązać?
Edycja: celem nie jest, aby aplikacja szyny wymagała ssl, lub aby była zmuszona do korzystania z ssl; celem jest sprawienie, by aplikacja railsowa generowała adresy URL https: // przy przekierowywaniu ... (Myślę, że wszystkie inne adresy URL są względne).
Dzięki, że działa idealnie! –
Awesome! Konfiguracja nginx może być bardzo bolesna. Bardzo bolesne ... :) –
Nie mogłem uzyskać dostępu do proxy_set_header, ale właśnie przekazałem wszystko do mojego proxy dla metody "post" i przepisanie adresu URL dla get. Jak na razie działa bardzo dobrze. – nembleton