Squild 反向代理搭建

简介

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

创建普通用户

1
2
groupadd squid
useradd -g squid -s /sbin/nologin -M squid

下载源码包

1
wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.25.tar.gz

解压

1
2
tar zxvf squid-3.5.25.tar.gz
cd squid-3.5.25

编译

1
./configure --prefix=/usr/local/squid --enable-gnuregex --enable-icmp --enable-linux-netfilter --enable-default-err-language="Simplify_Chinese" --enable-kill-parent-hack --enable-cache-digests --enable-dlmalloc --enable-poll --enable-async-io=240 --enable-delay-pools --with-filedescriptors=65536 --enable-snmp --enable-arp-acl --with-large-files

安装

1
make -j4 && make install

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
cd /usr/local/squid/etc/
chown -R squid:squid /usr/local/squid/var
tee squid.conf << EOF
#配置squid服务的用户和组
cache_effective_user squid
cache_effective_group squid
#配置squid监听在80端口,accel是使用加速模式,vhost是使用虚拟主机
http_port 80 accel vhost vport
#定义后端web服务器,如果有多台可以写多个。这里指当用户访问80端口时,squid向127.0.0.1的81端口发送请求
cache_peer 127.0.0.1 parent 81 0 no-query originserver round-robin name=node1
http_access allow all
#定义缓存所使用的最大内存
cache_mem 128 MB
#定义最大缓存对象为10MB
maximum_object_size 10240 KB
#定义日志
cache_log /usr/local/squid/var/logs/cache.log
cache_dir ufs /usr/local/squid/var/cache 128 16 256
#定义访问控制元素
#定义名为manage的元素,类型为proto(url访问协议),cache_object机制是squid的特性它用于访问squid的缓存管理接口
#acl manager proto cache_object
#定义名为localhost的元素,类型为src(源地址),定义源地址为127.0.0.1/32
#acl localhost src 127.0.0.1/32
#定义名称为Safe_ports的元素,类型为port,指定的port值为8080、80
acl Safe_ports port 8080 # proxy
acl Safe_ports port 80 # Web
#定义名为SSL_port的元素,类型为port,值为443
acl SSL_ports port 443 #https
#定义名为Purge,类型为method(http的请求方法),PURGE是squid的特殊方法,能强制删除缓存对象
acl Purge method PURGE
#定义名为CONNECT的元素,类型为method,CONNECT指定的方法
acl CONNECT method CONNECT
#根据定义好的元素创建访问控制列表
#运行任意的http访问
http_access allow all
#只允许本地访问manager元素,用于管理squid
http_access allow manager localhost
#拒绝其他客户端访问manager
http_access deny manager
#拒绝在Safe_ports定义之外的端口的访问
http_access deny !Safe_ports
#拒绝非443端口的connect方法
http_access deny CONNECT !SSL_ports
#只允许本地使用purge元素中定义的地址清除缓存
http_access allow Purge localhost
http_access deny Purge
http_access deny all
icp_access allow all
EOF

初始化

1
2
3
4
#检查配置文件
/usr/local/squid/sbin/squid -Nk parse
#生成缓存目录
/usr/local/squid/sbin/squid –N -z

启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#创建自启动文件
tee /etc/init.d/squid << EOF
#!/bin/bash
#chkconfig: 345 61 61
# description: squid is a web cache server
# processname: squid
. /etc/rc.d/init.d/functions
case $1 in
"start") /usr/local/squid/sbin/squid
if [ $? == "0" ];then
echo "squid start ok"
else
echo "please check the log"
fi
;;
"stop") /usr/local/squid/sbin/squid -k shutdown
if [ $? == "0" ];then
echo "squid stop ok"
else
echo "please check the log"
fi
;;
"restart")
/usr/local/squid/sbin/squid -k restart
if [ $? == "0" ];then
echo "squid restart ok"
else
echo "please check the log"
fi
;;
*)
echo "Usage only start|stop|restart"
;;
esac
EOF
#添加可执行权限
chmod +x /etc/init.d/squid
#添加到开机自启动
chkconfig --add squid
#启动服务
/etc/init.d/squid start

验证

浏览器访问squid,可以看到第一次访问并没有命中缓存

我们再次刷新一遍再看,这个时候再看已经有缓存并且命中了

坚持原创技术分享,您的支持将鼓励我继续创作!