【发布时间】:2014-01-31 20:02:58
【问题描述】:
我目前有一台机器,运行一个包含 nginx/Passenger/Rails 3.x 的堆栈。这台机器有多个 IP 地址,一个用于我们服务的每个 TLD,主要用于 SSL 证书目的。
我遇到了较长 TLD(.co.uk、.com.au 等)的问题。我的第一次尝试是我的 ApplicationController 中的以下过滤器:
if request.host =~ /co\.uk$|com\.au$/
ActionDispatch::Http::URL.tld_length = 2
else
ActionDispatch::Http::URL.tld_length = 1
end
不幸的是,这在路由已经被解析之后运行,这意味着我在 config/routes.rb 中的子域处理已经完成(并且错误)。但是,相当危险的是,我会永久影响这个乘客实例的 NEXT 请求。因此,它不仅会破坏对 .com.au 的请求,而且可能还会破坏对 .com 的下一个请求。
我觉得我应该做的是在我的环境文件中设置tld_length,但我需要根据用户连接的接口的 IP 地址来设置(因为我有不同的每个 TLD 的 IP 地址)。
有没有简单的方法来做到这一点?如果没有,有没有更好的方法在同一台机器上处理多个 TLD?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 nginx passenger