代理服务Squid----反向代理功能实现

反向代理详解

  • squid作为代理服务软件,其主要功能是使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,有一定的安全性,但是如果想让互联上的主机访问内部网的主机资源(例如:web站点),又想使内部主机免受外部网主机攻击,一般的代理服务是不能实现的这就需要反向代理来实现
  • 什么是反向代理呢?其实,反向代理也就是通常所说的web服务器加速,它是一种通过在繁忙的WEB服务器和internet之间增加一个高速的web缓冲服务器(即:web反向代理服务器)来降低实际的web服务器的负载
  • Web服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web服务器的IP地址,这时Reverse Proxy Server设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被卸载到反向代理服务上。不但能够防止外部网主机直接和web服务器直接通信带来的安全隐患,而且能够很大程度上减轻web服务器的负担,提高访问速度。

下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:

  • 标准的代理缓冲服务器(传统代理):一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。
  • 透明代理缓冲服务器:透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。
  • 反向代理缓冲服务器:反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。

反向代理工作原理

  • 当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面。有四个最重要HTTP头标记:
  • Last-Modified: 告诉反向代理页面什么时间被修改
  • Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
  • Cache-Control: 告诉反向代理页面是否应该被缓冲
  • Pragma: 告诉反向代理页面是否应该被缓冲

实验环境

类型 IP地址 系统 软件包
squid代理服务器

ens33:192.168.179.252

ens36:192.168.100.10

Centos7 squid-3.4.6.tar.gz
WEB服务器1 192.168.179.128 Centos7  
WEB服务器2 192.168.179.253 Centos7  
客户端 192.168.100.11 Centos7  

部署Squid服务

//安装环境依赖包
yum install gcc gcc-c++ -y

//解压缩包
tar zxvf squid-3.4.6.tar.gz -C /opt/

//配置
cd /opt/squid-3.4.6

./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 \
--enable-poll \
--enable-gnuregex

//安装与配置
make && make install

//便于系统识别squid服务命令
ln -s /usr/local/squid/sbin/* /usr/local/sbin/

//创建用户,无家目录,不可登录系统
useradd -M -s /sbin/nologin squid

//更改属主属组
chown -R squid.squid /usr/local/squid/var


//修改squid配置文件
http_port 192.168.179.252:80 accel vhost vport
cache_peer 192.168.179.128 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.179.253 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com
cache_mem 64 MB                        //指定缓仔功能所使用的内存空间大少。便于保特访间较额繁的WEB对象,容量最好为4的倍数,单位
reply_body_max_size 10 MB         //允许用户下我的最 大文件大示,以字节为单位。欢认设置0表示不进行限制
maximum_object_size 4096 KB    //允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转
cache_effective_user squid           //添加  指定程序用户
cache_effective_group squid        //添加   指定账户基本组

//编辑防火墙规则
iptables -t nat -F
iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

//检查配置文件语法
squid -k parse

//初始化缓存目录
squid -z

//启动服务
squid

//创建脚本,便于service管理服务
cd /etc/init.d
vim 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 squid
chkconfig --add squid

//开启路由转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 

安装两台WEB服务

//安装两台web服务器
yum install httpd -y
vim /var/www/html/index.html
<h1>this is web 1</h1>
<h1>this is web 2</h1>

//关闭防火墙,功能性防护
systemctl stop firewalld.service 
setenforce 0

//添加静态路由
route add -net 192.168.100.0/24 gw 192.168.179.252     

在客户机上配置代理,设置虚拟IP和虚拟端口

验证结果

发布了78 篇原创文章 · 获赞 5 · 访问量 2567

猜你喜欢

转载自blog.csdn.net/qq397750142/article/details/105055070
今日推荐