我在 Ubuntu 上的 Apache 服务器上遇到了 ProxyPass 问题。我已配置 Apache 来处理服务器上的虚拟主机。服务器上有一个应用程序正在运行,并使用端口 8001 8002。我需要执行类似操作www.example.com/demo/origin
来显示我访问时会看到的内容www.example.com:8000
。要显示的内容是一系列 HTML 页面。
这是虚拟主机配置中存在问题的部分
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
显示不同的网页。
我也尝试过另一种组合,
<Location /demo/origin/>
ProxyPass http://localhost:8000/
ProxyPassReverse http://localhost:8000/
ProxyHTMLURLMap http://localhost:8000/ /
</Location>
这也失败了。
如果有人能帮助我解决这个问题,我将不胜感激。
答案1
那么就 Apache reeves prosing 而言,您是否也进行了这些设置?
# Proxy specific settings
ProxyRequests Off
ProxyPreserveHost On
我之所以询问,是因为错误是由于 JavaScript 文件未加载造成的。CORS不允许 JavaScript 加载来自同一域的内容。并且在向或发出请求时ProxyPreserveHost
会保留example.com
www.example.com:8001
www.example.com:8002
编辑:尝试一个更具体的例子。我建议你重做你的代理逻辑并尝试一下。
# 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>