squid代理服务器

2023-12-17 17:45:15

squid代理服务器:

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

?????????????????Nginx也可以缓存

?????????????????Nginx无法做正向

?????????????????proxy_pass 反向代理

squid:正向代理服务器。(例如vpn)

squid:正向代理,缓存加速,acl过滤控制

代理的工作机制:

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

squid代理的作用:

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

squid nginx

squid代理的类型:

  1. 传统代理,正弦代理,需要在客户端上指定好代理服务器的地址和端口
  2. 透明代理,客户端不在需要指定代理服务器的地址和端口,而是通过默认路由来进行转发(squid服务器,网关)
  3. 反向代理 在反向代理的squid服务器当中缓存了请求资源,将资源直接返回客户端。否

????????????则,代理服务器会代理客户端向web服务器发起请求。然后再把请求的资源 ?

????????????响应给客户端。同时把响应缓存在本地,后续请求者都可以使用 ?????

区别:

SNAT和DNAT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

网络层? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

改变数据包头部的源IP地址和目的地址 ???????????

??????

??代理服务器squid

?应用层

??不改变数据包的任何信息

直接把数据包法给代理,代理通过应用层过滤的方式来实现转发。(有点像路由器)

  1. 正向代理:

客户端 test1:192.168.120.80

squid test2:192.168.120.110

nginx1:192.168.120.30

nginx2:192.168.120.40

安装 Squid 服务

关闭防火墙和安全机制

systemctl stop firewalld

setenforce 0

安装 Squid 服务

把两个文件拖进来

cd /opt

tar zxvf squid-3.5.28.tar.gz -C /opt/

yum -y install gcc gcc-c++ make

cd squid-3.5.28

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

#指定安装目录路径

--sysconfdir=/etc \

#指定配置文件路径

--enable-arp-acl \

#MAC地址管控,防止客户端使用IP欺骗

--enable-linux-netfilter \

#使用内核过滤

--enable-linux-tproxy \

#支持透明模式

--enable-async-io=100 \

#异步IO,提升存储性能

--enable-err-language="Simplify_Chinese" \

#错误信息的显示语言

--enable-underscore \

#允许URL中有下划线

--disable-poll \

#关闭默认使用 poll 模式

--enable-epoll \

#开启epoll模式提升性能

--enable-gnuregex

#使用GNU正则表达式

Make?-j 2 && 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/

#此目录用于存放缓存文件

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

修改 Squid 的配置文件

vim /etc/squid.conf

--56行--插入

http_access allow all

#放在 http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹

--61行--插入

cache_effective_user squid

#添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功

cache_effective_group squid

#添加,指定账号基本组

#检查配置文件语法是否正确

squid -k parse

#启动 Squid,第一次启动 Squid 服务时,会自动初始化缓存目录

squid -z

#-z 选项用来初始化缓存目录

squid

#启动 squid 服务

netstat -anpt | 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 squid

chkconfig --level 35 squid on

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

构建传统代理服务器

vim /etc/squid.conf

--63行--插入

cache_mem 2000 MB

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

允许用户下载的最大文件的大小。浏览器会提示请求或访问太大

maximum_object_size 100 MB

能够缓存的对象的最大值。超过这个单位不会被缓存

service squid restart

systemctl restart squid

#生产中需要给放行,这里不需要

iptables -I INPUT -p tcp --dprot -j ACCEPT???
tail -f /usr/local/squid/var/logs/access.log

客户机的代理配置

到客户端打开浏览器测试

在浏览器中配置代理

写入代理服务器的ip和端口

在squid服务器

查看 Squid 访问日志的新增记录中的缓存命中情况

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

TCP_REFRESH_UNMODIFIED/304: TCP_REFRESH_UNMODIFIED 表示该请求是由于缓存未过期,

直接返回未修改的响应。304 表示 HTTP 状态码为 304(未修改)。

透明代理:

Web:12.0.0.12

双网卡分别指向网关

回到客户端清除缓存

选择不需要代理

回到squid主机设置为双网卡

web 12.0.0.12

双网卡分别指向网关

注释掉网关和dns

vim /etc/sysconfig/network-scripts/ifcfg-ens33

cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36

vim /etc/sysconfig/network-scripts/ifcfg-ens36

ip地址修改为网关

重启网卡

?systemctl restart network

到nginx1

vim ifcfg-ens33

修改网关为12.0.0.254

IP地址改为12.0.0.12

注释掉dns

重启网卡

回到squid主机

开启转发功能

vim /etc/systcl.conf

net.ipv4.ip_forwart=1

#开启转发功能

sysctl -p

vim /etc/squid.conf

注释掉原端口插入新的端
#加上支持透明的选项

重启squid服务

systemctl restart squid

#修改防火墙规则

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

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

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

回到客户端测试

修改一下客户机的网关

把网关指向20.0.0.20

注释掉dns

到客户机测试

透明代理:

  1. 配置文件写错了,重启不会有任务报错
  2. 添加了ip加端口之后一定要查看一下ip+端口是否生效
  3. 客户端和服务端都要指向网关
  4. iptables的策略:在代理服务器要配置,开启转发功能

配置ACL访问控制策略

vim /etc/squid.conf

acl myhost1 src 192.168.120.110/32

http_access deny myhost1

重启squid服务

squid -N -d1

#检测一下运行状态

mkdir /etc/squid

cd /etc/squid

vim dest.list

12.0.0.12

vim /etc/squid.conf

添加策略

acl myhost2 dst "/etc/squid/dest.list"

http_access deny myhost2

重启一下squid服务

到客户端测试一下

取消掉deny再去客户端测试一下

反向代理

在squid服务器

vim ifcfg-ens33

#打开网关和dns

还原一下nginx主机

配置两个web网页

vim /nginx/html/index.html

到客户端修改一下网关和dns

回到squid主机

iptables -F

#清空防火墙策略

vim /etc/squid.conf

http_port 192.168.120.70:80 accel vhost vport

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

accel:反向代理开启加速模式

vhost:支持域名或主机名表示代理节点。

vport:支持ip+端口来表示代理服务器

在行后插入

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

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

cache_peer 192.168.120.30

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

parent

#下级关系。80

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

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

originserver:最大源服务器

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

#squid通过轮询的方式将请求分发到其中一台父节点

max_conn=30

#最大连接数

weight=1

#轮询权重

name=web1

#设置别名

cache_peer_domain web1 web2 www.kgc.com

重启squid服务

squid -N -d1

#查看运行是否正常

netstat -antp | grep 80

#必须是80端口

如果80端口没有起来使用kill命令清除后再尝试

kill -9 68270

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

vim /etc/hosts

192.168.120.70 www.kgc123.com

#做映射

测试:

文章来源:https://blog.csdn.net/DDYYmmm/article/details/135046486
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。