我想完成以下操作:我想在我从笔记本上请求的所有网站上显示一个任务栏。在这个栏上,我显示了各种信息。
我的网络中有一个Raspberry Pi,我在笔记本上配置了网关。所以我笔记本上的所有流量都通过了覆盆子。在树莓上我安装了一个带有两个VirtualHosts的Apache服务器。一个是侦听端口 80 的本地Web服务器。对于另一个,侦听端口 8126 ,我有以下规则:
如果请求中未设置特殊参数,我会将请求重定向到本地页面(原始请求的URI作为参数)。在这个页面上,我有一个iframe,在其中我使用从参数中读出的URI显示最初请求的页面。为了避免无限循环,我将特殊参数添加到iframe中的链接。这部分工作正常。
如果未设置特殊参数(因为页面应显示在iframe中),我会再次使用* mod_rewrite *将请求重定向到最初请求的页面。这种重定向似乎会导致问题。
所以这里是我正在做的一些代码: 我使用iptables将端口 80 上的所有流量重定向到端口 8126 。 192.168.1.1 是我使用的覆盆子的IP地址,因为我无法重定向到 PREROUTING 阶段的环回接口。我使用以下iptables-rule执行此操作:
iptables -t nat -A PREROUTING -i eth0 -p tcp 80 -j DNAT 192.168.1.1:8126
我将我的问题归结为Apache服务器的以下VirtualHost配置,我只是将所有请求重定向到外部网站:
<VirtualHost *:8126>
RewriteEngine On
RewriteRule ^/?(.*) http://example.com/ [P]
ProxyPassReverse / http://example.com/
</VirtualHost>
在我的笔记本上,我将网关设置为 192.168.1.1 ,打开我的Chrome浏览器并发送HTTP请求到例如 test.com 。我希望被重定向到 example.com 。但我收到一条错误消息
ERR_TOO_MANY_REDIRECTS
有人知道如何解决这个问题吗?我可以通过完全不同的方法来解决我的问题!
答案 0 :(得分:0)
您的iptables规则会创建一个循环,因此请求FROM代理会再次发送给自己。
您应该通过从规则中排除代理源IP来避免这种情况:
iptables -t nat -A PREROUTING -i eth0 -s ! <Your proxy IP> -p tcp 80 -j DNAT 192.168.1.1:8126