使用机架代理时连接被拒绝

时间:2016-05-09 11:35:13

标签: ruby proxy rack

我尝试捕获端口80上的所有*.dev请求,并使用Rack Proxy将它们发送到正确的Rack项目。我能够捕获请求并根据URI在特定文件夹中查找config.ru。当我能够找到一个时,我将在端口3000上启动服务器。

之后,每当我在端口80上收到请求时,我都会尝试将HTTP_HOST设置为localhost:3000,但我收到消息Unexpected error while processing request: Connection refused - connect(2) for "localhost" port 3000。我可以通过localhost:3000访问该应用,但不能通过*.dev域访问该应用。我已经尝试过使用不同的端口了,但是它们也没有用,所以我想这与运行它的用户有关。但是,我希望有人能帮助我。

require 'rack-proxy'

class AppProxy < Rack::Proxy
  def rewrite_env(env)
    request = Rack::Request.new(env)
    site = request.host[0..-5]
    uid = File.stat(__FILE__).uid

    path = Etc.getpwuid(uid).dir + '/Software/Applications/'

    front_controller = "#{path}#{site}/config.ru"
    if File.file?(front_controller)

     system "rackup -p 3000 -D #{front_controller} "
     env["HTTP_HOST"] = "localhost:3000"
   else
    raise Exception.new "Not found"
   end

  env
 end
end

run AppProxy.new

编辑:我已检查端口3000上是否有监听内容。运行服务器后sudo lsof -i -n -P | grep TCP我得到端口80和3000的以下结果:< / p>

ruby      56247           root   10u  IPv4 0x727d74bd0b95bd9b      0t0       TCP *:80 (LISTEN)
ruby      56247           root   11u  IPv4 0x727d74bd0a3b9bfb      0t0    TCP 127.0.0.1:80->127.0.0.1:52773 (ESTABLISHED)
ruby      56255           root   12u  IPv6 0x727d74bd094e3c8b      0t0    TCP [::1]:3000 (LISTEN)

我不确定这是否有用,因为我不知道这个的确切含义。

1 个答案:

答案 0 :(得分:1)

解决了它。问题是启动服务器比将HTTP_HOST设置到其他位置稍慢,而端口3000尚未使用。等待一秒就解决了这个问题。我的代码现在看起来像这样:

require 'rack-proxy'

class AppProxy < Rack::Proxy
  def rewrite_env(env)
    request = Rack::Request.new(env)
    site = request.host[0..-5]
    uid = File.stat(__FILE__).uid

    path = Etc.getpwuid(uid).dir + '/Software/Applications/'
    front_controller = "#{path}#{site}/config.ru"

    if File.file?(front_controller)
       system "rackup -D -p 3000 #{front_controller} "

       sleep(1)

       env["HTTP_HOST"] = "localhost:3000"
    else
       raise Exception.new "Not found"
    end

    env
  end
 end

run AppProxy.new