![使用 url_rewriter 和本地 apache 脚本进行 youtube 缓存时,squid + tproxy 无法正常工作](https://linux22.com/image/581872/%E4%BD%BF%E7%94%A8%20url_rewriter%20%E5%92%8C%E6%9C%AC%E5%9C%B0%20apache%20%E8%84%9A%E6%9C%AC%E8%BF%9B%E8%A1%8C%20youtube%20%E7%BC%93%E5%AD%98%E6%97%B6%EF%BC%8Csquid%20%2B%20tproxy%20%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
我正在使用 squid 透明代理进行缓存,并且还使用 url_rewrite 和在与 squid 相同的机器上运行的 apache 脚本完成了 youtube 缓存。
一切都运行良好,直到我决定使用 TPROXY,因为它有很多好处。当我在 iptables 中实施 tproxy 规则时,除了播放 YouTube 视频(url_rewriter 和 apache 脚本发挥作用)之外,一切都继续正常工作。url_rewriter 将 YouTube 请求重定向到在 Apache 上运行的本地 .php 脚本(在同一台机器上)
我认为这与 squid 如何与本地 apache 进程(youtube 缓存软件的工作地点)进行通信有关,而 tproxy 以某种方式搞砸了这一切,因为在实施 tproxy 之后,对 Apache 的请求是使用 USER-IP 发送的(以前没有 tproxy,而是使用 SQUID-IP),而来自 apache 脚本的回复可能直接发送给用户,而不是通过 squid 进程返回。
此外,apache 脚本应该能够自由地与真正的 youtube 服务器通信,以从那里获取视频。
以下是我对 tproxy 的规则,但我认为它们非常标准:
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 8081
echo 1 > /proc/sys/net/ipv4/ip_forward
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
系统是UBUNTU 12.04,带有squid版本3.1.19。
有谁遇到过同样的问题并最终使用 Squid 选项或 iptables 规则找到了解决办法?