在squid.conf中添加
url_rewrite_program /etc/squid/redirect.pl ##重定向perl程序
redirect_rewrites_host_header off ##禁止squid做host更新
redirect_children 20 ##启用20个进程
再看这个redirect.pl
#!/usr/bin/perl
$|=1;
while (<>) {
@X = split;
$url = $X[0];
if ($url =~ /^http:\/\/www\.baidu\.com/) {
print “302:https:\/\/www\.google\.com\n”;
}
elsif ($url =~ /^http:\/\/opvps\.com/) {
print “302:http:\/\/www\.opvps\.com\n”;
}
elsif ($url =~ /^http:\/\/gmail\.com/) {
print “302:https:\/\/gmail\.google\.com\n”;
}
else {
print “$url\n”;
}
}
程序实现如下功能:
将http://www.baidu.com
转向http://www.google.com
将http://opvps.com
及www变成http://www.opvps.com
将http://gmail.com
变成https://gmail.google.com
重定向acl匹配:
正常情况下,squid将每个请求发送往重定向器。可以使用redirector_access规则来有选择的发送某些请求。语法与http_access相同:
redirector_access allow|deny [!]ACLname
例如:
acl opvps src 192.168.1.5
acl All src 0/0
redirector_access deny opvps
redirector_access allow All
在该情形里,对匹配opvps(来源于192.168.0.5的主机)的请求,Squid跳过重定向器。
-----------------------------------------------------------------------
大家都知道,读写放在内存里面文件的速度远远快于放在硬盘,放在内存中基本上不存在IO读写等待的问题。当然放在内存上,机器一当重启,内存中的文件就会丢失了,适合于存放一些Cache 如squid的 cache目录
大多数的Linux发行版本中,内存盘默认使用的是/dev/shm 大小一般等同于内存的大小
当然我也可以重设这个盘的大小,使用
mount -o remount,size=3G /dev/shm
这样/dev/shm就成为3G了
其实我们可以直接把文件放到/dev/shm下使用的
下面,我将squid 的cache 目录挂在内存盘中使用
mount -t tmpfs -o size=3G,mode=0755 tmpfs /usr/local/squid/var/cache
在/etc/fstab中加入一行,实行每次启动自动挂载内存盘
tmpfs /usr/local/squid/var/cache tmpfs size=3G,mode=0755 0 0
当然,squid的cache的权限需要更改,每次启动需要更改目录权限及重建cache目录,需要执行如下指令
chown -R nobody:nobody /usr/local/squid/var/cache #这里的squid是使用nobody用户的
/usr/local/squid/sbin/squid -z ##重建cache
这样linux的内存盘就用启来了
-----------------------------------------------------
新到服务器Dell1900,2G内存,正好用来做squid代理服务器,用内存盘做ramdisk,以减少I/O瓶颈,FreeBSD 6.2的OS,先vi /etc/fstab,加入'md /ramdisk mfs rw,noatime,-s512M 0 0',但是这样的话,每次机器重启由于没有cache目录结构了,导致squid没法启动,需要手动squid -z,于是修改/usr/local/etc/rc.d/squid启动脚本如下,注意蓝色部分是添加的自动创建cache目录。
squid_checkrunning() { ${command} ${squid_flags} -k check 2>/dev/null } squid_stop() { echo "Stopping ${name}." ${command} ${squid_flags} -k shutdown run_rc_command poll } . /etc/rc.subr name=squid rcvar=${name}_enable command=/usr/local/sbin/squid extra_commands=reload reload_cmd="${command} ${squid_flags} -k reconfigure" stop_precmd="squid_checkrunning" stop_cmd="squid_stop" load_rc_config ${name} squid_chdir=${squid_chdir:-/usr/local/squid/logs} squid_enable=${squid_enable:-"NO"} squid_flags=${squid_flags-"-D"} squid_user=${squid_user:-squid} default_config=/usr/local/etc/squid/squid.conf required_dirs=${squid_chdir} # squid(8) will not start if ${default_config} is not present so try # to catch that beforehand via ${required_files} rather than make # squid(8) crash. # If you remove the default configuration file make sure to add # '-f /path/to/your/squid.conf' to squid_flags if [ -z "${squid_flags}" ]; then required_files=${default_config} fi cache_dir="/ramdisk/00" if [ ! -d $cache_dir ]; then /usr/local/sbin/squid -z fi run_rc_command "$1"