Dan*_*edo 6 mod-proxy apache-2.2
我正在尝试构建一个网站,让您可以查看和操作来自任何其他网站的任何页面的数据。为此,我必须绕过“ Allow Origin”问题:我正在加载其他域的内容,iframe 并且必须使用从我的域下载的 javascript 来操作其内容。
我的第一次尝试是自己编写一个简单的代理,通过一个用 Java 编码的服务器代理请求其他域页面,该代理不仅提供内容,还重建内容中的链接(src 和 href ),以便这些链接引用的内容也得到通过我手工制作的代理下载。结果还不错,但在 css 和脚本中的 url 有问题。
就在那时,我意识到mod_proxy_html应该完全完成所有这些工作。问题是我无法弄清楚如何让它按预期工作。
假设我的服务器在 my-domain.com 中运行并代理和转换来自另一个域的内容,我会发出这样的请求:
my-domain.com/proxy?url=http://another-domain.com/some/content
Run Code Online (Sandbox Code Playgroud)
我想通过以下方式mod_proxy_html提供内容并重写以下 URL http://another-domain.com/some/content:
another-domain.com: 没有重写/other/content->/proxy?url=http://another-domain.com/other/contentother/content->/proxy?url=http://another-domain.com/some/content/other/content../other/content->/proxy?url=http://another-domain.com/some/other/contenturl 应该在运行时指定,而不是配置时。
这可以通过 mod_proxy_html 实现吗?谁能提供一个简单的工作配置开始?
编辑 1-第一种方法
以下站点配置适用于在任何地方都使用绝对 url 的站点,例如http://www.huffingtonpost.es/. 你可以在本地主机上尝试这个配置:http://localhost/asset/http://www.huffingtonpost.es/
<VirtualHost *:80>
ServerName localhost
LogLevel debug
ProxyRequests off
RewriteEngine On
RewriteRule ^/asset/(.*) $1 [P]
ProxyHTMLURLMap $1 /asset/
<Location /asset/>
ProxyPassReverse /
ProxyHTMLURLMap / /asset/
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但如文档中所述,如果我使用相对 url 访问站点,我希望通过 mod_proxy_html 在 html 上重写这些内容。所以我应该Location按如下方式更改块:
<Location /asset/>
ProxyPassReverse /
#Depending on your system use one line or the other
#Ubuntu:
#SetOutputFilter proxy-html
#any other system:
ProxyHTMLEnable On
ProxyHTMLURLMap / /asset/
</Location>
Run Code Online (Sandbox Code Playgroud)
......这似乎不起作用。欢迎评论、提示和想法!
这是关于如何执行此操作的想法 - 设置有点复杂,但我认为它会很安全。我目前无法测试这个,因为我无法访问我的测试服务器,但这是一个开始。
主要问题是,如果您只是设置了 ProxyPassReverse,您还需要指定连接到哪些服务器。由于您希望能够在多个服务器上使用它,因此温和地说,这会有点痛苦。因此,这里有一个两步方法可以巧妙地回避这个问题。
首先,设置一个单独的 apache 实例以仅侦听 127.0.0.1 和特定端口 - 在我的示例中我使用了 2323。该实例应配置为简单的代理服务器并且不进行重写。例子:
<Proxy *>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Proxy>
Run Code Online (Sandbox Code Playgroud)
在您的主服务器上,设置反向代理,如下所示:
<Location /proxy/>
ProxyPass http://127.0.0.1:2323
ProxyPreserveHost On
ProxyHtmlEnable ON
ProxyHtmlMap / /proxy/
</Location>
Run Code Online (Sandbox Code Playgroud)
这意味着实际代理作为常规代理工作,而重写发生在脚本运行的同一个 apache 实例中。再次请注意,这尚未经过测试,但我认为这是开始寻找的正确方向。
| 归档时间: |
|
| 查看次数: |
6358 次 |
| 最近记录: |