squid 重定向器

重定向器

         重定向器是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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值