作者:Scanz
更新版本:V1(20170131初版,待更新格式)
----------------------------------------------
基本概念
Proxy,代理人、经纪人、中介
代替用户处理事物
能提供正常情况下不便或无法访问的资源
应用场景:
Web访问加速(正/反向)
IP伪装、“翻墙”
代理服务器工作机制
Cache池的复用
线路转移
Cache
↑丨
2 丨丨3
1 丨丨 5
-----> 丨↓ ----->
客户机 代理服务器 www.zyxzh.top
<----- <-----
4 6
代理服务器分类
正向代理
客户程序(如浏览器)用指定代理服务器的地址、端口
反向代理
负载均衡
Squid正向代理
Squid服务器
Squid服务端
软件包:squid-3.1.10-19.el6_4.x86_64
系统服务:squid
主程序:/usr/sbin/squid
主配置文件:/etc/squid/squid.conf
默认监听端口:TCP 3128
默认访问日志:/var/log/squid/access.log
配置文件解析
常用配置项
Visible_hostname proxy.tarena.com
http_port 3128
Access_log /var/log/squid/access.log squid
Cache_mem 64MB
Cache_dir ufs /var/spool/squid 100 16 256
储存格式 目录空间MB 一级子目录数 二级子目录数
正向代理服务器
案例环境
主机B为代理服务器
主机C通过代理访问主机A的网站
「一一一一一一一一一Internet一一一一一一一一一一一
丨 丨 丨
丨 丨 丨
主机C(客户机) 主机B(代理服务器) 主机A(网站服务器)
192.168.1.10 192.168.1.20 wwww.zyxzh.top
基本实现过程
1.配置并启用squid服务(主机B)
2.配置代理客户端(主机C)
3.测试代理Web访问(主机C)
配置并启用squid服务
[root@zyxzh ~]# vim /etc/squid/squid.conf
http_access allow all
http_port 3128
cache_dir ufs /var/spool/squid 100 16 256
visible_hostname localhost.localdomain
[root@zyxzh ~]# systemctl start squid.service
[root@zyxzh ~]# netstat -anptu | grep squid
tcp6 0 0 :::3128 :::* LISTEN 12533/(squid-1)
udp 0 0 0.0.0.0:60370 0.0.0.0:* 12533/(squid-1)
udp6 0 0 :::38440 :::* 12533/(squid-1)
客户端设置及测试
客户端设置代理服务器
测试代理Web访问
在客户端中访问http://www.zyxzh.top
查看服务器B的代理访问日志,验证来访地址
查看服务器A的Web访问日志,验证来访地址
传统正向代理
构建代理服务器192.168.4.5
1)代理192.168.4.0/24网段访问Web服务
2)客户端可以通过192.168.4.5访问Web服务器
交换机
丨
一一一一一一一一 丨一一一一一一一一一
丨 丨 丨
移动端 代理服务器 Web服务器
192.168.4.100 192.168.4.5 192.168.4.205
Squid反向代理
反向代理工作机制
与传统代理的方向相反
代替公网用户访问组织内部的Web服务器
部署基于地区的CDN服务器
Internet
丨
192.168.2.254 Squid代理 172.16.0.254
一一一丨一一一
丨 丨
Web1 Web2
192.168.2.1 192.168.2.2
反向代理服务器
准备Web服务器
实际应用时,多个源站的网页应相同
为方便测试效果,实验中可提供不同页面
Web1:显示www.zyxzh.top
Web2:显示bbs.zyxzh.top
配置反向代理服务器
注意关闭自带的httpd服务,避免冲突
将代理监听的端口修改为80
[root@zyxzh ~]# systemctl stop httpd.service
http_port 80 vhost
cache_peer 192.168.2.1 parent 80 0 originserver
cache_peer 192.168.2.2 parent 80 0 originserver
[root@zyxzh ~]# systemctl start squid.service
客户端访问测试
通过HTTP访问代理服务器的80端口
比如:elinks --dump http://172.16.0.254
实现反向代理虚拟Web主机
客户端访问www.zyxzh.top时,squid对应的源为Web1
客户端访问bbs.zyxzh.top时,squid对应的源为Web1
Internet
丨
192.168.4.5 Squid代理 176.16.0.254
丨
交换机
一一一丨一一一
丨 丨
Web1 Web2
192.168.4.205 192.168.4.200
用户
设置代理IP以及端口 访问目标的IP通过代理(代理进行访问)结果返回到用户(要有代理IP和目标IP)
反向代理
网站
访问代理的IP可以接入代理设置的IP(web)(代理IP) 缓存没有 miss(有 hit) 去服务器拿
ACL访问控制列表
基本概念
ACL(访问控制列表)
定义acl
acl 列表名称 列表类型 列表内容 ...
调用acl
http-access allow 列表名称 ...
http-access deny 列表名称 ...
ACL规则匹配顺序
未设置任何规则时,拒绝所有访问请求
已设置规则时,依次进行检查,找到匹配既停止,否则采用与最后一条规则相反的权限
常用的ACL列表类型
src 源地址
dst 目标地址 (www.qq.com)(一行一个IP 拒绝这个文件(域名也可以))
port 目标端口
dstdomain 目标域 (qq.com(整个域))
time 访问时间
maxconn 最大并发数
url_regex 目标url url:(http://192.168.4.254/a.mp4)
urlpath_regex 整个目标URL路径 (只找路径信息)
ACL应用案例
快速入门案例
禁止任何客户机使用此代理服务
[root@zyxzh ~]# vim /etc/squid/squid.conf
acl all src 0.0.0.0/0.0.0.0
http_access deny all
[root@zyxzh ~]# systemctl reload squid.service
允许多个局域网段在工作时间上网
[root@zyxzh ~]# vim /etc/squid/squid.conf
acl all src 0.0.0.0/0.0.0.0
acl MYNET src 192.168.2.0/24 192.168.3.0/24
acl WORK time MTWHF 09:30-18:30
http_access allow MYNET WORK
http_access deny all
[root@zyxzh ~]# systemctl reload squid.service
通过黑名单限制目标网站
[root@zyxzh ~]# vim /etc/squid/ipblock.list
61.135.16.36
60.28.16.0/24
[root@zyxzh ~]# vim /etc/squid/dmblock.list
.qq.com
.msn.com
[root@zyxzh ~]# vim /etc/squid/squid.conf
acl IPaddress dst "/etc/squid/ipblock.list"
acl DMname dstdomain "/etc/squid/dmblock.list"
http_access deny IPaddress
http_access deny DMname
[root@zyxzh ~]# systemctl reload squid.service
综合案例
定义控制列表
acl LAN1 src 192.168.1.0/24
acl PC1 src 192.168.1.66/32
acl Blk_Domain dstdomain .qq.com .kaixin001.com
acl Work_Hours time MTWHF 08:30-17:30
acl Max20_Conn maxconn 20
acl Blk_URL url_rege -i ^rtsp://^mms:// (-i 忽略大小写)acl mp4 url_regex .*.(mp4|avi|flv)
acl Blk_Words urlpath_regex -i sex adult
启用列表控制
http_access deny LAN1 Blk_URL
http_access deny LAN1 Blk_Words
http_access deny PC1 RealFile
http_access deny PC1 Max20_Conn
http_access allow LAN1 Work_Hours
常见问题
故障错误信息
[root@zyxzh ~]# curl --proxy 192.168.0.5:3128 http://192.168.0.5
访问被拒绝
Access control configuration prevents your request from being allowed at this time
分析故障原因
访问被squid拒绝
查看squid配置文件,检查ACL权限
Varnish 服务器
部署Varnish
概述
Varnish是一款高性能且开源的反向代理服务器和http加速器
与传统的Squid相比,Varnish具有性能更高、速度更快、管理更方便等诸多优点
挪威最大的在线报纸Verdens Gang使用3台Varnish代替了原来的12台squid,性能居然比以前更好
安装
[root@zyxzh varnish]# yum -y install epel-release
[root@zyxzh varnish]# yum -y install varnish
服务器
/usr/local/varnish/bin/varnishadm #客户端程序
/usr/local/varnish/bin/varnishstat #状态监控
配置文件解析
RELOAD_VCL=1
VARNISH_VCL_CONF=/etc/varnish/default.vcl #默认的vcl存放位置
VARNISH_LISTEN_PORT=6081 #默认端口
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 #管理IP
VARNISH_ADMIN_LISTEN_PORT=6082 #管理端口
VARNISH_SECRET_FILE=/etc/varnish/secret #密钥文件
VARNISH_STORAGE="malloc,256M" #基于内存方式256M缓存大小
VARNISH_MIN_THREADS=50 #最小线程数
VARNISH_MAX_THREADS=1000 #最大线程数
VARNISH_THREAD_TIMEOUT=120 #线程超时时间
VARNISH_STORAGE_FILE=/var/lib/varnish/varnishi_storage.bin #缓存文件的位置
VARNISH_STORAGE_SIZE=1G #设置存储的大小
VARNISH_USER=varnish
VARNISH_GROUP=varnish
缓存管理
清除缓存内容的命令格式:
varnishadm –S securefile –T IP:Port
varnish> Ban.url
v arnihadm –s /etc/varnish/secret ban.url
查看缓存清理列表:
Varnishadm ban.list
[root@zyxzh ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 #连接管理端口
Varnish日志
Varnishlog [-w file] #共享内存的日志(不管有没有人访问都有东西)
Varnishcsa [-w file] #类Apache日志 实时访问日志 (在内存里)
Varnish状态
Varnishstat
Client connections accepted:
表示客户端成功发送连接总数量
Client requests received:
客户端发送HTTP请求的总数
Cache hits:
!重要:命中缓存的次数
Cache misses
!重要:缓存非命中的个数。
N struct objects 表示当前被缓存的数量
N expired objects 表示过期的缓存内容数量
N LRU moved objects 表示被淘汰的缓存内容个数
常见问题
故障错误信息
[root@zyxzh ~]# varnishd
bind(): Address already in use
分析故障原因
端口已经被其他服务所占用
找到占用80端口的应用并关闭即可
COMMENTS | NOTHING