【问题标题】:Apache server as a proxy using iptables使用 iptables 作为代理的 Apache 服务器
【发布时间】:2013-12-07 07:03:12
【问题描述】:

我想完成以下任务:我想在我从笔记本中请求的所有网站的顶部显示一个任务栏。在此栏上,我显示各种信息。

我的网络中有一个 Raspberry Pi,我将其配置为笔记本电脑上的网关。所以我笔记本上的所有流量都通过了树莓派。在树莓上,我安装了一个带有两个 VirtualHosts 的 Apache 服务器。一种是监听端口 80 的本地网络服务器。对于另一个,监听端口8126,我有以下规则:

  1. 如果请求中没有设置 special 参数,我将请求重定向到本地页面(以原始请求的 URI 作为参数)。在此页面上,我有一个 iframe,其中使用从参数中读出的 URI 显示最初请求的页面。为了避免无限循环,我将 special 参数添加到 iframe 中的链接。这部分工作正常。

  2. 如果未设置 special 参数(因为页面应该显示在 iframe 中),我会再次使用 *mod_rewrite* 将请求重定向到最初请求的页面。这种重定向似乎会导致问题。

所以这是我正在做的一些代码: 我使用 iptables 将端口 80 上的所有流量重定向到端口 8126192.168.1.1 是我使用的树莓派的 IP 地址,因为我无法在 PREROUTING 阶段重定向到环回接口。我使用以下 iptables 规则执行此操作:

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

有人知道我该如何解决这个问题吗?我可以使用完全不同的方法来解决我的问题!

【问题讨论】:

    标签: apache mod-rewrite proxy raspberry-pi iptables


    【解决方案1】:

    您的 iptables 规则会创建一个循环,因此来自代理的请求会再次发送给他自己。

    您应该通过从规则中排除代理源 IP 来避免这种情况:

    iptables -t nat -A PREROUTING -i eth0 -s ! <Your proxy IP> -p tcp 80 -j DNAT 192.168.1.1:8126
    

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 2015-11-23
      • 2016-10-20
      • 1970-01-01
      • 2013-05-22
      相关资源
      最近更新 更多