如何将 ProxyPass 设置为 '/path/' 而不是根 '/'?

如何将 ProxyPass 设置为 '/path/' 而不是根 '/'?

我正在使用 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在我创建的路径上加载。

我希望有人觉得这个答案有帮助。

相关内容