首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Apache mod-proxy与Erlang氮气一起使用

将Apache mod-proxy与Erlang氮气一起使用
EN

Stack Overflow用户
提问于 2011-10-26 21:10:24
回答 3查看 557关注 0票数 0

我有一个运行多个web应用程序的CentOS机器,我使用Apache代理各种应用程序的请求。除了Erlang氮气应用程序之外,所有的应用程序都在工作,我似乎不能让它工作。

我正在以标准的方式运行氮气应用程序,它可以通过http://localhost:8000在机器上进行本地访问。我已经使用wget验证了这一点。

下面是我尝试使用的apache配置文件:

代码语言:javascript
复制
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的日志:

代码语言:javascript
复制
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代理/反向代理我的氮气应用程序?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-27 13:42:05

问题是ProxyPass只捕获作为对Apache的请求进入的链接。出了问题的是,html页面中的链接指向无法请求的资源,而ProxyPass无法拦截它们并正确路由它们。此问题是documented here。请特别参阅“修复HTML链接”一节。

我最终不得不在Apache中安装mod_proxy_html (没有适用于CentOS的RPM,所以我不得不使用apxs,就像上面的文档所解释的那样)。在那之后,我必须为给我带来麻烦的资源添加一些ProxyHTMLLinks,并添加一个ProxyHTMLURLMap指令来解释我的映射。

这是我的新配置文件:

代码语言:javascript
复制
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特性时,我可以看到结果。

票数 0
EN

Stack Overflow用户

发布于 2013-01-20 18:30:23

问题:我设置了Yaws wiki。它的工作方式类似于http ://wiki:8080。但是我想这样工作(使用apache):http ://wiki.local/

解决方案:

下面是我的Yaws Wiki的apache设置(/etc/apache/sites available/Wiki):

代码语言:javascript
复制
<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):

代码语言:javascript
复制
ebin_dir = /usr/lib/yaws/wiki/ebin
<server wiki>
 port = 8080
 listen = 0.0.0.0
 docroot = /var/lib/yaws-wiki
</server>

我的/etc/hosts:

代码语言:javascript
复制
127.0.0.1 wiki
127.0.0.1 wiki.local

我已经为apache启用了这些mods:

代码语言:javascript
复制
sudo a2enmod proxy
sudo a2enmod proxy_http

现在http ://wiki.local/可以完美地工作。

票数 1
EN

Stack Overflow用户

发布于 2011-10-26 21:18:36

是否确实允许您的Apache服务器访问这些文件?看起来你的第一个地址是HTTP 200,剩下的地址是404。确保您指向正确的位置。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7903059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档