2012-07-11 75 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

相關問題