squid代理服务器应用
1. squid代理服务器概述
1.1 squid简介
squid是一个支持http、https、ftp等服务的web缓存代理软件,通过缓存页面实现降低宽带占用提高页面响应时间。另外,squid提供访问控制,squid的缓存页面存放在内存和硬盘中,在选择服务器时候内存和硬盘要求高,对于数据过期更新,需要不定期的清理缓存的数据。
1.2. squid 代码请求流程
1 客户端访问squid代理服务器
2 代理服务器代表客户端访问后端真实服务器
3 真实服务器把数据返回给squid代理服务器
4 代理服务器把响应数据发送给客户端,并把页面缓存在本地的内存及磁盘中
5 客户端再次请求相同数据时,代理服务器直接将缓存的数据返回给客户端
1.3 squid代理服务类型
一般分三种类型,正向代理服务器、透明代理服务器、反向代理服务器。
正向代理:主要应用于内部网络访问外部网络时缓存页面数据,提供统一网络接口链接到外网,所有的内网客户端无需配置外网ip即可通过squid上网,在这种模式下,squid主要负责提供缓存加速及访问控制的功能
透明代理:与正向代理类似,不需要终端用户进行特殊设置,需要结合网关部署,所有操作均由管理员在网关服务器和代理服务器进行设置,这些对于用户透明的。
反向代理:反向代理结合智能DNS可以实现基本的CDN框架,此时的squid代理服务器可以直接代表后端真实服务器提供页面访问,用户并感觉不到自己是在访问代理服务器,有利于减轻真实服务器压力,提高并发和响应速度。
2. 实验
2.1 案例环境
node1 20.0.0.15
node2 20.0.0.16
squid 20.0.0.14
要求:客户机访问web服务器,通过代理服务器squid访问,不直接访问web服务器
2.2 传统代理
安装squid服务
[root@localhost ~]# hostnamectl set-hostname squid ##改主机名
[root@localhost ~]# su
[root@localhost ~]# tar zxvf squid-3.4.6.tar.gz -C /opt ###解压软件包
[root@localhost ~]#cd /opt/
[root@opt~]#cd squid-3.4.6/
[root@opt~]#yum -y install gcc gcc-c++ make ##下载编译器
[root@squid squid-3.4.6]# ./configure \
--prefix=/usr/local/squid \ ###安装目录
--sysconfdir=/etc \ ###配置位置存在目录
--enable-arp-acl \ ###启用acl访问控制列表
--enable-linux-netfilter \ ###内核过滤
--enable-linux-tproxy \ ###支持透明代理
--enable-async-io=100 \ ###io的优化
--enable-err-language="Simplify_Chinese" \ ##支持语言,报错提示简体中文
--enable-underscore \ ##url支持下划线
--enable-poll \ ###一个函数 字符设备驱动函数
--enable-gnuregex ##支持正则表达式
[root@squid squid-3.4.6]# make -j4 && make install ###编译并安装
[root@squid squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ ###让可用命令让系统所能识别
[root@squid squid-3.4.6]# useradd -M -s /sbin/nologin squid ###建立一个程序性用户
[root@squid squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/ ###给用户一个权限
[root@squid squid-3.4.6]# vim /etc/squid.conf ###改主配置文件
#http_access deny all ###默认拒绝所有,注销掉,或者放下面,从上往下读,不会拒绝掉
http_access allow all ###加上这条allow,允许所有终端来访问,并且可用访问其他的源端服务器
http_port 3128
cache_effective_user squid ###在端口下面加上缓存管理用户
cache_effective_group squid ###在端口下面加上缓存管理组
[root@squid squid-3.4.6]# squid -k parse ###检查配置文件语法
[root@squid squid-3.4.6]# squid -z ###初始化缓存目录
[root@squid squid-3.4.6]# squid ###启动服务
[root@squid squid-3.4.6]# netstat -anpt | grep 3128 ###可用查看一下启动了
root@squid squid-3.4.6]# cd /etc/init.d/
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid" ##PID文件进程号
CONF="/etc/squid.conf" ##主配置文件
CMD="/usr/local/squid/sbin/squid" ##启动命令
[root@squid init.d]# vim squid
case "$1" in
start)
netstat -ntap | grep squid &> /dev/null
if [ $? -eq 0 ]
then
echo "squid is running"
else
echo "正在启动 squid...."
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null ##关闭squid
rm -rf $PID &> /dev/null ##删除PID文件
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -ntap |