缓存网页对象,减少重复请求
注意:Squid代理服务器和源站服务器之间跑的就是BGP。
主机 | IP地址 |
---|---|
Squid代理服务器 | 172.16.1.10 |
Web网站服务(源主机) | 172.16.1.20 |
客户机 | 172.16.1.30 |
# 安装环境依赖包
[root@squid ~]# yum -y install gcc gcc-c++ make pcre pcre-devel zlib-devel perl
# 编译安装squid软件包
[root@squid ~]# tar squid-3.5.23.tar.gz
[root@squid ~]# cd squid-3.5.23
[root@squid squid-3.5.23]# ./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 \ #支持下划线
--enable-poll \ #默认使用poll模式,开启epoll模式时提升性能
--enable-gnuregex #支持正则表达式
[root@squid squid-3.5.23]# make && make install
# 制作软连接,优化路径
[root@squid ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
# 创建squid用户以及设定属主属组
[root@squid ~]# useradd -M -s /sbin/nologin squid
[root@squid ~]# chown -R squid.squid /usr/local/squid/var/
[root@squid ~]# vi /etc/squid.conf
cache_effective_user squid #添加指定程序用户
cache_effective_group squid #添加指定账号基本组
# 检查配置文件语法
[root@squid ~]# squid -k parse
# 初始化缓存目录
[root@squid ~]# squid -z
# 启动服务
[root@squid ~]# squid
[root@squid ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 91942/(squid-1)
[root@squid ~]# chmod +x /etc/init.d/squid
[root@squid ~]# chkconfig --add squid
[root@squid ~]# chkconfig --level 35 squid on
[root@squid ~]# systemctl status squid
# 添加服务到service管
[root@squid ~]# vi /etc/init.d/squid
#!/bin/bash
#chkconfig: - 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 -natp | 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
;;
status)
[ -f $PID ] &> /dev/null
if [ $? -eq 0 ]
then
netstat -natp | grep squid
else
echo "squid is not running"
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭 squid..."
$0 start &> /dev/null
echo "正在启动 squid..."
;;
reload)
$CMD -k reconfigure
;;
check)
$CMD -k parse
;;
*)
echo "用法:$0{start|stop|status|reload|check|restart}"
;;
esac
[root@squid ~]# chmod +x /etc/init.d/squid
[root@squid ~]# chkconfig --add squid
[root@squid ~]# chkconfig --level 35 squid on
# 配置传统代理
[root@squid ~]# vi /etc/squid.conf
# And finally deny all other access to this proxy
http_access allow all #添加
http_access deny all
# Squid normally listens to port 3128
http_port 3128
cache_mem 64 MB #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB #允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
[root@squid ~]# setenforce 0
[root@squid ~]# iptables -F
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# systemctl restart squid
[root@web-1 ~]# yum -y install httpd
[root@web-1 ~]# echo "Web-1" > /var/www/html/index.html
[root@web-1 ~]# iptables -F
[root@web-1 ~]# setenforce 0
[root@web-1 ~]# systemctl start httpd
[root@web-1 ~]# netstat -anpt | grep 80
tcp6 0 0 :::80 :::* LISTEN 5980/httpd
[root@web-1 ~]# tail -f /var/log/httpd/access_log
在搭建的传统代理基础上做如下修改:
(1)squid服务器添加一块网卡:192.168.11.10(仅主机模式);开启路由转发功能
开启透明代理;配置防火墙规则;
(2)web服务器不变;
(3)客户端IP地址修改为192.168.11.20,且浏览器关闭手动代理设置
主机 | IP地址 |
---|---|
Squid代理服务器 | 172.16.1.10 、192.168.11.10 |
Web网站服务(源主机) | 172.16.1.20 |
客户机 | 192.168.11.20 |
# 开启路由转发功能
[root@squid ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@squid ~]# sysctl -p
net.ipv4.ip_forward = 1
# 修改配置文件
[root@squid ~]# vi /etc/squid.conf
http_port 192.168.11.10:3128 transparent
[root@squid ~]# systemctl restart squid
# 设置防火墙规则
[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.11.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@squid ~]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.11.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@web-1 ~]# route add -net 192.168.11.0/24 gw 172.16.1.10
[root@client ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.11.10 #网关为Squid服务器IP
[root@squid ~]# vi /etc/squid.conf
acl host src 172.16.1.20/32
http_access deny host #禁止访问,注意置顶
[root@squid ~]# systemctl restart squid
Web-1
Squid日志文件
# 安装依赖环境
[root@squid ~]# yum -y install gd
# 编译安装日志分析软件
[root@squid ~]# mkdir /usr/local/sarg
[root@squid ~]# tar zxf sarg-2.3.7.tar.gz
[root@squid ~]# cd sarg-2.3.7
[root@squid sarg-2.3.7]# ./configure \
> --prefix=/usr/local/sarg \
> --sysconfdir=/etc/sarg \ #配置文件目录,默认是/usr/local/etc
> --enable-extraprotection #添加额外的安全保护
[root@squid sarg-2.3.7]# make && make install
# 修改配置文件
[root@squid ~]# vi /etc/sarg/sarg.conf
7/ access_log /usr/local/squid/var/logs/access.log #指定访问日志文件
25/ title "Squid User Access Reports" #网页标题
120/ output_dir /var/www/html/squid-reports #报告输出目录
178/ user_ip no #使用用户名显示
206/ exclude_hosts /usr/local/sarg/noreport #不计入排序的站点列表文件
184/ topuser_sort_field connect reverse #top排序中有连接次数、访问字节、降序排列 升序是normal
(注释掉)190/ # user_sort_field reverse #用户访问记录 连接次数、访问字节按降序排序
257/ overwrite_report no #同名日志是否覆盖
289/ mail_utility mailq.postfix #发送邮件报告命令
434/ charset UTF-8 #使用字符集
518/ weekdays 0-6 #top排行的星期周期
525/ hours 0-23 #top排行的时间周期
633/ www_document_root /var/www/html #网页根目录
# 添加不计入站点文件,添加的域名将不被显示在排序中
[root@squid ~]# touch /usr/local/sarg/noreport
# 优化启动项并启动服务
[root@squid ~]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
[root@squid ~]# sarg
SARG: 纪录在文件: 83, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Nov09-2020Nov10
# 安装并启动http服务
[root@squid ~]# yum -y install httpd
[root@squid ~]# systemctl start httpd
[root@squid ~]# sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
SARG: TAG: access_log /usr/local/squid/var/logs/access.log
SARG: TAG: title "Squid User Access Reports"
SARG: TAG: output_dir /var/www/html/squid-reports
SARG: TAG: user_ip no
SARG: TAG: topuser_sort_field BYTES reverse
SARG: TAG: exclude_hosts none
SARG: TAG: overwrite_report no
SARG: TAG: mail_utility mailx
SARG: TAG: charset Latin1
SARG: TAG: weekdays 0-6
SARG: TAG: hours 0-23
SARG: TAG: www_document_root /var/www/html
SARG: 纪录在文件: 83, reading: 100.00%
SARG: 期间被日志文件覆盖: 09/11/2020 - 10/11/2020
SARG: (info) date=10/11/2020
SARG: (info) period=2020 11月 09-2020 11月 10
SARG: (info) outdirname=/var/www/html/squid-reports//2020Nov09-2020Nov10
SARG: (info) Dansguardian report not produced because no dansguardian configuration file was provided
SARG: (info) No redirector logs provided to produce that kind of report
SARG: (info) No downloaded files to report
SARG: (info) Authentication failures report not produced because it is empty
SARG: (info) Redirector report not generated because it is empty
SARG: 成功的生成报告在 /var/www/html/squid-reports//2020Nov09-2020Nov10
[root@squid ~]# crontab -e
30 22 * * * sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)
# 测试在浏览器输入 20.0.0.20/squid-reports/,又会出现一条新的访问记录,然后查看/var/www/html/squid-reports文件
[root@squid ~]# cd /var/www/html/squid-reports/
[root@squid squid-reports]# ll
总用量 8
drwxr-xr-x. 6 root root 236 11月 10 15:14 2020Nov09-2020Nov10
drwxr-xr-x. 6 root root 236 11月 10 15:07 2020Nov09-2020Nov10.1
drwxr-xr-x. 2 root root 92 11月 10 15:07 images
-rw-r--r--. 1 root root 4685 11月 10 15:14 index.html
主机 | IP地址 |
---|---|
Squid代理服务器 | 172.16.1.10 |
Web-1 | 172.16.1.20 |
Web-2 | 172.16.1.30 |
[root@web-1 ~]# yum -y install httpd
[root@web-1 ~]# echo "Web-1" > /var/www/html/index.html
[root@web-1 ~]# iptables -F
[root@web-1 ~]# setenforce 0
[root@web-1 ~]# systemctl start httpd
[root@web-1 ~]# route add -net 192.168.11.0/24 gw 172.16.1.10
[root@web-2 ~]# yum -y install httpd
[root@web-2 ~]# echo "Web-2" > /var/www/html/index.html
[root@web-2 ~]# iptables -F
[root@web-2 ~]# setenforce 0
[root@web-2 ~]# systemctl start httpd
[root@web-2 ~]# route add -net 192.168.11.0/24 gw 172.16.1.10
在透明模式的基础上进行反向代理
因为httpd会占用80端口,所以必须关闭squid服务器中的httpd服务
[root@squid ~]# systemctl stop httpd
[root@squid ~]# iptables -F
[root@squid ~]# iptables -t nat -F
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@squid ~]# vi /etc/squid.conf
# Squid normally listens to port 3128
http_port 172.16.1.10:80 accel vhost vport #squid外网口IP
cache_peer 172.16.1.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 172.16.1.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.cjx.com
[root@squid ~]# systemctl restart squid
Squid日志
客户机添加hosts文件映射
172.16.1.10 www.cjx.com