gpt4 book ai didi

ssl - 如何确保将 HTTPS 根域请求重定向到 Heroku 的 www

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:15 24 4
gpt4 key购买 nike

我正在为我的 Rails 4.2 项目使用 Heroku 的通配符证书,该项目为用户的帐户提供子域。它几乎可以完美运行,但还有一些问题需要解决。

如果我输入 http://example.com在浏览器中,它被重定向到 https://www.example.com并解决得很好。

但是 如果我输入 https://example.com我在浏览器中得到以下内容

Unable to connect. Firefox can't establish a connection to the server at mydomain.com. The site could be temporarily unavailable or too busy. Try again in a few moments....

这些是我的 DNS 设置

@ ----> http://www.example.com URL-REDIRECT(这是故意的——Heroku 不能使用带 SSL 的裸域)

www ----> blahblah-1234.herokussl.com CNAME

子域

* ----> blahblah-1234.herokussl.com。别名

除了上面提到的 DNS“url-redirect”之外,我还配置了 rails 来重写根域请求。 (虽然我认为请求甚至没有达到要求)

我创建了一个中间件来将请求“example.com”重写为“www.example.com”并将其插入之前 ActionDispatch::SSL

class RootToWWW
def initialize(app)
@app = app
end

def call(env)
request = Rack::Request.new(env)
if request.host.starts_with?('myexample.com')
[301, {"Location" => request.url.sub("//", "//www.")}, self]
else
@app.call(env)
end
end

def each(&block)
end
end


# in production.rb
config.middleware.insert_before 'ActionDispatch::SSL', 'RootToWWW'

谁能解释我如何确保对根域的 https 请求被重定向到 www?

最佳答案

Firefox can't establish a connection

这意味着它无法与服务器 example.com 上的端口 443 建立 TCP 连接。为 example.com 提供的 IP 地址上没有为此域运行的 SSL 服务器,或者防火墙阻止了连接。

These are my DNS settings

@ ----> http://www.example.com URL-REDIRECT (This is intentional - Heroku cant use naked domains with SSL)

URL 重定向实际上不是 DNS 的东西,但它需要在 example.com 有一个 Web 服务器,然后将 HTTP 重定向到 www.example.com。根据您关于 Heroku 无法在裸域上处理 SSL 的评论,我建议,example.comwww.example.com 是不同的 Web 服务器,并且在不同的 IP 地址。在这种情况下,您将无法对裸域使用 SSL,因为裸域上​​的网络服务器根本不执行 SSL,即它不在端口 443 上监听连接,因此您会得到“Firefox 无法建立一个联系”。如果您不能在裸域上使用 SSL,您也不能对 https 进行重定向,因为此重定向首先需要建立 SSL 连接。

关于ssl - 如何确保将 HTTPS 根域请求重定向到 Heroku 的 www,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com