varnish、squid、nginx各自缓存的优缺点
◆Varnish
高性能、开源的反向代理服务器和内存缓存服务器。
优点: 1. 高性能;
2. 多核支持;
3. 支持0-60秒的精确缓存时间。
缺点: 1. 不具备自动容错和恢复功能,重启后数据丢失;
2. 在线扩容比较难。
3. 32位机器上缓存文件大小为最大2GB;
4. 不支持集群。
应用场景:并发要求不是很大的小型系统和应用。
◆Squid
很古老的反向代理软件,拥有传统代理、身份验证、流量管理等高级功能,但是配置太复杂。它算是目前互联网应用得最多的反向缓存代理服务器,工作于各大古老的cdn上。
优点: 1.完整的庞大的cache技术资料。
2.很多的应用生产环境
◆Nginx
1.不支持带参数的动态链接。
2.Nginx缓存内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,如果要缓存的东西非常多,那就会撑暴整个硬盘空间。
3.只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存,假如恰好有一个访问量很大的伪静态链接被删除,那就会不停穿透导致后端承载不小压力
4.Nginx不会自动选择内存或硬盘作为存储介质,一切由配置决定,当然在当前的操作系统里都会有操作系统级的文件缓存机制,所以存在硬盘上也不需要过分担心大并发读取造成的io性能问题。
◆总结:
缓存加速(静态加速、节省带宽、边缘推送):Varnish > Squid >Nginx
反向代理(路由加速、隐藏主节点):Nginx > Varnish > Squid
一、代理服务器的原理:
1、squid是linux系统中的一款开源代理软件,类似的带软件的有:varnish,cock5等68款代理
服务器
2、代理服务器的原理:客户端请求代理服务器、代理替客户端上网访问公网资源,并缓存资源以便于客户端再次访问。
3、squid代理的好处:
1)隐藏内部真实IP地址,提高安全性
2)减少重复请求,提高访问速度
3)通过ACL控制上网行为
4、squid代练的类型:传统代理、透明代理、反向代理
二、部署传统代理
1、特点:客户端必须指定代理服务器的IP及端口
2、部署:安装、修改配置、启动服务器客户端设置代理、访问测试
三、透明代理:
1、特点:不需要指定代理
2、优点:使用方便可控性强
3、缺点:代理服务器必须是网关
4、部署:
1)/etc/squid.conf中的http_prot ip:3128
2)设置防火墙:
iptables -t nat -I PREROUTING -s 内网网段 -p tcp --dport 80 -j REDIRECT --to 3128 #抓取内网80端口数据并使用代理
iptables -t nat -A POSTROUTING -s 内网网段 -o eth1 -j MASQUERADE #非80端口的数据使用SNAT上网
3)客户端不需要设置代理,如果设置必须取消
四、设置ACL控制:
1、acl是squid应用层的控制机制,可以针对IP、端口、URL等进行过滤处理。
2、定义acl的语法:
1)设置ACL列表:acl 列表名称 列表类型 内容
2)控制:http_access deny | allow 列表名称
3)重启squid
注意:列表类型是squid提供的,不能自定义、其他哦都是可以自定义;常见类型:src、dst(源、目的ip)、port端口、dstdomain目标域、url_regex目标URL地址、Urlpath_regex(整个URL的)路径、time时间
3、squid提供acl匹配流程:
1)顺序匹配,匹配及停止
2)如果没有匹配规则与最后一条相反,如果没有最后一条拒接访问
五、squid日志管理:sarg
1、sarg是专业分析squid日志的工具,通过分析squid的日志,生成一个html的报告文件;用户可以
通过web服务在浏览器查看到日志分析报告
2、部署:安装、生成配置文件、分析日志生成报告、结合计划任务分析数据并生成报告,访问。
注:传统代理服务器部署、透明代理服务器部署以及squid日志分析的部署详细请看文档
squid之所以用的很多,是因为它的的缓存功能,squid的缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O。从经济角度考虑,它是很多网站架构中不可或缺的角色。
squid可以做正向代理,也可以做反向代理。
当做正向代理时,squid后面是客户端,客户端想上网需经过squid。当一个客户端想要请求一个主页时,它向squid发出一个申请,要squid替它请求,然后squid连接用户要请求的网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户请求同样的页面时,squid将保存的页面立即传给用户,使用户觉得速度相当快。
使用正向代理时,客户端需要做一些设置才能实现,也就是平时我们在IE选项中设置的那个代理。
而反向代理是,squid后面是某个站点的服务器,客户端请求该站点时,会先把请求发送到squid上,然后squid去处理用户的请求动作。
正向代理后面是客户端,客户端上网要通过squid上。反向代理squid后面是服务器,服务器返回给用户的数据需要走squid。
正向代理用在企业的办公环境中,员工上网需要通过squid代理来上网,这样可以节省网络带宽资源。
而反向代理用来搭建网站静态项(图片、HTML、流媒体、JS、CSS等)的缓存服务器,它用于网站架构中。
squid正向代理:
使用centos源中自带的squid包安装:
[root@cp3 ~]# yum install -y squid
编辑squid配置文件:
[root@cp3 ~]# vim /etc/squid/squid.conf
打开注释行:
cache_dir ufs /var/spool/squid 100 16 256
说明:缓存目录为/var/spool/squid,缓存大小为100MB,该目录下有16个一级子目录,每个子目录下又有256个二级子目录。
并在其下面增加一行:
cache_mem 64 MB
注意:大小不能超过上面的总大小100MB
在最后面添加要缓存的静态项:
refresh_pattern \.(jpg|png|gif|js|css|mp3|mp4) 1440 20% 2880 ignore-reload
最后面添加代理服务器要显示的主机名:
visible_hostname test.com
启动squid:
[root@cp3 ~]# /etc/init.d/squid start
init_cache_dir /var/spool/squid... 正在启动 squid:. [确定]
查看进程和端口(默认3128):
[root@cp3 ~]# ps aux | grep squid
root 1738 0.0 0.1 15216 2688 ? Ss 05:11 0:00 squid -f /etc/squid/squid.conf
squid 1740 0.1 0.4 17816 9072 ? S 05:11 0:00 (squid) -f /etc/squid/squid.conf
squid 1742 0.0 0.0 3272 888 ? S 05:11 0:00 (unlinkd)
root 1745 0.0 0.0 5980 744 pts/0 S+ 05:12 0:00 grep squid
[root@cp3 ~]# netstat -lnp | grep squid
tcp 0 0 :::3128 :::* LISTEN 1740/(squid)
udp 0 0 0.0.0.0:40410 0.0.0.0:* 1740/(squid)
udp 0 0 :::37508 :::* 1740/(squid)
使用浏览器测试:
在浏览器中设置使用该代理:工具——Internet选项——连接——局域网设置——勾选“为LAN使用代理服务器”——高级——HTTP:192.168.147.139:3128——确定——确定——确定
使用浏览器访问www.baidu.com,可见能成功访问到百度。为了验证走的是我们的代理服务器,我们可以使用tcpdump工具抓个包看看
安装tcpdump抓包工具:
[root@cp3 ~]# yum install -y tcpdump
此时,访问百度就可以看到抓到很多包,说明确实走的是我们的代理服务器。
同时在缓存目录下产生了很多文件:
使用curl测试:
[root@cp3 ~]# curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK
Server: bfe/1.0.8.18
Date: Fri, 10 Mar 2017 13:25:23 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:02 GMT
ETag: "575e1f5a-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
X-Cache: MISS from test.com
X-Cache-Lookup: MISS from test.com:3128
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
[root@cp3 ~]# curl -x127.0.0.1:3128 www.qq.com -I
HTTP/1.0 200 OK
Server: squid/3.5.20
Date: Fri, 10 Mar 2017 13:26:13 GMT
Content-Type: text/html; charset=GB2312
Vary: Accept-Encoding
Vary: Accept-Encoding
Expires: Fri, 10 Mar 2017 13:27:13 GMT
Cache-Control: max-age=60
Vary: Accept-Encoding
Vary: Accept-Encoding
X-Cache: HIT from shanghai.qq.com
X-Cache: MISS from test.com
X-Cache-Lookup: MISS from test.com:3128
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
3128端口是可以改变的:只需要修改配置文件中的http_port 3128即可。
此时的代理是任何人都可以访问任何网站,并没有对访问进行控制,我们需要编辑配置文件进行访问限制,比如只允许员工访问.aminglinux.com和.baidu.com:
编辑配置文件:
[root@cp3 ~]# vim /etc/squid/squid.conf
添加如下白名单good_domain配置(也可以设置黑名单bad_domain):
acl http proto HTTP
acl good_domain dstdomain .aminglinux.com .baidu.com
http_access allow good_domain
http_access deny !good_domain
检查配置是否有错:
[root@cp3 ~]# squid -kcheck (或者squid -kch)
重新加载配置文件:
[root@cp3 ~]# squid -kreconfig (或者squid -kre)
使用curl测试:
[root@cp3 ~]# curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK
Server: bfe/1.0.8.18
Date: Fri, 10 Mar 2017 13:43:57 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:06 GMT
ETag: "575e1f5e-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
X-Cache: MISS from test.com
X-Cache-Lookup: MISS from test.com:3128
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
[root@cp3 ~]# curl -x127.0.0.1:3128 www.aminglinux.com -I
HTTP/1.0 301 Moved Permanently
Server: nginx
Date: Fri, 10 Mar 2017 13:45:01 GMT
Content-Type: text/html
Content-Length: 178
Location: http://www.apelearn.com/
X-Cache: MISS from test.com
X-Cache-Lookup: MISS from test.com:3128
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
[root@cp3 ~]# curl -x127.0.0.1:3128 www.qq.com -I
HTTP/1.0 403 Forbidden
Server: squid/3.1.23
Mime-Version: 1.0
Date: Fri, 10 Mar 2017 21:45:32 GMT
Content-Type: text/html
Content-Length: 3241
X-Squid-Error: ERR_ACCESS_DENIED 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from test.com
X-Cache-Lookup: NONE from test.com:3128
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
squid反向代理:
做百度和qq的反向代理:
百度的IP:31.135.169.125,端口:80,域名:www.baidu.com
qq的IP:61.135.157.156,端口:80,域名:www.qq.com
编辑配置文件:
[root@cp3 ~]# vim /etc/squid/squid.conf
将http_port 3128修改为下面的内容:
http_port 80 accel vhost vport
cache_peer 61.135.169.125 parent 80 0 originserver name=a
cache_peer_domain a www.baidu.com
cache_peer 61.135.157.156 parent 80 0 originserver name=b
cache_peer_domain b www.qq.com
每当增加一个域名的反向代理需要增加两行。注意name不能相同。
为了测试的方便,我们将上面做的正向代理先注释掉:
#acl http proto HTTP
#acl good_domain dstdomain .aminglinux.com .baidu.com
#http_access allow good_domain
#http_access deny !good_domain
检查配置无误后重新加载配置:
[root@cp3 ~]# squid -kcheck
[root@cp3 ~]# squid -kreconfig
使用curl测试:
做反向代理的域名OK:
[root@cp3 ~]# curl -x127.0.0.1:80 www.baidu.com -I
HTTP/1.0 200 OK
Server: bfe/1.0.8.18
Date: Fri, 10 Mar 2017 14:05:41 GMT
Content-Type: text/html
Content-Length: 277
Last-Modified: Mon, 13 Jun 2016 02:50:01 GMT
ETag: "575e1f59-115"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Accept-Ranges: bytes
X-Cache: MISS from test.com
X-Cache-Lookup: MISS from test.com:80
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
[root@cp3 ~]# curl -x127.0.0.1:80 www.qq.com -I
HTTP/1.0 200 OK
Server: squid/3.5.20
Date: Fri, 10 Mar 2017 14:06:10 GMT
Content-Type: text/html; charset=GB2312
Vary: Accept-Encoding
Vary: Accept-Encoding
Expires: Fri, 10 Mar 2017 14:07:10 GMT
Cache-Control: max-age=60
Vary: Accept-Encoding
Vary: Accept-Encoding
X-Cache: HIT from tianjin.qq.com
X-Cache: MISS from test.com
X-Cache-Lookup: MISS from test.com:80
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
没有做反向代理的域名不可达:
[root@cp3 ~]# curl -x127.0.0.1:80 www.aminglinux.com -I
HTTP/1.0 503 Service Unavailable
Server: squid/3.1.23
Mime-Version: 1.0
Date: Fri, 10 Mar 2017 22:06:45 GMT
Content-Type: text/html
Content-Length: 3588
X-Squid-Error: ERR_CANNOT_FORWARD 0
Vary: Accept-Language
Content-Language: en
X-Cache: MISS from test.com
X-Cache-Lookup: MISS from test.com:80
Via: 1.0 test.com (squid/3.1.23)
Connection: keep-alive
使用浏览器测试:
首先删除浏览器中之前的正向代理配置,然后在本地主机的hosts文件(路径为C:\Windows\System32\drivers\etc\hosts)中添加测试的域名(让这些域名走我们的反向代理服务器):
192.168.147.139 www.baidu.com www.qq.com www.sina.com www.aminglinux.com
编译安装squid:
tar xvf squid-3.5.25-20170408-r14154.tar.gz -C /usr/src/ #解压
cd /usr/src/
./configure --prefix=/usr/local/squid --enable-async-io=160
--enable-epoll --enable-linux-netfilter --enable-stacktraces
--enable-gunregex --enable-linux-tproxy --enable-underscore
--enable-arp-acl --enable-err-languages="Simplify_Chinese" #配置
make && make install #编译 安装
编译参数:
--prefix #安装位置
--enable-kill-parent-hack #启用关掉squid进程时连同父进程也一起关掉
--enable-large-cache-files= #支持大的缓存文件
--enable-snmp #启用SNMP,是监视网络设备和服务器的流行方法
--enable-async-io=160 #启用同步I/O技术,用以提升存储性能
--enable-storeio=ufs,aufs,diskd #支持不同存储模块
--enable-epoll #支持epoll的IO模式,内核26.以上才支持,比poll更高效
--enable-poll #支持poll的IO模式
--enable-linux-netfilter #启用内核过滤
--enable-stacktraces #如果squid崩溃,数据追踪信息被写到cache.log文件
--enable-referer-log #激活来自客户请求的HTTP referer日志
--enable-useragent-log #激活来自客户请求的HTTP用户代理头日志
--enable-err-languages="Simplify_Chinese" #指定错误日志显示语言
--enable-gunregex #启用GUN正则表达式
--enable-linux-tproxy #支持透明模式
--enable-underscore #支持URL中包含下划线(__)
--enable-arp-acl #支持ARP,或者以太地址访问控制列表
--enable-htcp #HTCP是超文本缓存协议,类似于ICP的内部缓存协议
--with-large-files= #支持大的文件
--with-maxfd= #覆盖的最大数量的文件描述符
--sysconfdir=/etc #指定配置文件目录
初始化:
useradd -M -s /sbin/nologin squid #创建程序用户
chown -R squid#squid /usr/local/squid/var #修改权限
ln -s /usr/local/squid/sbin/* /usr/local/sbin #链接命令到环境变量
squid -z #初始化缓存目录
chmod -R 777 /usr/local/squid/var/ #赋予缓存目录权限
squid命令:
squid -z #初始化缓存目录
squid #启动服务(默认端口#3128)
squid -k parse #检查主配置文件语法
squid -k shutdown #安全停止squid服务
squid -k reconfigure -f /usr/local/squid/etc/squid.conf #重新加载配置文件
squid -k kill #强制关闭服务
squid基本配置:
主配置文件:/usr/local/squid/etc/squid.conf
配置参考手册:/usr/local/squid/etc/squid.conf.documented
备份主配置文件:cp -p /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.bak
squid.conf文件详解
cache_effective_user squid #程序用户
cache_effective_group squid #程序组
acl localnet src 192.168.0.0/24 #定义本地网段
http_port 3128 #监听的IP和端口
cache_mem 64 MB #额外提供给squid使用的内存,总内存大小 (cache目录大小)*10+15+(cache_mem)
maximum_object_size 4 MB #设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘
minimum_object_size 10 KB #设置squid磁盘缓存最小文件
cache_swap_high 95 #cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 70 #cache目录清理到70%时停止
reply_body_max_size 5 MB #允许下载的最大文件大小
visible_hostname localhost #主机名
cache_mgr 123456789@.com #管理员邮箱
http_access allow all #允许所有
http_access deny all #拒绝所有(默认拒绝)
squid配置实例:
普通代理:
vim squid.conf #修改配置文件
visible_hostname www.test.com
cache_mgr 2803660215@qq.com
http_access allow all
http_access deny all
reply_body_max_size 5 MB
squid -k parse #检查语法
squid #开启服务
netstat -napt | grep 3128 #查看服务是否开启
验证:在客户端浏览器上设置代理,将代理服务器的ip指向squid服务器
tail -f /usr/local/squid/var/logs/access.log #查看日志变化
透明代理:
vim squid.conf #修改配置文件
visible_hostname www.test.com
cache_mgr 2803660215@qq.com
http_port 0.0.0.0:3128 transparent #配置透明代理
http_access deny all
reply_body_max_size 5 MB
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128
#iptables重定向,将重eth0进入的流量并且是访问80或443的数据重定向到squid服务器
验证:
1、清空流量器上的所有代理设置
2、将客户端的网关指向eth0网卡上的ip地址
3、查看squid的访问日志是否发生变化
一、搭建Squid正向代理
1、安装squid
[root@tpp ~]# yum install -y squid
2、编辑配置文件
[root@tpp ~]# vim /etc/squid/squid.conf //修改一处,添加两句
找到:
#cache_dir ufs /var/spool/squid 100 16 256
改为:
cache_dir ufs /var/spool/squid 1024 16 256 //1024缓存大小,16个子目录,256个二级目录
接着添加:
cache_mem 128 MB //指定缓存占用内存的大小
在最后面添加:
refresh_pattern \.(jpg|png|gif|js|css|mp3|mp4) 1440 20% 2880 ignore-reload
//设置缓存对象,1440为缓存时间,ignore-reload为忽略重新加载
保存后测试下
配置文件是否有语法错误:
[root@tpp ~]# squid -kcheck
启动squid:
[root@tpp ~]# /etc/init.d/squid start
init_cache_dir /var/spool/squid... 正在启动 squid:. [确定]
初始化squid后我们可以看看是否生成了缓存日志:
[root@tpp ~]# cat /var/log/squid/cache.log
也可以去缓存目录下看看生成的文件:
[root@tpp ~]# ls /var/spool/squid/ //16个子目录,子目录下面一共还有256个二级目录
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F swap.state
3、测试
(1)在Windows上测试
打开IE浏览器-->工具-->Internet选项-->局域网设置-->勾上代理服务器-->高级-->HTTP:服务器地址为:192.168.0.109,端口3128-->确定-->确定-->确定
接着我们用浏览器上网打开www.baidu.com,随便访问下网站。我们再抓包分析下是否实现了代理
[root@tpp ~]# tcpdump -nn port 3128 //可以看到抓到了好多包
我们也可以去缓存目录的二级子目录下看到会生成256个三级目录,第一个三级目录/00/下会存放256个文件,放满了即放在到下一个三级目录/01/下,依次存放。
[root@tpp ~]# ls /var/spool/squid/00/00
(2)在Linux上测试
[root@tpp ~]# curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK
Date: Tue, 15 Sep 2015 13:58:49 GMT
4、设置黑名单/白名单
设置了代理服务器后可以访问任何的网站,那么我们还可以控制上网,不让访问特定的网站。
(1)设置白名单:只能访问百度,其他的网址都不能访问。
编辑配置文件,设置acl
[root@tpp ~]# vim /etc/squid/squid.conf //在acl下面接着写入以下内容
acl http proto HTTP
acl good_domain dstdomain .baidu.com //good_domain自定义,dstdomain跟白名单
http_access allow http good_domain
http_access deny http !good_domain
保存退出后检测配置文件是否有错误,重启服务。
[root@tpp ~]# squid -k check //可简写为 -kch
[root@tpp ~]# /etc/init.d/squid restart
停止 squid:................ [确定]
正在启动 squid:. [确定]
注:在这里我们也可以不用重启,直接重新加载就行,命令如下:
[root@tpp ~]# squid -k reconfigure //可简写为 -kre
1)Windows下测试:
我们打开网页,可以发现只能上百度,其他的网站全部不能上。
2)Linux下测试:
[root@tpp ~]# curl -x127.0.0.1:3128 www.baidu.com -I
HTTP/1.0 200 OK
[root@tpp ~]# curl -x127.0.0.1:3128 www.qq.com -I
HTTP/1.0 403 Forbidden
(2)设置黑名单:除了百度,其他的网站都能访问。
[root@tpp ~]# vim /etc/squid/squid.conf //替换上面的白名单,写入以下内容
acl http proto HTTP
acl bad_domain dstdomain .baidu.com
http_access deny http bad_domain
http_access allow http !bad_domain
测试同上面一样。
二、搭建Squid反向代理
反向代理主要用于缓存静态项,因为诸多静态项目尤其是图片、流媒体等比较耗费带宽,比如联通网访问电信的资源本来就慢,如果再去访问大流量的图片、流媒体那更会慢了,所以如果在联通网配置一个squid反向代理,让联通客户端直接访问这个联通squid,而这些静态项已经被缓存在了squid上,这样就大大加快了访问速度。
反向代理过程和前面的正向代理没有什么太大区别,唯一的区别是配置文件中一个地方需要改动一下。(为了更好地实现效果,我们先把之前配置的正向代理注释掉,浏览器也取消代理设置)
1、编辑配置文件
[root@tpp ~]# vim /etc/squid/squid.conf
找到:http_port 3128
改为:http_port 80 accel vhost vport
然后再增加要代理的后端真实服务器信息(这里用qq.com和baidu.com来做例子):
cache_peer 101.226.103.106 parent 80 0 originserver name=a
cache_peer_domain a www.qq.com
cache_peer 115.239.211.112 parent 80 0 originserver name=b
cache_peer_domain b www.baidu.com
注:cache_peer为配置后端的服务器的ip(通过ping查看真实ip)以及端口,name后边为要配置的域名,这里和后面的cache_peer_domain相对应。实际的应用中,ip大多为内外ip,而域名也许会有多个,如果是squid要代理一台web上的所有域名,那么就写成这样:
cache_peer 192.168.10.111 80 0 originserver
后面的cache_peer_domain 也不用写了。
2、测试反向代理
先检查配置文件是否有错
[root@tpp ~]# squid -krestart
squid: ERROR: No running copy
这里报错了,说没有运行squid,我们查看下80端口的状态
[root@tpp ~]# netstat -nlp
注:可以发现80端口被nginx服务占用了,因为之前在这台机器上配置过nginx服务,所以80端口被nginx服务占据着,导致squid服务不能启动,先杀死掉nginx服务进程,再启动squid服务:
[root@tpp ~]# killall nginx
[root@localhost ~]# /etc/init.d/squid start
正在启动 squid:. [确定]
(1)在Windows下测试
首先找到C:\Windows\System32\drivers\etc\hosts文件,添加如下:
192.168.0.109 www.baidu.com www.qq.com
我们打开浏览器,测试下只能访问www.baidu.com www.qq.com这两个网站,其他的都不能访问。
(2)在Linux下测试
[root@localhost ~]# curl -x127.0.0.1:80 www.baidu.com
安装
#yum install squid -y
禁用selinux
#vi /etc/sysconfig/selinux
SELINUX=disabled
#setenforce 0 临时关闭
打开路由转发
#vi /etc/sysctl.conf
net.ipv4.ip_forward=1
配置squid
#vi /etc/squid/squid.conf
主要修改下面几个,其他的功能,网上应该有一大批讲解的
cache_dir ufs /var/log/squid 10240 16 256
...
http_access allow all //测试,允许所有访问
http_access deny all
http_port 3128 transparent //关键,一定要加上,做为透明代理
... 其他大家看着修改
#squid -k parse 检查配置文件
#squid -z 初始化
#systemctl start squid 启动
#lsof -i :3128 查看端口是否启用
关键,firewall防火墙配置
#firewall-cmd --zone=external --add-interface=eth0 --permanent //外网网卡添加到外网zone
#firewall-cmd --zone=internal --add-interface=eth1 --permanent //内网网卡添加到内网zone
#firewall-cmd --zone=external --add-service=squid --permanent //关键,添加squid服务
#firewall-cmd --zone=internal --add-service=squid --permanent //应该只要内网区域添加服务即可
#firewall-cmd --zone=external --list-all //列出外网区域信息,默认应该开启了 masquerade:yes如果是no的话 执行如下语句添加
#firewall-cmd --zone=external --add-masquerade --permanent
#systemctl restart firewalld //重启防火墙
客户端
添加内网的ip,网关,设为squid服务器的内网IP,DNS设为可用的DNS即可
打开网页,看是否能够用了?
其中有个要注意的,如果squid服务器端,防火墙不添加--add-service=squid 服务的话,虽然客户端也可以正常访问网页,但已经不经过squid来转发了,到时,所有squid的限制功能都会失效。