dichiarazione del server nel mio nginx.conf:https reindirizza per l'applicazione di rotaie dietro il 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;
}
}
dichiarazione a monte nginx.conf:
upstream upstreamy {
server unix:/var/www//myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
questo funziona bene, MiaApp è raggiungibile come https://somehost
ma l'applicazione sta generando http url per i reindirizzamenti, quindi ad esempio quando si autentica con devise, il/viene reindirizzato a http://somehost/user/sign_in invece di https (dal punto di vista dell'app rails, è tutto http comunque).
ho cercato
proxy_pass https://upstreamy;
ma che semplicemente cerca di cifrare il traffico tra nginx e gli unicorni che corrono l'applicazione rotaie.
Ho anche provato, in 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
ma sembra non funzionare.
Come si può risolvere questo?
Modifica: così, l'obiettivo non è rendere l'app per rails richiedere ssl, o essere obbligata a usare ssl; l'obiettivo è rendere l'app per i binari generare https: // url quando si reindirizza ... (penso che tutti gli altri URL siano relativi).
Grazie, che funziona perfettamente! –
Fantastico! Impostare nginx può essere molto doloroso. Molto doloroso ... :) –
Non sono riuscito a utilizzare proxy_set_header ma ho appena inoltrato tutto al mio proxy per il metodo "post" e riscrivo l'url per ottenere. Funzionando molto bene finora. – nembleton