2011-10-26 87 views
0

我有一個運行大量Web應用程序的CentOS盒子,並且我使用Apache來代理對各種應用程序的請求。所有這些都只是一個Erlang施氮,我似乎無法得到工作的工作。使用Apache mod-proxy與Erlang氮氣

我正在以標準方式運行Nitrogen應用程序,並且可以在機器上本地訪問http://localhost:8000。我已經使用wget驗證了這一點。

這裏是我嘗試使用Apache配置文件:

ProxyRequests Off 
ProxyPreserveHost On 

<Proxy http://my-ip:8000/*> 
    Order deny,allow 
    Allow from all 
</Proxy> 

ProxyPass /erlang http://my-ip:8000/ 
ProxyPassReverse /erlang http://my-ip:8000/ 
ProxyPassReverse /erlang http://my-ip/ 

這種設置類似,但其他應用程序不部署到根目錄下的系統上的所有其他成功合作代理其像Nitrogen這樣的服務器似乎在做。

結果是,基本頁面正確地下載到網絡瀏覽器,但所有的伴隨資源都沒有。這給了我一個非風格的頁面,其中的JavaScript無法正常工作。

這裏是Apache日誌:

x.x.x.x - - [timestamp] "GET /erlang HTTP/1.1" 200 2884 
x.x.x.x - - [timestamp] "GET /nitrogen/jquery.js HTTP/1.1" 404 484 
x.x.x.x - - [timestamp] "GET /nitrogen/jquery-ui.js HTTP/1.1" 404 484 
x.x.x.x - - [timestamp] "GET /nitrogen/livevalidation.js HTTP/1.1" 404 484 
x.x.x.x - - [timestamp] "GET /nitrogen/nitrogen.js HTTP/1.1" 404 484 
x.x.x.x - - [timestamp] "GET /nitrogen/bert.js HTTP/1.1" 404 484 
x.x.x.x - - [timestamp] "GET /nitrogen/jquery-ui/jquery.ui.all.css HTTP/1.1" 404 484 
x.x.x.x - - [timestamp] "GET /nitrogen/nitrogen.css HTTP/1.1" 404 484 
x.x.x.x - - [timestamp] "GET /css/style.css HTTP/1.1" 404 484 

我必須使用Apache作爲我的代理人硬性要求 - 我不打算重新建立所有其他應用程序只是爲了得到這個施氮工作。在防火牆中打開8000端口也不成問題。

只要不影響其他應用程序,我可以使用任何Apache模塊(mod-rewrite等)或任何Apache設置。我還可以更改施氮任何設置即可得到它與Apache發揮更好。

我怎樣才能使用Apache代理/反向代理我的氮應用程序?

回答

0

問題是ProxyPass只捕獲作爲請求到Apache的鏈接。到底發生了什麼錯誤是在HTML頁面中的鏈接指向的是不能正確申請和的ProxyPass無法攔截下來,​​並將它們路由資源。此問題是documented here。尤其請參閱「修復HTML鏈接」一節。

我最終不得不將mod_proxy_html安裝到Apache(CentOS沒有RPM,所以我不得不使用像上面文檔解釋的apxs)。之後,我不得不添加一些ProxyHTMLLinks爲是給我的麻煩和ProxyHTMLURLMap指令來解釋我的映射的資源。

這是我的新的配置文件:

ProxyRequests Off 
ProxyPreserveHost On 

<Proxy http://my-ip:8000/*> 
    Order deny,allow 
    Allow from all 
</Proxy> 

ProxyPass /erlang http://my-ip:8000/ 
ProxyHTMLURLMap http://my-ip:8000 /erlang 

ProxyHTMLLinks link   href 
ProxyHTMLLinks script   src for 

<Location /erlang> 
    ProxyPassReverse http://my-ip:8000/ 
    SetOutputFilter proxy-html 
    ProxyHTMLExtended On 
    ProxyHTMLURLMap//erlang/ 
    RequestHeader unset Accept-Encoding 
</Location> 

這是什麼字面上做的是攔截的HTML文件,並在所有網址前面插入/二郎/。當我在瀏覽器中使用顯示頁面源功能時,我可以看到這一結果。

0

你肯定你的Apache服務器允許訪問這些文件?看起來你在第一個地址獲得了HTTP 200,剩下的則是404。確保你指向正確的位置。 :)

1

問題:我成立了雅司病維基。它像http:// wiki:8080一樣工作。但我想以這種方式工作(使用apache):http:// wiki。本地/

解決方案:

這裏我的Apache設置(在/ etc /阿帕奇/網站可用/維基)爲雅司病百科:

<VirtualHost *:80> 
    ServerName wiki.local 
    ProxyRequests Off 
    <Proxy *> 
    Order deny,allow 
    Allow from all 
    </Proxy> 
    ProxyPass/http://wiki:8080/ 
    ProxyPassReverse/http://wiki:8080/ 
</VirtualHost> 

我的雅司病維基設置(在/ etc /雅司病/ conf目錄.avail /雅司病 - wiki.conf):

ebin_dir = /usr/lib/yaws/wiki/ebin 
<server wiki> 
port = 8080 
listen = 0.0.0.0 
docroot = /var/lib/yaws-wiki 
</server> 

我的/ etc/hosts文件:

127.0.0.1 wiki 
127.0.0.1 wiki.local 

我已經啓用這些器官功能障礙綜合徵的Apache:

sudo a2enmod proxy 
sudo a2enmod proxy_http 

現在的http://wiki.local/工作perfecly。