ruby-on-rails - Rails SSL 问题 : (https://example. com) 与 request.base_url (http ://example. com) 不匹配

标签 ruby-on-rails ruby ssl

我刚刚在我的网站上安装了 SSL 证书。不幸的是,它破坏了登录功能。在网站上提交登录表单后,它只是重定向到主页。检查 Rails 日志显示此错误:

(https://example.com) didn't match request.base_url (http://example.com)

这是我的虚拟主机文件。我想我需要以某种方式强制使用 SSL?

<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com
   Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
   ServerAdmin hello@example.com
   ServerName example.com
   ServerAlias www.example.com
   SSLEngine on
   SSLCertificateFile /home/user/sharetribe/lib/certificates/www_example_com.crt
   SSLCertificateKeyFile /home/user/sharetribe/lib/certificates/example.com.key
   SSLCertificateChainFile /home/user/sharetribe/lib/certificates/www_example_com.ca-bundle

   ProxyRequests Off
   <Proxy *>
      Order deny,allow
      Allow from all
   </Proxy>
   ProxyPass / http://localhost:3000/
   ProxyPassReverse / http://localhost:3000/
</VirtualHost>

最佳答案

因为 Rails 应用程序服务器在启用 SSL 的网络服务器后面运行。但是应用服务器并不知道它并继续使用 HTTP 协议(protocol)。由于 request.base_url 给出了 HTTP URL。

要让应用服务器知道SSL已启用并使用https协议(protocol),您需要明确告诉应用服务器。

在Nginx web服务器上,我用过,

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;

对于 Apache 网络服务器,需要找到类似的设置。

我认为使用 config.force_ssl = true 可以解决一个问题,但不能正确解决此配置,将所有 HTTP 请求更改为 HTTPS。意味着如果有人使用 HTTP 请求,它将重定向到 HTTPS。 config.force_ssl = true 如果您将 URL 发送到客户端,则 API 将不起作用。

关于ruby-on-rails - Rails SSL 问题 : (https://example. com) 与 request.base_url (http ://example. com) 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47608336/

相关文章:

ssl - ffmpeg 错误 SSL 例程 :ssl3_write_pending:bad write retry

ruby-on-rails - Ruby on Rails - 区分 REST API 中的复数资源与单数资源

javascript - 如何将复选框列表的选定项绑定(bind)到 Ruby on Rails 中下拉列表中的选定项?

ruby-on-rails - 在 class_eval block 或 instance_eval block 中定义的 Rails 作用域?

ssl - Spring 启动HTTPS-TLS

c# - 在 HTTPS 情况下,未使用 HTTP.SYS 正确配置服务器证书

ruby-on-rails - Rails迁移: how to retrieve current migration version?

javascript - 防止 Rails 应用程序中 Bootstrap 4 javascript 滚动 spy 的默认行为

ruby-on-rails - Rails 多对多创建 Controller

ruby-on-rails - Rails 内存泄漏 : controller class holding a reference to instance