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

标签 apache mod-rewrite port mod-proxy

他们说 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/

相关文章:

C# - SMTP Gmail 在发送时挂起。第一次工作

java - 使用 Java Socket 与 Apache HttpClient 进行异步实时 HTTP 数据收集

ruby-on-rails - 乘客显示文件夹索引,而不是使用 Rails 渲染站点

python - Flask 和 mod_wsgi 导入错误

php - 如何将子域重写为 URL 中的变量?

php - .htaccess 301 重定向不起作用?

linux - Netstat命令输出说明

php - 阻止通过 http 直接访问文件,但允许 php 脚本访问

.htaccess - 通用 htaccess 将 www 重定向到非 www

apache - 如何在现有 LAMP 服务器上添加 Tomcat 7 虚拟主机?