首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails SSL问题:(https://example.com)与http://example.com)( request.base_url )不匹配

Rails SSL问题:(https://example.com)与http://example.com)( request.base_url )不匹配
EN

Stack Overflow用户
提问于 2017-12-02 21:21:24
回答 3查看 12.7K关注 0票数 18

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

代码语言:javascript
复制
(https://example.com) didn't match request.base_url (http://example.com)

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

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-20 08:58:24

只是遇到了同样的错误。在config/environments/production.rb中,确保已设置:

代码语言:javascript
复制
config.force_ssl = true

虽然严格来说与此问题无关,但在设置此设置之后,您需要确保您的反向代理(如果有)设置为通过将X-Forwarded-Proto标头从代理发送到rails来将所使用的协议转发到rails。完成此操作的方式取决于您使用的反向代理(Apache、nginx等)以及您如何配置它,因此最好查阅您正在使用的反向代理的特定文档。

票数 20
EN

Stack Overflow用户

发布于 2019-07-24 20:01:40

因为rails应用服务器运行在启用了SSL的webserver之后。但是应用服务器并不知道这一点,并继续使用HTTP协议。基于此,request.base_url提供了HTTP URL。

要让应用服务器知道SSL已启用并使用了https协议,您需要显式地告诉应用服务器。

在Nginx web服务器中,我使用了,

代码语言:javascript
复制
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Ssl on;

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

我认为使用config.force_ssl = true可以解决问题,但不能很好地解决问题,因为这个配置将所有的HTTP请求都更改为HTTPS。意味着如果有人使用HTTP请求,它将重定向到HTTPS。在你向客户端发送URL的情况下,config.force_ssl = true将不起作用。

票数 19
EN

Stack Overflow用户

发布于 2018-12-12 19:37:10

我在使用Cloudflare的灵活SSL时遇到了类似的问题。我将其更改为Full,并在我的Heroku服务器上激活了SSL。

在这里找到了解决方案:http://til.obiefernandez.com/posts/875a2a69af-cloudflare-flexible-ssl-mode-breaks-rails-5-csrf

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47608336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档