Lig*_*ker 5 php proxy process apache-2.2
我在正确配置 Apache mod_proxy.so 以便按需要工作时遇到很多麻烦......
主要思想是在网络中的本地计算机上创建一个代理,该代理将能够在 PHP 中处理客户端请求(通过 Apache 准备的代理连接的客户端)。而且,它也有能力处理 PHP 上的服务器响应。
这是两个功能,它们彼此独立。
让我介绍一下我需要实现的目标:

正如您在这里看到的,有两种方法:蓝色一种和红色一种。
对于蓝色的,我基本上连接了本地网络(家庭)上的客户端(机器 B - 手机),并将其配置为通过代理,即同一网络上的机器 A(个人计算机)。
所以我们可以说(不是 DHCP):
机器 A: 192.168.1.40 --> Apache 正在该机器上运行,并配置为侦听端口 80。
机器 B(手机): 192.168.1.75 --> 配置为通过代理,即 IP 192.168.1.75 和端口 80(基本上是机器 A)。
正确配置 Apache 后,基本上是从 httpd.conf 中删除 mod_proxy.so(主要工作程序)、mod_proxy_connect.so(SSL、allowCONNECT,...)和 mod_proxy_http.so(需要处理 HTTP 请求/响应),在我的例子中,有这样的行:
# Implements a proxy/gateway for Apache.
Include "conf/extra/httpd-proxy.conf"
# Various default settings
Include "conf/extra/httpd-default.conf"
# Secure (SSL/TLS) connections
Include "conf/extra/httpd-ssl.conf"
Run Code Online (Sandbox Code Playgroud)
这使我能够配置文件 httpd-proxy.conf 来准备正向代理或反向代理。
所以我不确定我需要的是正向代理还是反向代理。
对于转发代理,我这样做了:
<IfModule proxy_module>
<IfModule proxy_http_module>
#
# FORWARD Proxy
#
#ProxyRequests Off
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
# Allow from all
Deny from all
Allow from 192.168.1
</Proxy>
</IfModule>
</IfModule>
Run Code Online (Sandbox Code Playgroud)
它基本上将所有数据包正常传递到服务器并返回到客户端。我可以通过查看 Apache 的“access.log”来完美地跟踪它(并且测试有效)。我用手机发出的任何请求都会出现在 Apache 日志中。所以它有效。
但问题来了:
我读过很多这方面的内容。我已经详细阅读了 Apache 官方网站上有关 mod_proxy 的内容。我在论坛上搜索了很多,但没有运气。
所以我想到了第一个近似:
1)Apache中的正向代理,传递所有数据包,但无法处理它们。这似乎是真的,那么,反向代理呢?
所以我设想了这样的事情:
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass http://www.google.com http://www.yahoo.com
ProxyPassReverse http://www.google.com http://www.yahoo.com
Run Code Online (Sandbox Code Playgroud)
这只是一个测试,但这应该会导致我的手机在尝试导航到 Google 时,我应该转到 Yahoo,不是吗?但不是。这不起作用。
所以你真的看到了,Apache 反向代理上的所有示例都是这样的:
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
Run Code Online (Sandbox Code Playgroud)
这意味着,本地上下文中的任何类型的请求都将在远程位置得到解决。
但我需要的是相反的!当我在手机上请求远程站点时,我在本地服务器(Apache 服务器)上解决了此请求,以使用 PHP 模块处理它。
所以,如果是正向代理,我需要先通过PHP。如果它是反向代理,我需要将“行进”方向更改为本地服务器,以便首先在 PHP 上进行处理。
然后想到第二个选项:
2)我见过类似的东西:
<Proxy http://example.com/foo/*>
SetOutputFilter INCLUDES
</Proxy>
Run Code Online (Sandbox Code Playgroud)
我开始搜索SetOutputFilter、SetInputFilter、AddOutputFilter 和 AddInputFilter。
但我真的不知道如何使用它。
似乎很好,或者对我来说是一个解决方案,因为有了这样的东西,我应该能够添加一个输入过滤器来在 PHP 上处理客户端请求并将我编程/想要的内容发送回客户端(而不是远程服务器响应) ),这是模式上的蓝色路径,我应该能够添加一个输出过滤器,这似乎使我能够在将远程服务器响应发送到客户端之前处理它,这应该是模式上的红色路径。
红色路径,它只是读取服务器响应并使用它们。但仅此而已。蓝色道路,是重要的一条。因为我会在处理完请求后向客户发送我想要的任何内容。
很抱歉这篇文章太长了,但我需要尽我所能地解释它。
我希望有人能理解我的问题,并帮助我解决它!
小智 2
好吧,首先:Apache 是一个错误的工具!
Apache 是一个网络服务器,而不是代理服务器。是的,它带有一个代理模块,但首先也是最重要的是它是一个网络服务器。
相反,您应该研究真正的代理服务器,例如鱿鱼。在鱿鱼中,您正在寻找一个称为“内容适应”的功能:
http://wiki.squid-cache.org/SquidFaq/ContentAdaptation
| 归档时间: |
|
| 查看次数: |
16753 次 |
| 最近记录: |