我在Ubuntu上的Apache服务器上遇到ProxyPass的问题。 我configuration了Apache来处理我的服务器上的虚拟主机。 有一个应用程序在服务器上运行,并使用端口8001 8002.我需要做一些事情,如www.example.com/demo/origin显示我将看到的内容,当我访问www.example.com:8000 。 要显示的内容是一大堆HTML页面。
这是有问题的虚拟主机configuration部分
ProxyPass /demo/vader http://www.example.com:8001/ ProxyPassReverse /demo/vader http://www.example:8001/ ProxyPass /demo/skywalker http://www.example.com:8002/ ProxyPassReverse /demo/skywalker http://www.example.com:8002/
现在当我访问example.com/demo/skywalker ,我会看到8002端口的第一页,比如说login.html页面。
第二个应该是www.example.com/demo/skywalker/userAction.html ,而服务器显示www.example.com:8000/login.html 。 在错误日志中,我看到如下所示:
[Mon Nov 11 18:01:20 2013] [debug] mod_proxy_http.c(1850): proxy: HTTP: FILE NOT FOUND /htdocs/js/demo.72fbff3c9a97f15a4fff28e19b0de909.min.js
我没有任何文件夹htdocs在系统中。
这只是查看.html页面时的一个问题。 否则,不会出现这样的问题。
当我访问localhost:8001它将显示任何和所有内容没有任何错误或问题。
www.example.com/demo/skywalker会显示一个单独的网页
www.example.com/demo/origin显示不同的网页
和
www.example.com/demo/vader会显示不同的网页。
我也尝试过使用另一种types的组合,
<Location /demo/origin/> ProxyPass http://localhost:8000/ ProxyPassReverse http://localhost:8000/ ProxyHTMLURLMap http://localhost:8000/ / </Location>
这也失败了。
如果有人能帮我解决这个问题,我将不胜感激。
所以就Apache的reeves散布而言,你是否也有这些设置?
# Proxy specific settings ProxyRequests Off ProxyPreserveHost On
我问的原因是错误是基于JavaScript文件不加载。 而CORS将不允许JavaScript从同一个域加载内容。 ProxyPreserveHost会在向www.example.com:8001或www.example.com:8002发出请求时保留example.com
编辑:去尝试一个更具体的例子。 我build议你重做你的代理逻辑,试试这个。
# Settings for adding a trailing slash to the URL RewriteEngine On RewriteCond %{REQUEST_URI} ^/(demo)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L] # Settings for Apache Reverse Proxying <IfModule mod_proxy.c> # Proxy specific settings ProxyRequests Off ProxyPreserveHost On <Proxy *> AddDefaultCharset off Order deny,allow Allow from all </Proxy> ProxyPass /demo/vader http://www.example.com:8001/ ProxyPassReverse /demo/vader http://www.example:8001/ ProxyPass /demo/skywalker http://www.example.com:8002/ ProxyPassReverse /demo/skywalker http://www.example.com:8002/ </IfModule>