目前,我是这样设置环境的。端口 80 上的 apache2 实例。同一台服务器上的 Jetty 实例位于端口 8090 上。
用例:
当我访问 foo.com 时,我应该看到托管在 jetty 端口 8090 上的 webapp。
如果我输入 foo.com/blog,我应该会看到托管在 apache 上的 wordpress 博客。(我在网上阅读了操作指南,并使用 AMP 进行了安装。)
以下是我的各种配置文件:
/etc/apache2/mods-enabled/proxy.conf:
ProxyPass / http://foo.com:8090/ << this is the jetty server
ProxyPass /blog http://foo.com/blog
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyStatus On
/etc/apache2/httpd.conf:
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so
我没有在 sites-available 或 sites-enabled 中创建任何其他文件。
现在的情况:
- 如果我访问 foo.com,我会看到 webapp。
- 如果我访问 foo.com/blog,我会看到
HTTP 错误 404
访问 /errors/404.html 时出现问题。原因:
NOT_FOUND 由 jetty:// 提供支持
- 如果我注释掉第一个 ProxyPass 行,那么在 foo.com 上,我只会看到主页,没有应用 CSS,即只有文本。
- .. 访问 foo.com/blog 时出现以下错误:
代理服务器从上游服务器接收到无效响应。
代理服务器无法处理请求 GET /blog。
原因:从远程服务器读取时出错
- 我也无法访问 /phpmyadmin,出现与上述相同的 404 NOT_FOUND 错误。
我正在 Amazon EC2 实例上运行 Debian squeeze。
问题:我哪里做错了?我应该在 proxy.conf(或其他 conf 文件)中做哪些更改才能访问博客?
答案1
如果我理解正确的话你需要更换这一行
ProxyPass /blog http://foo.com/blog
用这行
ProxyPass /blog/ !
这指示 apache2 服务器不要代理以 /blog 开头的任何内容,我认为这就是您想要的。
更新:官方文档在这里:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html