Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Apache URI重写/代理到侦听特定端口/服务器的应用程序?_Apache_Mod Rewrite_Port_Mod Proxy - Fatal编程技术网

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

如何将Apache URI重写/代理到侦听特定端口/服务器的应用程序?,apache,mod-rewrite,port,mod-proxy,Apache,Mod Rewrite,Port,Mod Proxy,他们说Apache的mod_重写是URL操纵的瑞士军刀,但它能做到这一点吗 假设我想向Apache Web服务器添加一个新的应用程序,其中应用程序的唯一可配置选项是端口号 我想使用并给出形式为“”而不是“”的URL。这将确保客户也能通过该机构的防火墙,而且总体上更整洁 我的应用程序包含php、javascript和css中的绝对URI,因此我希望在应用程序内部链接中将我自己的根位置预先添加到URI中。我无法访问DNS记录,因此无法创建另一个基于名称的虚拟服务器 使用Apache的mod_rewr

他们说Apache的mod_重写是URL操纵的瑞士军刀,但它能做到这一点吗

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

我想使用并给出形式为“”而不是“”的URL。这将确保客户也能通过该机构的防火墙,而且总体上更整洁

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

使用Apache的mod_rewrite和mod_代理模块,我可以透明地将客户端重定向到应用程序的正确主页。但是,该主页中的链接不会将客户端指向与新的基本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>

SSLProxyEngine打开
ServerName myhost.example.com
重新启动发动机
在上使用CanonicalName
ProxyVia On
重写规则^/应用程序/?(**)http://localhost:8080/$1[P,L]
如果应用程序不使用绝对URL,这将很好,但它确实使用。我需要做的是重写应用程序的css、javascript和php返回的URL

我已经看过ProxyPass和ReverseProxyPass文档,但我认为它们不起作用

我也遇到过Nick Kew的,但这不包括在标准Apache发行版中,而且我所在机构的Web服务器多年来似乎没有它。。除了通过应用程序的源代码手动拖网(或使用grep-r | sed类型表达式)或使用此第三方附加组件之外,还有其他方法可以做到这一点吗


我可以在mod_重写规则中使用一些内部服务器变量吗?例如,基于“HTTP\u REFERER”的重写规则?

使用mod\u proxy就可以了。例如,我映射了
https://localhost/yalla/
指向my webserver的子目录:

LoadModule proxy_module modules/mod_proxy.so
ProxyRequests On
<Proxy *>
      Order deny,allow
      Allow from localhost
</Proxy>
ProxyPass /yalla/ http://yalla.ynfonatic.de/tmp/
LoadModule proxy\u modules/mod\u proxy.so
代理请求
命令拒绝,允许
允许从本地主机
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/
LoadModule proxy\u modules/mod\u proxy.so
代理请求
命令拒绝,允许
如果您需要ACL,则允许从localhost#或任何您的网络访问
ProxyPass/应用程序/http://hostname.example.com:8080/
与Apache配置中的所有内容一样,在引用目录时,请注意后面的斜杠

祝你好运!
Alex.

您需要mod proxy html,因为网页中的内部链接可能指向
应用程序/
,如果它们以
/
开头(它们不能通过代理修复,因为例如
/img/abc
请求在没有上下文的情况下是不明确的:
应用程序/img/abc
或者实际上是
/img/abc
)。你不能将应用程序修改为只使用相对链接吗?我想我回答了这个…:问题中的应用程序不是基于目录的(在自己的端口上侦听的守护程序应用程序),并且不引用其各自根目录之外的任何内容。我确实尝试在一个应用程序(路径工具)中修复所有绝对URI,但这只是扼杀了该应用程序。这也是一个很大的工作,如果更新替换了任何重要的东西(其中一些可以作为二进制文件分发,因此不可编辑;毫无疑问,这个应用程序为什么会崩溃),则需要重复。塔索:)看起来这可能行得通。助教!今天早上我在看mod_proxy,想看看如何通过uni的one自动代理我的家庭网络。。但这与此功能完全不同。我会让你知道我的进展。干杯亚历克西斯:这似乎减少了飞行前的选择requests@nathan为此,您可能需要一些
mod_rewrite
sauce;我从来没有偶然发现过这个错误,但快速搜索发现了这个链接:-不确定,如果有帮助,但欢迎反馈。YMMV.
ProxyRequests on
似乎是一个危险的错误: