一、实验构成
构成 |
---|
squid反向代理服务器 20.0.0.21 |
node1 web服务器 20.0.0.24 |
node 2 web服务器20.0.0.26 |
win10测试机 20.0.0.28 |
需求:
在win10机上测试能在两个web上来回切换
二、squid反向代理实验
首先把所有防火墙规则清空,核心防护关闭
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -F
[root@localhost ~]# setenforce 0
2.1squid服务器安装与基础配置
- 准备安装包squid-3.4.6.tar.gz,解压
[root@localhost opt]# tar zxvf squid-3.4.6.tar.gz
- 配置参数
[root@localhost opt]# cd squid-3.4.6/
./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex
- 编译安装
[root@squid squid-3.4.6]# make && make install
- 配置软链接 ,添加程序用户,更改目录权限
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var/
- 配置文件修改
[root@localhost ~]# vim /etc/squid.conf
esc --> :set nu显示行号
56 http_access allow all 把allow加在上面
57 #http_access deny all 把原来的deny注释掉
http_port 3128 在端口下添加
cache_effective_user squid ###缓存管理的用户
cache_effective_group squid ###缓存管理的组
- 检查语法
[root@localhost ~]# squid -k parse
- 初始化
[root@localhost ~]# squid -z ##有点慢,耐心等待
- 添加启动脚本,交给service管理
[root@localhost ~]# vim /etc/init.d/squid
PID="/usr/local/squid/var/run/squid.pid" ##PID文件进程号
CONF="/etc/squid.conf" ##主配置文件
CMD="/usr/local/squid/sbin/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 | 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|reload|status|check|restart}"
;;
esac
"/etc/rc.d/init.d/squid" [新] 46L, 1406C 已写入
[root@localhost init.d]# chmod +x squid
[root@localhost init.d]# chkconfig --add squid
[root@localhost init.d]# chkconfig --level 35 squid on
- 启动
[root@localhost ~]# squid
[root@localhost ~]# netstat -anpt | grep 3128
tcp6 0 0 :::3128 :::* LISTEN 86267/(squid-1)
2.2web1
- 安装httpd服务
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# netstat -anpt | grep 80
tcp6 0 0 :::80 :::* LISTEN 66409/httpd
- 添加测试页内容,两个web内容设置不一样,方便查看是哪个web
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is web1</h1>
- 测试一下网页
2.3web2
- 安装httpd服务
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# netstat -anpt | grep 80
tcp6 0 0 :::80 :::* LISTEN 53048/httpd
- 添加测试页内容
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is web2</h1>
- 测试一下网页
2.4squid服务器反向代理配置
- 配置文件
vim /etc/squid.conf
http_port 3128####这条删掉,在这条的位置添加下面几条
http_port 20.0.0.21:80 accel vhost vport
cache_peer 20.0.0.24 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 20.0.0.26 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com
wq保存
重启
root@localhost init.d]# service squid stop
[root@localhost init.d]# service squid start
[root@localhost init.d]# netstat -anpt | grep squid
tcp 0 0 20.0.0.21:80 0.0.0.0:* LISTEN 86595/(squid-1)
2.5在squid服务器上做域名解析
- 安装bind包
[root@localhost ~]# yum -y install bind
- 主配置文件named.conf
[root@localhost ~]# vim /etc/named.conf
- 区域配置文件named.rfc1912.zones
[root@localhost ~]# vim /etc/named.rfc1912.zones
- 区域数据配置文件yun.com.zone
[root@localhost ~]# cd /var/named
[root@localhost named]# ll
总用量 16
drwxrwx---. 2 named named 6 8月 4 2017 data
drwxrwx---. 2 named named 6 8月 4 2017 dynamic
-rw-r-----. 1 root named 2281 5月 22 2017 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 6 8月 4 2017 slaves
[root@localhost named]# cp -p named.localhost yun.com.zone ##保留属性拷贝模板
[root@localhost named]# vim yun.com.zone
- 启动
[root@localhost named]# systemctl restart named
[root@localhost named]# netstat -antp | grep named
tcp 0 0 20.0.0.21:53 0.0.0.0:* LISTEN 86869/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 86869/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 86869/named
tcp6 0 0 ::1:53 :::* LISTEN 86869/named
tcp6 0 0 ::1:953 :::* LISTEN 86869/named
2.6验证
- 把客户机的dns设置为squid服务器地址
- 网页访问www.yun.com
可以看到随机出现,实现反向代理
三、sarg日志分析
- 先装gd库
[root@localhost ~]# yum -y install gd gd-devel
- 准备安装包sarg-2.3.7.tar.gz到/opt目录下
- 安装
[root@localhost opt]# tar zxvf sarg-2.3.7.tar.gz
[root@localhost opt]# mkdir /usr/local/sarg ##创建工作目录
[root@localhost opt]# cd sarg-2.3.7/
[root@localhost sarg-2.3.7]# ./configure --prefix=/usr/local/sarg \
--sysconfdir=/etc/sarg \
--enable-extraprotection ##额外安全防护
[root@localhost sarg-2.3.7]# make && make install
- 修改配置文件
[root@localhost sarg-2.3.7]# cd /etc/sarg
[root@localhost sarg]# vim 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 ## 报告输出目录(需要自己创建目录)生成网页html文件
178: user_ip no ## 使用用户名显示
184: topuser_sort_field connect reverse ## top排序中有连接次数、访问字节、降序reverse排序 升序是normal
190:# user_sort_field connect reverse ## 注释掉,和上面的有一个就行了,用户访问记录、连接次数、访问字节按降序排序
206: exclude_hosts /usr/local/sarg/noreport ## 不计入排序的站点列表文件
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 ## 网页根目录
- 安装httpd服务
[root@localhost sarg]# yum -y install httpd
- 添加不计入站点文件,添加软链接
[root@localhost sarg]# touch /usr/local/sarg/noreport
[root@localhost sarg]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
- 开启sarg
[root@localhost sarg]# sarg
SARG: 纪录在文件: 6, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2020Nov03-2020Nov03
[root@localhost sarg]# cd /var/www/html
[root@localhost html]# ls
squid-reports
- 开启httpd
[root@localhost html]# systemctl start httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
发现启不来
端口被占用,要换端口号
vim /etc/squid.conf
把倾听端口改为8080
重启squid服务
[root@localhost html]# service squid restart
正在关闭 squid...
正在启动 squid...
[root@localhost html]# netstat -anpt | grep squid
[root@localhost html]# netstat -anpt | grep squid
tcp 0 0 20.0.0.21:8080 0.0.0.0:* LISTEN 89499/(squid-1)
开启httpd
[root@localhost html]# systemctl start httpd
[root@localhost html]# netstat -anpt | grep 80
tcp 0 0 20.0.0.21:8080 0.0.0.0:* LISTEN 89499/(squid-1)
tcp6 0 0 :::80 :::* LISTEN 89521/httpd
反向代理正常
- 查看日志分析页面
看到了客户端访问情况
- 手动生成新日志报告
[root@localhost html]# 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)
刷新页面
- 周期性计划性任务
crontab -e
0 0 * * * /bin/bash /usr/local/bin/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)