如何确保将 HTTPS 根域请求重定向到 Heroku 的 www
How to ensure HTTPS root domain requests are redirected to www for Heroku
我正在为我的 Rails 4.2 项目使用 Heroku 的通配符证书,该项目为用户的帐户提供子域。我几乎可以完美地使用它,但还有一些问题需要解决。
如果我输入 http://example.com in the brower, it get's redirected to 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。 CNAME
除了上面提到的 DNS 'url-redirect' 我还配置了 rails 来重写根域请求。 (不过我认为请求甚至没有达到 rails)
我创建了一个中间件来将请求 'example.com' 重写为 'www.example.com' 并将其插入 before 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
有一个网络服务器,然后将 HTTP 重定向到 www.example.com
。根据您关于 Heroku 无法在裸域上处理 SSL 的评论,我建议,example.com
和 www.example.com
是不同的 Web 服务器,并且位于不同的 IP 地址上。在这种情况下,您将无法对裸域使用 SSL,因为裸域上的网络服务器根本不执行 SSL,即它不在端口 443 上侦听连接,因此您会得到“Firefox 无法建立一个联系”。如果你不能在裸域上使用 SSL,你也不能为 https 做重定向,因为这个重定向首先需要一个已建立的 SSL 连接。
我正在为我的 Rails 4.2 项目使用 Heroku 的通配符证书,该项目为用户的帐户提供子域。我几乎可以完美地使用它,但还有一些问题需要解决。
如果我输入 http://example.com in the brower, it get's redirected to 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。 CNAME
除了上面提到的 DNS 'url-redirect' 我还配置了 rails 来重写根域请求。 (不过我认为请求甚至没有达到 rails)
我创建了一个中间件来将请求 'example.com' 重写为 'www.example.com' 并将其插入 before 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
有一个网络服务器,然后将 HTTP 重定向到 www.example.com
。根据您关于 Heroku 无法在裸域上处理 SSL 的评论,我建议,example.com
和 www.example.com
是不同的 Web 服务器,并且位于不同的 IP 地址上。在这种情况下,您将无法对裸域使用 SSL,因为裸域上的网络服务器根本不执行 SSL,即它不在端口 443 上侦听连接,因此您会得到“Firefox 无法建立一个联系”。如果你不能在裸域上使用 SSL,你也不能为 https 做重定向,因为这个重定向首先需要一个已建立的 SSL 连接。