重定向器
重定向器是squid的外部程序,它重写来自客户请求的URI。例如,尽管某个用户请求这个页面:http: //www.example.com/page1.html ,重定向器可以将请求改变到别的地方,例如:http://www.example.com/page2.html。squid自动抓取新的URI,就像是客户端的原始请求一样。假如响应可被缓存,squid将它存储在新的URI下。
原理:
它从标准输入里读取URI和其他信息,并将新的URI写往标准输出
注意:
1、重定向的url头部一般加上301或者302
例如:将www.baidu.com重定向到www.hao123.com
新的url为:302:http://www.hao123.com
2、重定向程序需要写绝对路径,并且有执行权限
重定向器接口
重定向器在其标准输入里,每次一行的接受来自squid的数据。每行包括下列四个元素,以空格分开:
1)请求URI
2)客户IP地址和完全可验证域名
3)用户名,通过RFC 1413 ident或代理验证
4)HTTP请求方式
例如:http://www.example.com/page1.html192.168.2.3/user.host.name jabroni GET
http://www.example.com/page1.html 192.168.2.3/- jabroni GET
配置:
url_rewrite_program url_rewrite_program/usr/bin/python /adcdn/squid/bin/redirect_url.py #指定重定向程序的命令行
url_rewrite_children5 #指令指定squid应该开启多少重定向进程。
url_rewrite_host_header off #正常情况下,squid在使用重定向器时,会更新请求的Host头部。也就是说,假如重定向器返回的新URI里包含不同的主机名,squid将新的 主机名放在Host头部。假如使用squid作为代理人,你也许想将 redirect_rewrites_host_header指令设为off来禁止这种行为
redirector_access allow|deny [!]ACLname ...
例如:
acl Foo src 192.168.1.0/24
redirector_access deny Foo
redirector_bypass on #激活了redirector_bypass指令,squid在所有重定向器忙碌时,会绕过它们
url_rewrite_concurrency 0
以上配置好之后,出现错误,都会存于cache.log中
示例程序
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
'''
Created on 2015-8-7
@author: wfj
'''
import sys
def redirect_url(request):
_l_temp = request.split()
url = _l_temp[0]
if url.find('news') != -1:
new_request = '302:http://www.hao123.com/'
elif url.find('taobao') != -1:
new_request = '302:http://www.sina.com.cn/'
else:
new_request = ''
return new_request
def main():
line = sys.stdin.readline().strip()
while line:
line = redirect_url(line)
line = line+'\n'
sys.stdout.write(line)
sys.stdout.flush()
line = sys.stdin.readline().strip()
if __name__ == '__main__':
main()