2012-07-11 83 views
0

访问的我部署一个RoR应用到我的服务器,有一个额外的Apache2虚拟主机文件:的Ruby on Rails应用程序只能通过本地主机

<VirtualHost *:80> 
    # ServerName ubuntu 
    DocumentRoot /var/www/myapp/current/public 
    PassengerEnabled off 
    ProxyPass/http://127.0.0.1:9051 
    ProxyPassReverse/http://127.0.0.1:9051 

    <IfModule mod_rewrite.c> 
     RewriteEngine On 

     # Redirect all requests to the maintenance page if present 
     RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png)$ 
     RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f 
     RewriteCond %{SCRIPT_FILENAME} !maintenance.html 
     RewriteRule ^.*$ /system/maintenance.html [L] 
    </IfModule> 

</VirtualHost> 

,我使用客运启动:

passenger start -a 127.0.0.1 -p 9051 -e production -d 

这是一个Ubuntu的服务器:

No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 12.04 LTS 
Release: 12.04 
Codename: precise 

和端口监听:

[email protected]:~$ sudo lsof -i :9051 
[sudo] password for plee: 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
nginx 1016 plee 4u IPv4 168135  0t0 TCP localhost:9051 (LISTEN) 
nginx 1017 plee 4u IPv4 168135  0t0 TCP localhost:9051 (LISTEN) 
nginx 1017 plee 5u IPv4 225556  0t0 TCP localhost:9051->localhost:44586 (ESTABLISHED) 
ruby 1018 plee 5u IPv4 225555  0t0 TCP localhost:44586->localhost:9051 (ESTABLISHED) 

的问题是,我的应用程序只能通过http://localhost:9051

如果我尝试使用服务器的IP地址从另一台机器连接访问:http://10.50.10.75:9051

谷歌浏览器给我:

Google Chrome could not connect to 10.50.10.75:9051 

请帮我一把!

谢谢。

+0

您的应用程序是否可以从本地PC的10.50.10.75:9051访问? 访问它从10.50.10.75而不是10.50.10.75:9051 becoz代理应用程序的apache服务器在端口80上运行 – PriteshJ 2012-07-11 05:35:46

+0

不。它甚至不能从apache服务器输入http://10.50.10.75:9051。 – 2012-07-11 05:57:56

+0

你能访问http://10.50.10.75吗? – PriteshJ 2012-07-11 05:59:23

回答

2

你在努力尝试。如果你的服务器与你一样,应用程序运行在不同的端口上(它们可能是开发/升级,对吗?),而你只是想通过端口访问这个应用程序:9501,那么简单的方法是沟阿帕奇。所有你需要的是乘客,你象这样开始,没有-a选项

passenger start -p 9051 -e production -d 

就是这样;你完成了。 (您可能想确保您的防火墙可能不会阻塞该端口,但这是测试您是否仍然有问题的唯一其他事情。)

最后一条建议:不要使用浏览器来测试这种事情。使用卷曲。例如,

curl --head http://x.y.z.a:9051 
+0

作品像魅力,谢谢!我不认为仅仅遵循一些指导而没有更好地理解其含义就足够了。 – 2012-07-11 21:24:22

+0

因为我从某处复制了'passenger start -a 127.0.0.1 -p 9051 -e production -d',我认为它会起作用,这很愚蠢,我感觉自己。 – 2012-07-11 21:39:25

+0

如果你想用'-a 127.0.0.1'运行服务器,你需要拥有一个子域并配置虚拟主机文件/站点。请参阅:http://stackoverflow.com/questions/11565194/apache2-configuration-that-allows-a-subdomain-point-to-an-machineport – 2012-07-19 16:47:49

0

如果要访问它访问另一个端口上,你需要添加一个虚拟主机enty为你也需要让Apache监听端口与端口以及80

下面是你需要

#set the mod_passenger path **MAY BE DIFFERENT FOR YOU** 
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.1.3/ext/apache2/mod_passenger.so 
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.1.3 
PassengerRuby /usr/bin/ruby1.8 

#Listen to port 9501 
Listen 9501 

#add virtual host enty for port 9501 
<VirtualHost *:9501> 
     ServerName myservername 
     DocumentRoot /var/www/tut/public 

     <Directory /var/www/tut/public> 
       Allow from all 
       Options -MultiViews 
     </Directory> 


</VirtualHost> 

注意:现在不需要从命令行启动乘客,这应该已经做到了。

这对我有效。

+0

如果我把斜杠,当我重新启动Apache,它给了我'无效的ProxyPass | ProxyPassMatch参数。参数必须采用'key = value'格式。' – 2012-07-11 06:20:45

+0

oops soory,这个必须是正斜杠(/)编辑我的答案 – PriteshJ 2012-07-11 06:23:53

+0

不。没有或没有“/”没有任何区别。 – 2012-07-11 06:33:17