这是我第一次设置 squid。它运行一个重定向脚本,在 html 页面上执行一些文本搜索/替换,然后将它们保存到同一台机器上 nginx 路径上的某个位置 - 然后发出到该 URL 的重定向(这是一个艺术项目 :D)。
squid.conf 中的相关行是
http_port 3128 transparent
redirect_program /etc/squid/jefferson_redirect.py
jefferson_redirect.py 脚本基于此脚本:http://gofedora.com/how-to-write-custom-redirector-rewritor-plugin-squid-python/
问题:
我遇到了奇怪的 http 重定向行为。例如,以下是来自 PHP 脚本的正常请求/响应,该脚本发出 header("Location:"); - 302 重定向:
http://redirector.mysite.com/?unicmd=g+yreka
GET /?unicmd=g+yreka HTTP/1.1
Host: redirector.mysite.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100330 Fedora/3.5.9-1.fc12 Firefox/3.5.9
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.1 302 Found
Date: Tue, 13 Apr 2010 05:15:43 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Location: http://www.google.com/search?q=yreka
Content-Type: text/html
Vary: User-Agent,Accept-Encoding
Content-Encoding: gzip
Content-Length: 2108
Keep-Alive: timeout=3, max=100
Connection: Keep-Alive
这是通过 squid 代理运行时的样子(请注意,“redirector.mysite.com”不是运行 squid 或 nginx 的站点):
http://redirector.mysite.com/?unicmd=g+yreka
GET /?unicmd=g+yreka HTTP/1.1
Host: redirector.mysite.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100330 Fedora/3.5.9-1.fc12 Firefox/3.5.9
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
If-Modified-Since: Tue, 13 Apr 2010 05:21:02 GMT
HTTP/1.0 200 OK
Server: nginx/0.7.62
Date: Tue, 13 Apr 2010 05:21:10 GMT
Content-Type: text/html
Content-Length: 17865
Last-Modified: Tue, 13 Apr 2010 05:21:10 GMT
Accept-Ranges: bytes
X-Cache: MISS from jefferson
X-Cache-Lookup: HIT from jefferson:3128
Via: 1.1 jefferson:3128 (squid/2.7.STABLE6)
Connection: keep-alive
Proxy-Connection: keep-alive
它基本上可以正常工作 - 但是 URLhttp://redirector.mysite.com/?unicmd=g+yreka保持不变,同时显示 google 页面(大部分损坏,因为它使用相对于 redirector.mysite.com 的 URL)
我在谷歌结果页面上遇到过类似的事情:当点击谷歌的另一个页面时,我得到了一个谷歌网址,其中包含其他网站的内容。
抱歉,这篇文章太长了 - 如果你读到这里,非常感谢!有什么想法吗?
答案1
我想我理解你的困惑。它确实有效,但不如你所期望的那样。
SQUID 实际上不会使用该redirect_program
指令进行重定向,而是进行重写。例如:
www.domain.com 指向 SQUID 可用的 IP
SQUID 通过管道传输请求redirect_program
SQUID 将 www.domain.com/dir1/ 重写为 server1,将 www.domain.com/dir2/ 重写为 server2。
由于 SQUID 不会重定向,因此客户端始终看到相同的内容。
希望这很清楚。如果您想要的是重定向功能,您可以考虑使用 Apache 的 mod_rewrite。它更适合重定向功能。