我刚刚在我的网站上安装了 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/