我正在使用 Ubuntu-15.10,Apache-2.4.12
我一直尝试在启用 SSL 的 VirtualHost 中使用 ProxyPass,如下所示:
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass /myapp/ http://127.0.0.1:8090/
ProxyPassReverse /myapp/ http://127.0.0.1:8090/
通过上述配置,我假定服务器在该端口上提供的任何服务,例如web
都将附加到https://www.example.com/myapp/web
。
但是,我得到的不是这个。在 Apache 日志中,我得到:
... File does not exist: /var/www/html/web, referer: https://www.example.com/myapp/
这是因为我不明白ProxyPass
应该做什么吗?还是我的配置有问题,需要纠正?
附录(2016 年 2 月 18 日)
我已经打开日志记录mod_proxy
并且看到以下没有意义的提示:
... connecting http://127.0.0.1:8090/ to 127.0.0.1:8090
... connected / to 127.0.0.1:8090
... fam 2 socket created to 127.0.0.1
... connection established with 127.0.0.1:8090 (127.0.0.1)
... connection complete to 127.0.0.1:8090 (127.0.0.1)
... http: has released connection for (127.0.0.1)
... proxy: connection shutdown
我假设第一行中的一个地址是内部占位符,另一个是正在检索的 URL。但为什么在第二行中连接到的是检索到的 URL,/
而不是/myapp/
根据 ProxyPass?
答案1
我找到了一个解决方案,但它既不是我所希望的,也不是我从阅读中期望的ProxyPass
。这可能是我的错误,或者文档不够清晰。ProxyPass
无法将代理 URL 附加到虚构名称的路径。因此,我不得不让我的应用程序从指定端口上的目录加载,而不是从 URL 的根目录加载,如下所示:
ProxyPass /myapp http://127.0.0.1:8090/myapp
ProxyPassReverse /myapp http://127.0.0.1/myapp
RewriteRule
此外,如果有需要加载的资源,例如查询、图像、脚本等,也必须使用A。
重写规则如下:
RewriteEngine On
RewriteRule ^(.*) http://0.0.0.0:8090/$1 [P,L]
我觉得还有许多其他解决方案可能涉及其他代理模块RewriteRule
,但这是就我对 Apache 的了解而言最简单的解决方案。
因此,最重要的是,至少路径的第一个部分必须存在于两端才能ProxyPass
完成它的工作。如果不对代理设置进行进一步的复杂处理,我就无法ProxyPath
在我创建的路径上加载。
我希望有人觉得这个答案有帮助。