反向代理介绍
客户机发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户端。
正向代理
1
| 代替用户上网,如长城宽带有很多代理服务器,你访问新浪的时候就会把这个内容缓存到代理服务器上,下次再有用户访问新浪的时候就不用直接去新浪了,直接去代理服务器
|
反向代理
1 2 3 4 5 6 7
| 代理服务器,就是把服务器发布出去。
如:买车 的4S店 它就是厂家的代理 你 ------> 4s店 ------> 汽车厂家
在以前没有4S店,你就只能去厂家下单提车, 如果有4S店,去4S店发起购买请求,然后下单,等待4S店把车拿来。
|
反向代理的好处
就4S店的例子
- 对我们来说:4S店 让我们买车更方便,在家门口,而且不用应对海量用户。同时也是一个问题收集窗口(出了问题你肯定去4S店闹,不会去厂家)
- 对厂家来说:可以专心生产汽车
应用场景
堡垒机场景
前段时间,汉某酒店的住户数据被盗了,用户数据泄漏
1 2 3 4 5 6 7
| 客户端--------> 反向代理服务器(公网)(堡垒机)-------->业务服务器(私网)
业务服务器:安全配置只接受来自堡垒机的链接访问,其他拒绝(客户端公网无法访问私网服务器) 只接收堡垒机ip和xx端口的访问
堡垒机:没有数据。防止拖库
|
内网服务器发布场景(就一个公网ip)
适用于公网IP地址不足的场景
1 2 3 4
| (虚拟主机的方式配置三个代理) 客户端--------> 反向代理服务器(公网)-------->业务服务器(私网) Php |---------------> 业务服务器(私网) Java |---------------> 业务服务器(私网) Python
|
缓存场景
1 2 3 4 5 6 7
| 客户端--------> 缓存服务器(公网)(缓存静态服务器)-------->业务服务器(私网)
静态数据直接从缓存服务器拿 动态数据从业务服务器拿
当用户访问一个网站时,就会瞬间得到静态数据,这个时候网站已经开始渲染了 动态数据可能过来慢一点,当渲染完静态数据时,动态数据也过来了。这个时候你就看到整个页面了
|
- 一个页面你选择5s后一次返回结果
- 还是你访问的时候数据不断的开始展示。(更好的用户体验,减小业务服务器压力)
反向代理原理
- 客户端通过浏览器器 发起请求 代理理服务器器
- 代理理服务器器 接受请求
- 代理理服务器器 发起请求 业务服务器器
- 业务服务器器 接受请求
- 业务服务器器 处理理请求
- 业务服务器器 响应请求 代理理服务器器
- 代理理服务器器 响应请求 客户端
- 客户端通过浏览器器渲染请求并展示给⽤用户
反向代理实践
1 2 3 4 5
| client mac
反向代理 nginx
业务机器 book.ayitula.com http://118.190.209.153:4000/
|
前提保证你的nginx能上网,不然代理是不行的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| cd /usr/local/nginx/conf
# 备份配置 cp nginx.conf nginx.conf.2 cp nginx.conf.default nginx.conf
# 修改配置文件 vi nginx.conf
location / { # 代理的ip地址 proxy_pass http://118.190.209.153:4000/; }
# 杀掉nginx进程 killall nginx # 重启nginx /usr/local/nginx/sbin/nginx
# 访问你的服务器ip就ok了
|
优化反向代理的配置
- 你访问代理的时候所有请求信息都在 代理服务器,对于代理服务器的日志它能知道谁访问了它
- 但是对于 业务服务来说,只知道是代理服务器访问了,如果想知道 客户端是谁就要设置请求头 来告诉业务服务器是谁拿的数据
1 2 3 4 5 6
| 设置 proxy_set_header X-Real-IP proxy_set_header X-Forwarded-For 是因为不同厂家 设置的头不一样 有的针对 X-Real-IP 有的针对 X-Forwarded-For 提取用户 都加上就能满足所有需求
|
####
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| location / { index index.php index.html index.htm; #定义⾸首⻚页索引⽂文件的名称 proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器器列列表 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允许客户端请求的最⼤大单⽂文件字节数 client_body_buffer_size 128k; #缓冲区代理理缓冲⽤用户端请求的最⼤大字节数, proxy_connect_timeout 90; #nginx跟后端服务器器连接超时时间(代理理连接超时) #后端服务器器数据回传时间(代理理发送超时) #连接成功后,后端服务器器响应时间(代理理接收超时) #设置代理理服务器器(nginx)保存⽤用户头信息的缓冲区⼤大⼩小 proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; #⾼高负荷下缓冲⼤大⼩小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存⽂文件夹⼤大⼩小,⼤大于这个值,将从upstream服务器器传 }
|