rails deploy app ruby-on-rails https nginx unicorn proxypass

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