关于代理的那些事
缓存服务器
,即用来存储(内存及硬盘)用户访问的网页、图片、文件等等信息的专用服务器,这种服务器不仅可以使用户最快的得到他们想要的信息,而且大大减少了网络传输的数据量,缓存服务器经常是代理服务器。对于用户是不可见。目前常见的缓存服务器软件:squid、varnish、nginx、ats
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,S quid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
代理的基本类型
使用代理的好处:
传统代理:
透明代理:
反向代理:
正向代理
是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
各代理服务器的应用场景
……正向代理(本地网关)
a、正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
b、正向代理还可以使用缓存特性减少网络使用率。
c、正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
……透明代理(cdn, 架设于网络运营商主干机房)
a、提高各个地区访问者的访问速度。
b、减少源站压力。
c、减少网络运营商的网间结算费用。
d、节省网络运营商带宽资源。
……反向代理(网站前端)
a、降低源站服务器的负载。
b、隐藏源站真实ip。
图解正反向代理
简单的理解,就是正向代理是为客户端做代理,代替客户端去访问服务器,而反向代理是为服务器做代理,代替服务器接受客户端请求。
Squid代理实验
安装squid
首先将压缩包放到root目录中
tar zxvf squid-3.4.6.tar.gz 解压gz结尾的包是zxvf要是bz2结尾的用jzvf cd squid-3.4.6/ yum -y install gcc gcc-c++ 安装环境依赖包 ./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 支持有下划线的选项 --enable-poll 支持字符设备中的驱动函数 --enable-gnuregex 支持正则表达式 make && 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安装目录下面的var目录属主属组为squid vim /etc/squid.conf 56 http_access allow all 默认允许所有 57 #http_access deny all 默认拒绝所有(加不加#不重要是从上往下读的) 58 # Squid normally listens to port 3128 59 visible_hostname 20.0.0.10 添加配置主机名或者ip 60 http_port 3128 61 cache_effective_user squid 添加修改用户与组 62 cache_effective_group squid 添加 65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 开启内核的容灾功能 squid -k parse 修改完检测配置有没有问题 squid -z 初始化缓存目录 [root@squid squid-3.4.6]# ls /usr/local/squid/var/cache/squid/ 查看配置文件刚刚开启的缓存目录位置是否生成了缓存目录 00 02 04 06 08 0A 0C 0E swap.state 01 03 05 07 09 0B 0D 0F squid 启动 [root@squid squid-3.4.6]# netstat -antp |grep squid 检查端口有没有开启 tcp6 0 0 :::3128 :::* LISTEN 87811/(squid-1) #这里想关闭它的时候就只能用pkall或者kall
添加配置文件的控制快捷键
case是多模式的匹配一般在启动脚本用的多
cd /etc/init.d/ vim squid #!/bin/bash #chkconfig:2345 90 25 PID="/usr/local/squid/var/run/squid.pid" PID文件的目录位置 CONF="/etc/squid.conf" CONF配置文件所在位置 CMD="/usr/local/squid/sbin/squid" 启动路径 case "$1" in 设置位置变量$1 start) netstat -natp | grep squid &> /dev/null &>是混合导入 if [ $? -eq 0 ] 判断若上条命令有东西返回值为0然后执行下面语句 then echo "squid is runing" else 启动中返回值是不为0的故会正在启动 echo "正在启动 squid..." $CMD fi ;; stop) $CMD -k kill &> /dev/null 调用CDM那个文件 rm -rf $PID &> /dev/null 进程好要删除不然下次启动不了 ;; status) [ -f $PID ] &> /dev/null -f是验证结果然后调用 if [ $? -eq 0 ] then netstat -natp | grep squid else echo "squid is not runing" fi ;; restart) $0 stop &> /dev/null #$0是调用stop脚本名称 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 service squid stop service squid restart chmod +x squid chkconfig --add squid chkconfig --level 35 squid on 开启级别
更改配置文件 做传统代理实验
vim /etc/squid.conf 省略部分内容必须要做3128下面那一块保存 cache_effective_group squid cache_mem 64 MB 添加指定缓存功能所使用的内存空间大小,便于保持访问比较频繁的web对象 容量最好为4的倍数 单位MB reply_body_max_size 10 MB 添加允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制 maximum_object_size 4096 KB 添加允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发到用户浏览器保存(这是优化指令) service squid check 验证语法 service squid restart 退出 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT 开启转发
在web端安装httpd
yum -y install httpd cd /var/log/httpd cat access_log 查看成的日志
在没有设置代理服务前在浏览器访问20.0.0.11
cat access_log 可以看到是20.0.0.188的ip地址访问 20.0.0.188 - - [30/Oct/2020:15:27:54 +0800] "GET /images/poweredby.png HTTP/1.1" 200 3956 "http://20.0.0.11/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"
设置代理服务器
设置代理后的
cat access_log 看到的是代理服务的ip地址 说明传统代理成功 20.0.0.10 - - [30/Oct/2020:16:04:48 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://20.0.0.11/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
做透明代理实验
首先在Squit服务器上新添加一个网卡选择仅主机模式 主要用来做的是网关
给新网卡配置值ip地址
nmcli connection 查看UUID信息用它 vi ifcfg-ens36 更改ens36的网卡地址 uuid直接去掉就行 省略部分内容 NAME=ens36 DEVICE=ens36 ONBOOT=yes IPADDR=192.168.10.3 PREFIX=24 vi /etc/sysctl.conf net.ipv4.ip_forward=1 添加路由转发功能 [root@squid network-scripts]# sysctl -p 设置参数立即生效 net.ipv4.ip_forward = 1
测试web服务器能不能通网关
ping 192.168.10.3 能通 route add -net 192.168.10.0/24 gw 20.0.0.10 添加一个静态路由为回程路由
在客户机上面把网卡改成vm1然后将IP地址还有网关改成相应的地址
这时候去访问apache那么地址是客户端的地址而不是代理服务器
在自己的Squid更改配置文件让它支持透明模式
vi /etc/squid.conf # Squid normally listens to port 3128 http_port 192.168.10.3:3128 transparent 添加透明服务器地址 退出 iptables -F 清空防火墙规则 iptables -t nat -F 清空nat表中的所有链 iptables -L 查看有哪些防火墙的规则 iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #在nat表中添加prerouting链 入口方向是36源地址段是支持的协议是tcp支持端口是80端口目标端口是3128端口 iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #443是https的端口 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT netstat -ntap |grep 3128
cd /var/log/httpd/ cat /dev/null > access_log 这两种方法都可清空日志文件内容 > error_log 清空日志文件的内容 [root@web httpd]# cat access_log 取客户机刷新下浏览器后看日志文件 20.0.0.10 - - [30/Oct/2020:18:39:21 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
squid做反向代理
首先去web端将网页改一下不能都一样
cd /var/ cd www/html/ vim index.html 添加一个网页 <h1>this is test1<h1> 就写这个
去客户端测试一下
接下来就是去squid主机上去设置
systemctl start firewalld iptables -L iptables -F iptables -t nat -F iptables -I INPUT -p tcp --dport 3128 -j ACCEPT vim /etc/squid.conf # Squid normally listens to port 3128 http_port 20.0.0.10:3128 accel vhost vport cache_peer 20.0.0.11 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 cache_peer 20.0.0.9 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 cache_peer_domain web1 web2 www.lai.com
然后去新开一个虚拟就做web2这里我用的是20.0.0.9
yum -y install httpd cd /var/www/html/ vim index.html
<h1>this is test2<h1>
systemctl restart httpd
route add -net 192.168.10.0/24 gw 20.0.0.10 这个静态路由一定要有
去客户机上测试看通不通
在客户端去接禁用 -----》》此电脑右击—》》本地用户和组选择用户—》》adminstrator把禁用去点—》》确认
改成超级管理员用户主要是为了 一、开启账户权限 二、配置映射
然后右击adminstrator设置密码123
然后切换用户为超级管理员用户
可以选择个性化设置 图标设置 将桌面图标都调出来
设置代理 注意代理的端口是3128或者是80主要是看你的配置文件的那个20.0.0.10的squid设置的端口号了
在浏览器输入www.lai.com看是不是轮询的效果
可能会遇到的问题
一、在做反向代理的时候squid的端口不是80端口、而是可能之前的httpd占用了80端口
这里有两种解决方法(1)直接将httpd关了 然后重启squid服务在用netstat -natp | grep 80出来的就应该是squid的端口了(2)就是将squid的端口改成3128 然后在客户端的也要改下反向代理的端口号 这个看情况而定不冲突就行
二、在做传统解析的时候可能命令都对就是网络不通
这个时候去检查一下你的配置文件
vim /etc/squid.conf 是不是允许访问 56 http_access allow all 57 #http_access deny all
systemctl start networkManager 开启网络管理器 ifconfig
总结:本实验的网络知识点比较多注意权限 大多数的问题都是在squid的主配置文件中的。
到此这篇你知道的------关于代理Squid的那些事的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jszy-bmgt/10312.html