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 [email protected] #管理员邮箱

http_access allow all   #允许所有

http_access deny all   #拒绝所有(默认拒绝)


squid配置实例:

普通代理:

vim squid.conf #修改配置文件

visible_hostname  www.test.com

cache_mgr [email protected]

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 [email protected]

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的限制功能都会失效。