squid代理服务器:
Nginx也可以代理:反向代理-------负载均衡
?????????????????Nginx也可以缓存
?????????????????Nginx无法做正向
?????????????????proxy_pass 反向代理
squid:正向代理服务器。(例如vpn)
squid:正向代理,缓存加速,acl过滤控制
代理的工作机制:
squid代理的作用:
squid nginx
squid代理的类型:
????????????则,代理服务器会代理客户端向web服务器发起请求。然后再把请求的资源 ?
????????????响应给客户端。同时把响应缓存在本地,后续请求者都可以使用 ?????
区别:
SNAT和DNAT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
网络层? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
改变数据包头部的源IP地址和目的地址 ???????????
??????
??代理服务器squid
?应用层
??不改变数据包的任何信息
直接把数据包法给代理,代理通过应用层过滤的方式来实现转发。(有点像路由器)
客户端 test1:192.168.120.80
squid test2:192.168.120.110
nginx1:192.168.120.30
nginx2:192.168.120.40
安装 Squid 服务
关闭防火墙和安全机制
systemctl stop firewalld
setenforce 0
安装 Squid 服务
把两个文件拖进来
cd /opt
tar zxvf squid-3.5.28.tar.gz -C /opt/
yum -y install gcc gcc-c++ make
cd squid-3.5.28
./configure --prefix=/usr/local/squid \
#指定安装目录路径
--sysconfdir=/etc \
#指定配置文件路径
--enable-arp-acl \
#MAC地址管控,防止客户端使用IP欺骗
--enable-linux-netfilter \
#使用内核过滤
--enable-linux-tproxy \
#支持透明模式
--enable-async-io=100 \
#异步IO,提升存储性能
--enable-err-language="Simplify_Chinese" \
#错误信息的显示语言
--enable-underscore \
#允许URL中有下划线
--disable-poll \
#关闭默认使用 poll 模式
--enable-epoll \
#开启epoll模式提升性能
--enable-gnuregex
#使用GNU正则表达式
Make?-j 2 && 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/
#此目录用于存放缓存文件
配置文件的匹配规则:自上而下匹配,匹配到之后,不再向下匹配
修改 Squid 的配置文件
vim /etc/squid.conf
--56行--插入
http_access allow all
#放在 http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹
--61行--插入
cache_effective_user squid
#添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid
#添加,指定账号基本组
#检查配置文件语法是否正确
squid -k parse
#启动 Squid,第一次启动 Squid 服务时,会自动初始化缓存目录
squid -z
#-z 选项用来初始化缓存目录
squid
#启动 squid 服务
netstat -anpt | grep "squid"
vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 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
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig --level 35 squid on
35启动优先级,0-100数字越大,优先级越低
构建传统代理服务器
vim /etc/squid.conf
--63行--插入
cache_mem 2000 MB
缓存功能使用的内存空间大小,容量最好为4的倍数。单位用MB,建议是内存的四分之一reply_body_max_size 100 MB
允许用户下载的最大文件的大小。浏览器会提示请求或访问太大
maximum_object_size 100 MB
能够缓存的对象的最大值。超过这个单位不会被缓存
service squid restart
systemctl restart squid
#生产中需要给放行,这里不需要
iptables -I INPUT -p tcp --dprot -j ACCEPT???
tail -f /usr/local/squid/var/logs/access.log
客户机的代理配置
到客户端打开浏览器测试
在浏览器中配置代理
写入代理服务器的ip和端口
在squid服务器
查看 Squid 访问日志的新增记录中的缓存命中情况
tail -f /usr/local/squid/var/logs/access.log
TCP_REFRESH_UNMODIFIED/304: TCP_REFRESH_UNMODIFIED 表示该请求是由于缓存未过期,
直接返回未修改的响应。304 表示 HTTP 状态码为 304(未修改)。
透明代理:
Web:12.0.0.12
双网卡分别指向网关
回到客户端清除缓存
选择不需要代理
回到squid主机设置为双网卡
web 12.0.0.12
双网卡分别指向网关
注释掉网关和dns
vim /etc/sysconfig/network-scripts/ifcfg-ens33
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36
vim /etc/sysconfig/network-scripts/ifcfg-ens36
ip地址修改为网关
重启网卡
?systemctl restart network
到nginx1
vim ifcfg-ens33
修改网关为12.0.0.254
IP地址改为12.0.0.12
注释掉dns
重启网卡
回到squid主机
开启转发功能
vim /etc/systcl.conf
net.ipv4.ip_forwart=1
#开启转发功能
sysctl -p
vim /etc/squid.conf
注释掉原端口插入新的端
#加上支持透明的选项
重启squid服务
systemctl restart squid
#修改防火墙规则
iptables -t nat -I PREROUTING -i ens33 -s 192.168.120.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.120.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
回到客户端测试
修改一下客户机的网关
把网关指向20.0.0.20
注释掉dns
到客户机测试
透明代理:
配置ACL访问控制策略
vim /etc/squid.conf
acl myhost1 src 192.168.120.110/32
http_access deny myhost1
重启squid服务
squid -N -d1
#检测一下运行状态
mkdir /etc/squid
cd /etc/squid
vim dest.list
12.0.0.12
vim /etc/squid.conf
添加策略
acl myhost2 dst "/etc/squid/dest.list"
http_access deny myhost2
重启一下squid服务
到客户端测试一下
取消掉deny再去客户端测试一下
反向代理
在squid服务器
vim ifcfg-ens33
#打开网关和dns
还原一下nginx主机
配置两个web网页
vim /nginx/html/index.html
到客户端修改一下网关和dns
回到squid主机
iptables -F
#清空防火墙策略
vim /etc/squid.conf
http_port 192.168.120.70:80 accel vhost vport
#squid从一个缓存变成了一个web服务器的反向代理的加速模式 squid监听的80端口的请求。同时和web服务器的请求端口绑定。squid不是转发请求,要么从缓存获取数据,要么直接请求绑定的web端口
accel:反向代理开启加速模式
vhost:支持域名或主机名表示代理节点。
vport:支持ip+端口来表示代理服务器
在行后插入
cache_peer 192.168.120.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.120.40 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer 192.168.120.30
#获取失败,请求的服务器名
parent
#下级关系。80
0:表示就是一台代理服务器,不涉及运营商
no-query:不查询,直接获取数据
originserver:最大源服务器
round-robin max_conn=30 weight=1 name=web1
#squid通过轮询的方式将请求分发到其中一台父节点
max_conn=30
#最大连接数
weight=1
#轮询权重
name=web1
#设置别名
cache_peer_domain web1 web2 www.kgc.com
重启squid服务
squid -N -d1
#查看运行是否正常
netstat -antp | grep 80
#必须是80端口
如果80端口没有起来使用kill命令清除后再尝试
kill -9 68270
在客户端把代理地址做映射
vim /etc/hosts
192.168.120.70 www.kgc123.com
#做映射
测试: