2011-10-26 33 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。