gpt4 book ai didi

apache - 如何将 Apache URI 重写/代理到监听特定端口/服务器的应用程序?

转载 作者:行者123 更新时间:2023-12-04 03:30:22 25 4
gpt4 key购买 nike

他们说 Apache 的 mod_rewrite 是 URL 操作的瑞士军刀,但它能做到吗?

假设我想向我的 Apache 网络服务器添加一个新应用程序,该应用程序的唯一可配置选项是端口号。

我想使用 & 给出形式为“http://hostname.example.com/app”而不是“http://hostname.example.com:8080”的 URL。这将确保客户也能通过机构的防火墙,而且通常更整洁。

我的应用程序在 php、javascript 和 css 中包含绝对 URI,因此我想在应用程序内部链接中将自己的根位置添加到 URI。我无权访问 DNS 记录,因此无法创建另一个基于名称的虚拟服务器。

使用 Apache 的 mod_rewrite 和 mod_proxy 模块,我可以透明地将客户端重定向到应用程序的正确主页。但是该主页中的链接不会将客户端指向相对于新的基本 URL 的链接。

那么,将请求代理到正在监听特定端口的应用程序的最佳方式是什么?

例如,如果我有一个应用程序监听端口 8080,我可以把它放在我的 Apache 配置中:-

<VirtualHost *:80>
SSLProxyEngine On
ServerName myhost.example.com
RewriteEngine On
UseCanonicalName On
ProxyVia On
<Location "/application">
RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L]
</Location>
</VirtualHost>

如果应用程序不使用绝对 URL,这将正常工作,但确实如此。我需要做的是重写应用程序的 css、javascript 和 php 返回的 URL。

我查看了 ProxyPass 和 ReverseProxyPass 文档,但我认为这些不起作用..?

我也遇到过 Nick Kew 的 mod_proxy_html , 但这不包括在标准的 Apache 发行版中,而且我机构的网络服务器似乎已经好几年没有它了。除了通过应用程序的源代码手动拖网(或使用 grep -r | sed 类型表达式),或者使用这个 3rd 方插件,还有其他方法可以解决这个问题吗?

我可以在 mod_rewrite 规则中使用一些内部服务器变量吗?例如基于“HTTP_REFERER”的重写规则?

最佳答案

使用 mod_proxy 就可以了。例如,我映射了 https://localhost/yalla/指向我的网络服务器的子目录:

LoadModule proxy_module modules/mod_proxy.so
ProxyRequests On
<Proxy *>
Order deny,allow
Allow from localhost
</Proxy>
ProxyPass /yalla/ http://yalla.ynfonatic.de/tmp/

如果你实现了这个,你会注意到目录列表的图片是不可见的;这是因为它们位于远程服务器上的/tmp/目录下,因此不可见。

所以,在你的情况下,你会这样做:
LoadModule proxy_module modules/mod_proxy.so
ProxyRequests On
<Proxy *>
Order deny,allow
Allow from localhost # Or whatever your network is if you need an ACL
</Proxy>
ProxyPass /app/ http://hostname.example.com:8080/

与 Apache 配置中的所有内容一样,在引用目录时注意那些尾部斜杠。

祝你好运!
亚历克斯。

关于apache - 如何将 Apache URI 重写/代理到监听特定端口/服务器的应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7529324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com