【问题标题】:Multiple ports for the SAME rails appSAME rails 应用程序的多个端口
【发布时间】:2012-06-20 02:21:52
【问题描述】:

我正在尝试找出一种部署我的 RAILS 应用程序(rails 3.2、apache、passenger)的方法。该应用程序有两种不同的通信方式。

  1. 用户连接到我们的 https 站点,就像使用 rails 应用程序一样。这是由标准商业 CA 签署的。
  2. 自动化机器连接到我们的站点并使用客户端证书身份验证并检索数据。这一切都由我们自己的 CA 和证书管理。

目前我不考虑平衡,该应用程序将在一台机器上运行。 我无法在 443 上使用可选证书检查来组合这两种方法,因为这会影响在同一 apache 实例上运行的其他应用程序,所以我相信我需要两个单独的应用程序端口。

我应该如何管理这个?可以将 apache 配置为通过单独的虚拟主机指向同一个应用程序(可能通过代理到独立的乘客)吗?我是否应该使用一些共享库或引擎将我的应用程序分成两个单独的应用程序?我应该只部署两次指向同一个数据库(这将如何影响缓存)?

有没有比检查客户端证书更好的方法来区分连接端口,如果是这样,假设是自动连接?

我也对让它快速运行的技巧以及构建这样的东西的正确 Rails 方式感兴趣。

谢谢

【问题讨论】:

  • 你不能只使用不同的域,然后使用虚拟主机将它们分开吗?
  • 不同的域与在不同的端口上使用相同的域和不同的虚拟主机几乎相同。问题不在于如何设置端口,而在于如何设置乘客和铁路,以便为同一底层应用程序使用不同的端口。
  • 嗯,有趣,因为乘客使用 vhost 的应用程序,我不确定这是否可能。你可以转移到不同的网络服务器设置,比如乘客 -> 独角兽(甚至是 nginx -> 独角兽)吗?
  • 并非如此。特别是出于浏览目的,我们需要集成到一个运行我们无法控制的许多其他事情的 apache 实例中。可能我们可以将 apache 端口反向代理到不同的服务器,但我认为管理员不会高兴。即,就问题而言,否。

标签: ruby-on-rails apache passenger


【解决方案1】:

在您的 Rails 应用程序中,如果您希望根据请求类型的行为有条件,您可以添加一个小助手方法,如下所示:

class ApplicationController < ActionController::Base
  def api_request?
    request.port == 443
  end
end

然后在你的其他控制器中:

class UserController < ApplicationController 
  def index
    @users = User.all
    if api_request?
      render :json => @users.to_json
    else
      render :action => :index
    end
  end
end

【讨论】:

  • 太好了,我假设在请求中的某处可以访问端口。未标记为已接受,因为我仍在寻找人来回答更大的设置问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多