ruby-on-rails - deploy - puma production config rails
¿Redireccionamiento de https para la aplicación de rieles detrás de proxy? (2)
Necesitas añadir la siguiente línea:
proxy_set_header X-Forwarded-Proto https;
como en
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://upstreamy;
break;
}
}
declaración del servidor en mi 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;
}
}
Declaración ascendente en nginx.conf:
upstream upstreamy {
server unix:/var/www//myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
esto funciona bien, se puede acceder a myapp como https: // somehost
pero la aplicación está generando direcciones URL de http para las redirecciones, por ejemplo, cuando se autentica con un dispositivo, la / se redirige a http://somehost/user/sign_in lugar de https (desde el punto de vista de la aplicación de rieles, de todos modos es http).
Lo intenté
proxy_pass https://upstreamy;
pero eso solo intenta cifrar el tráfico entre nginx y los unicornios que ejecutan la aplicación rails.
También probé, en 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
Pero parece que no funciona.
¿Cómo uno resolvería esto?
Edición: por lo tanto, el objetivo no es hacer que la aplicación rails requiera ssl, o que sea forzada a usar ssl; el objetivo es hacer que la aplicación Rails genere https: // urls al redireccionar ... (creo que todas las otras urls son relativas).
Puede pasar :protocol => "https"
, para redirigir a.
Puede establecer esto como predeterminado agregando lo siguiente a application.rb
Rails.application.routes.default_url_options[:protocol]= ''https''
Referencia: https://.com/a/6101147/446203