什么是正向代理和反向代理,以及如何实现
正向代理,就是一个位于客户端和原始服务器之前的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并且指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理。反向代理(reverse proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客
正向代理和反向代理
什么是正向代理
正向代理,就是一个位于客户端和原始服务器之前的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并且指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端才能使用正向代理。
正向代理工作流程
-
客户端向正向代理服务器发送请求。
-
正向代理服务器接收请求后,将其转发给目标服务器。
-
目标服务器处理请求并返回响应给正向代理服务器。
-
正向代理服务器将响应返回给客户端。
正向代理服务器的用途
-
突破访问限制
通过代理服务器,可以突破自身IP访问限制,访问国外网站,教育网等。
-
提高访问速度
通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。
-
隐藏客户端真实IP
上网者也可以通过这种方法隐藏自己的IP,免受攻击。
Nginx实现正向代理
下面是一个简单的Nginx正向代理的配置示例
http {
server {
listen 80;
location / {
proxy_pass http://target_server;
}
}
}
upstream target_server {
server target_ip:target_port;
}
在上面的配置中,listen
指令指定了代理服务器监听的端口,location
指令指定了对哪些URL进行代理,proxy_pass
指令指定了目标服务器的地址。upstream
指令定义了目标服务器的地址和端口。
Nginx正向代理的实现原理
Nginx正向代理的实现原理可以分为以下几个步骤:
-
接收客户端请求:Nginx监听指定的端口,接收客户端的请求。
-
解析请求:Nginx解析客户端的请求,获取请求的URL、方法和头部等信息。
-
转发请求:Nginx根据配置的代理规则,将请求转发给目标服务器。在转发请求时,Nginx会将客户端的请求头部和请求体一并发送给目标服务器。
-
接收目标服务器的响应:目标服务器处理完请求后,将响应发送给Nginx。
-
返回响应给客户端:Nginx将接收到的响应返回给客户端。
-
缓存响应(可选):Nginx可以缓存目标服务器的响应,避免重复请求相同的内容,提高性能和响应速度。
什么是反向代理
反向代理(reverse proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
反向代理工作流程
-
客户端向反向代理服务器发送请求。
-
反向代理服务器接收请求后,将其转发给目标服务器。
-
目标服务器处理请求并返回响应给反向代理服务器。
-
反向代理服务器将响应返回给客户端,而客户端以为它是与反向代理通信。
所以,反向代理,其实是"代理服务器"代理了"目标服务器",去和"客户端"进行交互。
通过反向代理服务器访问目标服务器时,客户端是不知道真正的目标服务器是谁的,甚至不知道自己访问的是一个代理。
反向代理服务的用途
-
隐藏服务器真实IP
使用反向代理,可以对客户端隐藏服务器的IP地址。
-
负载均衡
反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上。
-
提高访问速度
反向代理服务器可以对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度。
-
提供安全保障
反向代理服务器可以作为应用层防火墙,为网站提供对基于Web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等。还可以为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等。
反向代理的实现方法
-
使用Nginx实现
http{ #服务器代理 #监听的客户 使用80的端口 看用户端口 server{ listen 80; #查看自己定义 反向代理name 名称要与host 保持一致 匿名访问 网址 server_name xxx.xx.com; location / { #发起http请求 看使用端口 #proxy_pass http://localhost:8080; #尽可以有一个 x proxy_pass http://localWindows; #此处使用了负载均衡 策略 } } #发布多台服务器 upstream localWindows{ server localhost:8080 ; server localhost:8081 ; server localhost:8082 ; } }
负载均衡 配置多台实现负载均衡,减轻服务器的压力
轮询策略 根据配置文件,依次访问服务器。 一般默认为 轮询策略。
权重策略 根据服务器性能]决定 ,性能越高则承担的压力越大。
upstream localWindows { server localhost :8080 weihgt=6; server localhost:8081 weight=3; #也可以 将localhost直接写成127.0.0.1 (目的主要看访问) }
-
虚拟URL host文件配置
host 文件介绍 路径:
C:\Windows\System32\drivers\etc
固定格式:此属于计算机系统 host文件:host 文件扩展名系统文件,可以使用记事本等工具打开。作用 : 将一些常用的网址域名与IP地址建立关联 ,用于浏览时输入一个需要登陆的网址是系统会首先从host文件中寻找,一旦找到,系统会立即打开对应网页,若没有找到,则系统将网址提交到DNA域名解析器进行IP地址的解析。
# host文件配置 #格式 # 注释与C语言一致 # 格式 : IP 空格 网址域名 # 网址域名 要与 nginx 定义name 要保持一致 #服务器 127.0.0.1 xxx.xx.com
-
ssh反向代理(实现内网穿透)
-
首先修改代理服务器的sshd_config配置
vi /etc/ssh/sshd_config
-
打开 GatewayPort(删除前面的 # 号,将其设置为 yes)
-
修改保存后,执行如下命令将 sshd 服务重启下:
systemctl restart sshd
-
接着登录web服务器执行如下命令,实现连接到代理服务器,开启反向端口代理,其中 22 为web服务器的本地端口,2222 为代理服务器的监听端口(执行后会要求输入代理服务器的密码)。
-
autossh 为自动 ssh 重连工具,autossh 的参数与 ssh 的参数是一致的(唯一不同是多了个 -M 参数,这个参数指定一个端口)。它们区别在于,当隧道断开的时候,autossh 会自动重新连接而 ssh 不会。CentOS7 上没有默认安装 autossh 的,我们可以使用如下命令安装:
yum install autossh
-
当然我们可以可以直接使用 ssh ,只要把 autossh -M 2222 替换为 ssh 即可:
ssh -CNvR :2222:localhost:22 root@代理服务器地址
使用autossh的话:
autossh -M 2222 -CNvR :2222:localhost:22 root@代理服务器地址
(这里的localhost就是web服务器)
-
-
接着我们回到代理服务器执行如下命令可以看到这个监听:
netstat -anp | grep 2222
经过上面配置以后,我们如果在外网想要访问web服务器,只要连接代理服务器的 2222 端口,然后输入web服务器的主机密码可以登录:
ssh -p 2222 root@代理服务器地址
-
正向代理和反向代理的区别
-
位置不同:正向代理位于客户端与目标服务器之间;而反向代理位于目标服务器与客户端之间。
-
目的不同:正向代理主要用于保护用户的隐私和安全;而反向代理主要用于负载均衡、缓存和安全保护等。
-
透明度不同: 正向代理需要对客户端进行配置;而反向代理对客户端是透明的,不需要进行任何配置。
-
流量控制:正向代理可以控制流量的大小和速度;而反向代理主要关注服务器的负载均衡和流量分发。
-
安全性: 正向代理隐藏了用户的真实IP,增加了匿名性;而反向代理可以保护后端服务器的安全,对请求进行过滤和检查。
-
负载均衡:正向代理可以通过配置来实现简单的负载均衡;而反向代理则是实现负载均衡的常见方式。
欢迎大家关注我的个人公众号,我会持续更新技术相关的文章或一些科技资讯
更多推荐
所有评论(0)