Squid代理服务器

本文探讨了Squid和Nginx在代理服务器中的角色,包括正向代理、反向代理及负载均衡的应用,重点讲解了两者之间的区别,以及如何配置Squid以实现透明代理和缓存加速。同时涉及了iptables在网络规则中的应用和注意事项。
摘要由CSDN通过智能技术生成

Squid代理服务器:

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

                 Nginx也可以缓存

                 Nginx无法做正向

                 Proxy_pass 反向代理

Squid:正向代理服务器,VPN

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

代理的工作机制:

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

核心图:

Squid代理的主要作用:

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

Squid代理的类型:

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

区别:

SNAT和DNAT              

网络层                    

改变数据包头部            

的源IP地址和目

的地址

代理服务器squid

应用层

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

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

实验部分:

客户端:20.0.0.51

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

Web页面:

Nginx1:20.0.0.53

Nginx2:20.0.0.54

解压包:

安装编译环境:

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

./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 -k parse

启动,初始化

squid -z

启动,

squid

检测运行过程是否正确

squid -N -d1

查看端口

netstat -antp | 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 /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

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

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

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

开一台Nginx

客户端指向squid

命中缓存的标志

透明代理:

先取消这个

Squid配置双网卡

Web 12.0.0.12

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

配置ens33

配置ens36

配置Nginx1

systemctl restart network

打开squid转发功能

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

squid -k parse

squid -N -d1

systemctl restart squid

修改防火墙的规则

iptables -t nat -vnL

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

客户端修改网关

systemctl restart network

注意事项:

双网卡分别指向网关:

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

vim /etc/squid.conf

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

以列表的形式来做

添加策略

删掉策略

结果:

反向代理:

Squid恢复之前的网卡

也就是去掉网关

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

配置squid

iptables -F

iptables -t nat -F


vim /etc/squid.conf

http_port 20.0.0.52:80 accel vhost vport

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

Accel:反向代理加速模式

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

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

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端口要起

声明域名做一下映射

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

实现轮询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值