ruby-on-rails - 发送重定向到特定端口

标签 ruby-on-rails nginx passenger haproxy

我有一个 Rails 应用程序服务器,它正在监听端口 9000,并通过 haproxy 进行调用。我所有来自该服务器的重定向都通过端口 9000 重定向回,而它们应该在端口 80 上发送回。

我正在使用 haproxy + nginx + 乘客的组合。有没有办法确保所有重定向都通过端口 80 发送,而不管实际服务器正在监听哪个端口?

我不在乎它是否是 haproxy、nginx、Passenger 或 Rails 更改。我只需要确保除非另有说明,大多数请求都被发送回端口 80。

谢谢!

最佳答案

就像 elektronaut 指出的那样,这可能应该在您的代理配置中处理。也就是说, ActiveSupport::UrlFor#url_for 有一些可能有用的信息。看看http://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/url_for.rb

我认为归结为将两个参数传递给您的 url_for 和/或 link_to 调用。首先是:port => 123参数,第二个是 :only_path => false以便它生成完整的链接,包括域、端口等。

因此,在生成链接时,您可能会这样做:

link_to 'test', root_url(:port => 80, :only_path => false)

在创建自定义 url 时,您可能会这样做:
url_for :controller => 'test', :action => 'index', :port => 80, :only_path => false

对于重定向:
redirect_to root_url(:port => 80, :only_path => false)

我希望这会有所帮助,如果没有,您能否更具体地说明如何生成 URL、rails 为您生成什么以及您希望它生成什么。

更新:
我不知道这一点,但似乎您可以使用 url_for 为 URL 的 rails 生成设置默认值,生成链接和/或 URL 的所有其他内容都使用它。这里有一篇很好的文章:http://lucastej.blogspot.com/2008/01/ruby-on-rails-how-to-set-urlfor.html

或者给你总结一下:

将此添加到您的 application_controler.rb
def default_url_options(options)
   { :only_path => false, :port => 80 }
end

和这个:
helper_method :url_for

第一个块在 Controller 中设置默认值,第二个块导致 url_for 助手使用在 Controller 中找到的那个,因此默认值也适用于它。

关于ruby-on-rails - 发送重定向到特定端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011715/

相关文章:

docker-compose chrome-alpine 使用 nginx

ruby-on-rails - Rails 应用程序部署问题

ruby-on-rails - 这种弃用方法如何工作?

android - 使用 Parse 从 Ruby On Rails 向 Android 和 IOS 用户推送通知

python - Flask App with Gunicorn on Nginx 服务器 POST 错误

ruby-on-rails - Phusion Passenger 在使用 rvm 升级 Ruby 和 Rails 后抛出错误

ruby-on-rails - Rails 应用程序错误 : Premature end of script headers

ruby-on-rails - sidekiq 重试参数耗尽

ruby-on-rails - "stack level too deep"编译 Assets 时

ssl - Certbot 自动配置后站点未启用 ssl