Squid代理服务器

Squid代理服务器:

Nginx也可以代理:反向代理-----实现负载均衡

                 Nginx也可以缓存

                 Nginx无法做正向

                 Proxy_pass 反向代理

Squid:正向代理服务器,VPN

Squid作用:正向代理,缓存加速,基于ACL过滤控制

代理的工作机制:

  1. 代替客户端向网站请求数据,不需要访问代理的IP地址,直接请求目的的网站,有代理服务器进行请求和访问,可以隐藏用户的真实IP
  2. 客户端访问目标网站之后(静态web元素)保存到缓存中,发送给客户端,下一次客户端都可以使用缓存访问,加快访问速度

核心图:

Squid代理服务器_第1张图片

Squid代理的主要作用:

  1. 资源获取,代替客户端获取目标服务器的资源
  2. 就是访问的作用;代理服务器可能和目标服务器(网站)距离更近,可以起到一定的加速作用
  3. 缓存作用,代理服务器保存从目标服务器获取的资源,客户端下一次再请求目标服务器可以直接访问缓存即可,减轻目标服务器的压力,
  4. 隐藏真实的IP地址,代理服务器代替客户端请求,客户端的信息不会显示

Squid代理的类型:

  1. 传统代理,正向代理,需要在客户端上指定好代理服务器的地址和端口
  2. 透明代理,客户端不再指定代理服务器的地址和端口,而是通过默认路由来进行转发(squid服务器,网关)
  3. 反向代理,在反向代理的squid服务器当中缓存了请求资源,将资源直接返回给客户端,否则,代理服务器会代替客户端向web服务器发起请求,然后把请求的资源响应给客户端,同时把响应缓存在本地,后续请求可以使用

Squid代理服务器_第2张图片

区别:

SNAT和DNAT              

网络层                    

改变数据包头部            

的源IP地址和目

的地址

代理服务器squid

应用层

不改变数据包的任何信息,直接把数据包发给代理,代理

过应用层过滤的方式来实现转发(有点像路由器)

实验部分:

客户端:20.0.0.51

Squid:20.0.0.52 (做透明代理需要双网卡)

Web页面:

Nginx1:20.0.0.53

Nginx2:20.0.0.54

Squid代理服务器_第3张图片

解压包:

安装编译环境:

yum -y install gcc gcc-c++ make

编译安装:

./configure --prefix=/usr/local/squid \

--sysconfdir=/etc \ 配置文件路径

--enable-arp-acl \ 开启acl过滤模式

--enable-linux-netfilter \ 开启内核过滤

--enable-linux-tproxy \ 支持透明模式

--enable-async-io=100 \ 异步

IO --enable-err-language="Simplify_Chinese" \ 错误信息的显示语言

--enable-underscore \ 允许URL地址中含有下划线

--disable-poll \ --enable-epoll \ --enable-gnuregex

Squid代理服务器_第4张图片

./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 \

--disable-poll \

--enable-epoll \

--enable-gnuregex

make -j 6 && 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/

配置文件的匹配规则:自上而下规则,匹配到之后,不再继续匹配

vim /etc/squid.conf

 http_access allow all

cache_effective_user squid

cache_effective_group squid

Squid代理服务器_第5张图片

检测配置文件语法是否正确

squid -k parse

Squid代理服务器_第6张图片

启动,初始化

squid -z

Squid代理服务器_第7张图片

启动,

squid

检测运行过程是否正确

squid -N -d1

查看端口

netstat -antp | grep squid

Squid代理服务器_第8张图片

vim /etc/init.d/squid

写一个脚本进行控制

Squid代理服务器_第9张图片

#!/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 /etc/init.d/squid

chkconfig --level 35 squid on      #35 启动优先级 0-100 数字越大优先级越低

systemctl restart squid

netstat -antp | grep squid

给文件执行权限,然后添加到系统服务控制当中

然后

35,启动优先级,0-100数字越大,优先级越低

重启和查看端口

systemctl restart squid

netstat -antp | grep squid

构建传统代理服务器(正向代理)

回到配置文件,添加支持缓存大小

Squid代理服务器_第10张图片

cache_mem 缓存功能使用的内存空间大小,容量最好为4的倍数,单位用MB,建议是内存的四分之一

replyy_body_max_size 100M 允许用户下载最大文件的大小,浏览器会提示请求或访问大小

maximum_object_size 100M 能够缓存的对象的最大值,超过这个单位不会被缓存

给数据流量放行

iptables -F

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

开一个相同的squid终端,查看缓存日志

tail -f /usr/local/squid/var/logs/access.log

Squid代理服务器_第11张图片

开一台Nginx

客户端指向squid

Squid代理服务器_第12张图片

命中缓存的标志

透明代理:

先取消这个

Squid代理服务器_第13张图片

Squid配置双网卡

Web 12.0.0.12

Squid添加网络适配器,指向网关

配置ens33

Squid代理服务器_第14张图片

Squid代理服务器_第15张图片

配置ens36

Squid代理服务器_第16张图片

配置Nginx1

Squid代理服务器_第17张图片

systemctl restart network

打开squid转发功能

Squid代理服务器_第18张图片

打开squid配置文件,支持透明代理打开

Squid代理服务器_第19张图片

squid -k parse

squid -N -d1

systemctl restart squid

修改防火墙的规则

iptables -t nat -vnL

Squid代理服务器_第20张图片

iptables -t nat -I PREROUTING -i ens33 -s 20.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

iptables -t nat -I PREROUTING -i ens33 -s 20.0.0.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

客户端修改网关

Squid代理服务器_第21张图片

systemctl restart network

注意事项:

双网卡分别指向网关:

  1. 配置文件写错了,重启没有任何报错
  2. 添加了IP之后一定要查看IP+端口是否生效
  3. 客户端和服务端都要指向网关
  4. Iptables的策略,在代理服务器要改配置,

vim /etc/squid.conf

配置ACL策略,并且让其生效

Squid代理服务器_第22张图片

以列表的形式来做

添加策略

Squid代理服务器_第23张图片

删掉策略

Squid代理服务器_第24张图片

结果:

Squid代理服务器_第25张图片

反向代理:

Squid代理服务器_第26张图片

Squid恢复之前的网卡

也就是去掉网关

客户端也还原,网关重新指向squid

配置squid

iptables -F

iptables -t nat -F


vim /etc/squid.conf

Squid代理服务器_第27张图片

http_port 20.0.0.52:80 accel vhost vport

Squid从一个缓存变成一个web服务器反向代理的加速模式 squid监听的80端口请求,同时混合web服务器的请求端口绑定,squid不是转发请求,而是要么从缓存获取数据,要么请求绑定的web端口

Accel:反向代理加速模式

Vhost:支持域名或者主机名来代表服务器

Vport:支持IP+端口来表示代理服务器

Squid代理服务器_第28张图片

cache_peer 20.0.0.52 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1

cache_peer 20.0.0.53 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2

缓存获取失败,请求的服务器名

Parent:上下的关系 80

0:表示就是一台代理服务器,不涉及运营商

No-query:不查询,直接获取数据

Originserver:指定源服务器

Round-robin max_conn=30 weight=1 name=web1

Squid通过轮询的方式来将请求分发到

80端口要起

声明域名做一下映射

Squid代理服务器_第29张图片

在客户端把代理地址做映射

Squid代理服务器_第30张图片

实现轮询

Squid代理服务器_第31张图片

Squid代理服务器_第32张图片

你可能感兴趣的:(前端)