文章目录
一、Sequid介绍
1.Sequid是什么?
Sequid是Linux系统中最常用的一款开源代理服务软件,可以很好的实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大
2.squid的优势
- 1.提高客户端访问速度
- 2.隐蔽了内部主机的真实ip地址
- 3.部署简单,可以实现访问控制
3.squid的作用
- 1.代理上网(传统代理,透明代理)
- 2.网站静态页面缓存加速(反向代理)
二、缓存代理
1.缓存代理概述
作为应用层的代理服务软件,squid作用是给缓存网页对象,减少
2.工作过程解析
当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自已的缓存。如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机。如果缓存中没有客户机要访问的页面,则由代理服务器向lnternet发送访问请求,获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机,如图所示:
HTTP 代理的缓存加速对象主要是文字、图像等静态 Web 元素。使用缓存机制后,当 客户机在不同的时候访问同一 Web 元素,或者不同的客户机访问相同的 Web 元素时,可 以直接从代理服务器的缓存中获得结果。这样就大大减少了向 Internet 提交重复的 Web 请求的过程,提高了客户机的 Web 访问响应速度。
由于客户机的 Web 访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实 IP 地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色, 可以针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制。
3.squid代理的基本类型
- 传统代理:适用于lnternet,需明确指定服务器
- 透明代理:客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
- 反向代理
三、squid传统代理的部署
客户端必须在自已的浏览器里指定服务器的ip地址和监听的端口号,才能通过squid代理服务器上网
1.案例介绍
在服务器上构建Squid代理服务器,允许客户机指定squid代理服务器作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存
2.案例环境
安装squid服务器,在squid上安装软件
通过xshell的文件传输把redis的软件包传输上来
1.解压缩文件
[root@squid ~]# tar zxvf squid-3.5.23.tar.gz
2.配置squid
[root@squid ~]# cd squid-3.5.23/
[root@squid squid-3.5.23]# ./configure
--prefix=/usr/local/squid \ #安装路径
--sysconfdir=/etc \ #配置文件根路径
--enable-arp-acl \ #运行arp的acl
--enable-linux-netfilter \ #linux内核通过netfilter模块实现访问控制功能
--enable-linux-tproxy \ #实现透明代理功能
--enable-async-io=100 \ #异步传输输入输出数量
--enable-err-language="Simplify_Chinese" \ #用中文报错
--enable-underscore \ #允许下划线
--enable-poll \ #协调读写设备个数或读写设备顺序的函数
--enable-gnuregex #c/c++常用的正则表达式
3.编译安装
[root@squid squid-3.5.23]# make && make install
[root@squid squid-3.5.23]# cd
4.创建链接使squid命令可以在本地使用
[root@squid ~]# ln -s /usr/local/squid/sbin/* /usr/sbin/
5.创建一个不可登录,不带宿主的用户
[root@squid ~]# useradd -M -s /sbin/nologin squid
6.配置文件属主,属组
[root@squid ~]# chown -R squid.squid /usr/local/squid/var
7.编辑配置文件
[root@squid ~]# vi /etc/squid.conf
[root@squid ~]# squid -k parse #检查语法
添加
cache_effective_user squid #指定程序用户
cache_effective_group squid # 指定账号基本组
8.初始化缓存目录
[root@squid ~]# squid -z #初始化缓存目录
[root@squid ~]# squid #启动服务
[root@squid ~]# netstat -anpt | grep squid #查看端口状态
9.编写脚本,用chkconfig管理squid
[root@squid ~]# vi /etc/init.d/squid
[root@squid ~]# chmod +x /etc/init.d/squid
[root@squid ~]# chkconfig --add /etc/init.d/squid
[root@squid ~]# chkconfig --list
#!/bin/bash
#chkconfig:35 90 25
PID="/usr/local/squid/var/run/squid.pid" #进程文件路径
CONF="/etc/squid.conf" #配置文件路径
CMD="/usr/local/squid/sbin/squid" #程序绝对路径
case $1 in
start)
netstat -anpt | grep squid &> /dev/null #输出不显示
if [ $? -eq 0 ]
then echo "squid is running"
else echo "正在启动squid"
$CMD
fi
;;
stop)
$CMD -k kill &> /dev/null
rm -rf $PID &> /dev/null
;;
reload)
$CMD -k reconfigure #重新配置
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then netstat -anpt | grep squid
else echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null #先关闭后开启:重启
$0 start &> /dev/null
;;
check)
$COM -k parse #检查语法
;;
*)
echo "用法: $0{start|stop|status|restart|check|reload}"
esac
10.开启服务,查看端口状态
[root@squid ~]# systemctl stop squid
[root@squid ~]# systemctl start squid
[root@squid ~]# systemctl status squid
[root@squid ~]# netstat -anpt | grep squid
1.传统代理
1.修改配置文件
[root@squid ~]# vi /etc/squid.conf
添加
http_access allow all #允许所有(按顺序执行,先允许后拒绝)
cache_mem 64 MB #指定缓存功能所使用的内存空间大小,便于保持访问频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB #允许用户下载的最大文件大小,以字节为单位,默认设置0表示不进行限制
maximum_object_size 4096 KB #允许保持到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
2.检查语法,端口
[root@squid ~]# squid -k parse #检查语法
[root@squid ~]# systemctl stop squid
[root@squid ~]# systemctl start squid
[root@squid ~]# netstat -anpt | grep squid
3.关闭防火墙
[root@squid ~]# systemctl stop firewalld
[root@squid ~]# setenforce 0
[root@squid ~]# systemctl disable firewalld
[root@squid ~]# sed -i
'/SELINUX/s/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@squid ~]# grep -v "#" /etc/selinux/config
代理开启,客户机可以访问web服务
设置web1服务器
1.安装软件
[root@web1 ~]# yum -y install httpd
2.创建网页
[root@web1 ~]# echo "<h1>This is Web1</h1>" > /var/www/html/index.html
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# curl http://localhost
web2同上
1.安装软件
[root@web2 ~]# yum -y install httpd
2.创建网页
[root@web2 ~]# echo "<h1>This is Web2</h1>" > /var/www/html/index.html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# curl http://localhost
测试
客户机访问web服务器
192.168.1.11
192.168.1.12
3.查看web服务器上的日志
[root@web1 ~]# tail -f /var/log/httpd/access_log
[root@web2 ~]# tail -f /var/log/httpd/access_log
产生的日志都显示访问的地址是客户机地址
在客户机上设置代理服务器
打开浏览器–设置页面–首选项–高级–网络–连接设置
手动配置代理–http代理192.168.1.10端口3128
4.清除所有规则
[root@squid ~]# iptables -F #清除所有规则
[root@squid ~]# iptables -I INPUT -p TCP --dport 3128 -j ACCEPT #如防火墙关闭,运行3128端口通过
测试
再次用客户机访问web服务器
192.168.1.11
192.168.1.12
[root@web1 ~]# tail -f /var/log/httpd/access_log
[root@web2 ~]# tail -f /var/log/httpd/access_log
因为添加了代理服务器,只要访问的页面是原先已经访问过的页面已经存入代理服务器的缓存中,下一次访问原先的就不需要再发送请求给web服务器,代理服务器直接会返回请求,这样也减少了服务器的请求重复过多,减轻服务器压力