我有一个运行多个web应用程序的CentOS机器,我使用Apache代理各种应用程序的请求。除了Erlang氮气应用程序之外,所有的应用程序都在工作,我似乎不能让它工作。
我正在以标准的方式运行氮气应用程序,它可以通过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/此设置类似于系统上所有其他成功工作的代理,不同之处在于其他应用程序没有部署到服务器的根目录,就像N似乎正在做的那样。
结果是基本页面被正确地下载到web浏览器中,但所有附带的资源都没有。这给了我一个没有样式的页面,其中的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设置,只要它不影响其余的应用程序。我还可以更改N2应用程序中的任何设置,使其在Apache中运行得更好。
如何使用Apache代理/反向代理我的氮气应用程序?
发布于 2011-10-27 13:42:05
问题是ProxyPass只捕获作为对Apache的请求进入的链接。出了问题的是,html页面中的链接指向无法请求的资源,而ProxyPass无法拦截它们并正确路由它们。此问题是documented here。请特别参阅“修复HTML链接”一节。
我最终不得不在Apache中安装mod_proxy_html (没有适用于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文件并在所有urls前面插入/erlang/。当我在浏览器中使用show page source特性时,我可以看到结果。
发布于 2013-01-20 18:30:23
问题:我设置了Yaws wiki。它的工作方式类似于http ://wiki:8080。但是我想这样工作(使用apache):http ://wiki.local/
解决方案:
下面是我的Yaws Wiki的apache设置(/etc/apache/sites available/Wiki):
<VirtualHost *:80>
ServerName wiki.local
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://wiki:8080/
ProxyPassReverse / http://wiki:8080/
</VirtualHost>我的Yaws wiki设置(/etc/yaws/conf.avail/yaws-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启用了这些mods:
sudo a2enmod proxy
sudo a2enmod proxy_http现在http ://wiki.local/可以完美地工作。
发布于 2011-10-26 21:18:36
是否确实允许您的Apache服务器访问这些文件?看起来你的第一个地址是HTTP 200,剩下的地址是404。确保您指向正确的位置。:)
https://stackoverflow.com/questions/7903059
复制相似问题