04.Nginx代理(学习)

🍉1.Nginx代理服务基本概述

1.代理一次往往我们并不陌生,该服务我们常常用到。(比如:代理理财,代理租房,代理收获等等)

在这里插入图片描述

2.在没有代理模式的情况下,都是客户端直接请求服务端,服务端直接响应客户端。但是遇到高并发的请求之后,单台服务器难以支撑海量的用户请求,甚至可能造成服务瘫痪。

在这里插入图片描述

3.在有代理模式的情况下,客户端往往无法直接向服务端发起请求,而是需要使用到代理服务,来实现客户端和服务通信。

在这里插入图片描述

🍉2.Nginx代理服务常见模式

2.1正向代理

2.1正向代理:为客户端提供服务(内部上网)客户端<---->代理服务—>服务端

在这里插入图片描述

2.1.2客户端加速

比如:游戏加速器

在这里插入图片描述

2.1.3客户端缓存

比如:下载资源,可以查看代理服务是否有,如果有直接通过代理获取。

在这里插入图片描述

2.1.4客户端授权

很多公司为了安全,连接外网需要通过防火墙,防火墙可以配置规则,允许谁可以上网,谁不可上网

在这里插入图片描述

2.2 反向代理

2.2反向代理。用于公司集群架构中,用于提供服务器功能。客户端—>代理<—>服务端

在这里插入图片描述

2.2.1路由功能

根据用户请求的URI调度到不同的功能的服务器进行处理
在这里插入图片描述

2.2.2负载均衡

将用户发送的请求,通过负载均衡调度算法挑选一台合适的节点进行请求处理
在这里插入图片描述

2.2.3动静分离

根据用户请求的URI进行区分,将动态资源调度至应用服务器处理,将静态资源调度至静态资源服务器处理

在这里插入图片描述

2.2.4 数据缓存

将后端查询的资源存储至反向代理上缓存,可以加速用户获取资源
在这里插入图片描述

2.3正向代理和反向代理的区别

区别在与形式上的服务的“对象”不一样,其次架设的位置点不一样

正向代理代理的对象是客户端,为客户端服务

反向代理代理的对象是服务度,为服务端服务

🍉3.Nginx代理服务支持的协议

3.1Nginx作为代理服务,可支持的代理协议非常的多。

在这里插入图片描述

3.2 但通常情况下,我们将Nginx作为反向代理,常常回用到如下几种代理协议

在这里插入图片描述

3.3最后我们将企业常用的方向代理模式与nginx反向代理模块对应关系总结如下表格

反向代理模式Nginx反向代理模块
http websocket httpsngx_http_proxy_module
fastcgingx_http_fastcgi_module
uwcgingx_http_uwsgi_module
grpcngx_http_v2_module

🍉4.Nginx反向代理场景实践

4.1.Ngix反向代理配置语法示列

Syntax(语法): proxy_pass(v.达到什么位置) URL
Default(默认):  -
Context(环境): location ,if in location ,limit_except

http://localhost:8000/uri/
http://192.168.56.11:8000/uri/
http://unix:/tmp/backend.socket:/uri/

4.2.Nginx反向代理配置实列

在这里插入图片描述

角色外网IP(NAT)内网IP(NAT)主机名
Proxyeth0:10.0.0.5eth1:172.16.1.5lb01
web01eth1:172.16.1.7web01

4.2.1(为了方便抓包分析可以统一使用 10.0.0.0/24网段来配置代理)

①先配置后端一台web节点
配置后端web节点,域名是web.cry.com 端口是8080
[root@web01  ~]# cat /etc/nginx/conf.d/web.cry.com.conf
server {
  listen 8080;
  server_name web.cry.com;
  root /web;

  location / {
    index index.html;
  }
}

在这里插入图片描述

配置完配置文件,检查语句,重启服务
nginx -t
systemctl reload nginx
为站点增加一个索引文件

在这里插入图片描述

② 再配置Nginx反向代理,代理后端的web节点
[root@lb01 ~]# gzip /etc/nginx/conf.d/default.conf 
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.com.conf
server {
  listen 80;
  #server_name web.cry.com;

  location / {
    proxy_pass http://10.0.0.7:8080;  #为抓包用外网网卡
  }
}

1.修改后端的web_Server为80端口
2.修改代理服务器,代理的后端为80端口
 返回 的结果应该是 web… 返回的结果没有 达到预期? 原因是:proxy_pass 后面跟的是 IP地址:端口,后端只知道你要请求80端口 ,但并不知道你要请求的是哪个域名?(加上如下配置可解决问题)

③ 再反向代理配置文件中加入代理参数
server {
    listen 80;
    server_name web.cry.com;
    location / {
        proxy_pass http://10.0.0.7:80;
        proxy_set_header Host $http_host;        #将用户请求的域名信息赋值给Host 请求头信息。
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #把客户端的真实IP告诉后端的web节点
       
    }
}
④ 配置后端web配置
vim /etc/nginx/conf.d/web.cry.com.conf
server {
    listen 80;
    server_name web.cry.com;
    root /web;
    location / {
        index index.html;
    }
}

⑤ 配置本地劫持

在这里插入图片描述

在这里插入图片描述

⑥ 浏览器访问web.cry.com

在这里插入图片描述

抓包分析

在这里插入图片描述

查看日志文件分析(/var/log/nginx/access.log)
tail -f /var/log/nginx/access.log

我们先查看反向代理lb01这台机器的访问日记可以看到10.0.0.0访问到我们10.0.0.5
在这里插入图片描述
再查看web01这台机器的访问日记可以看到10.0.0.5反向代理机器的ip访问到我们10.0.0.7web机器上面 最后一列显示真实访问的ip这是因为我们添加了 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;访问日志的格式由/etc/nginx/nginx.conf中的log_format所定义

在这里插入图片描述

4.3 nginx反向代理配置参数

在这里插入图片描述

①添加发往后端服务器头信息

Syntax(语法):proxy_set_header fied value;
Default: proxy_set_header Host $proxy_host;
		 proxy_set_header Connection close;
Context: http,server,location

(1) proxy_set_header Host $http_host;
客户端请求HOST的值是web.cry.com那么代理服务会像后端请求时携带host变量为web.cry.com
(2) proxy_set_header X-Forward-For $proxy_add_x_forward_for; 
客户端通过代理服务访问后端服务,后端服务会通过变量记录真实客户端地址
(3)proxy_set_header x-Real-IP
将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip

②代理的向后端请求时使用的HTTP协议,默认1.0版本。如果使用长连接,建议调整为1.1版本协议

Syntax: proxy_http_version 1.0 | 1.1;
Default: proxy_http_version 1.0;
Context: http, server, location
This directive appeared in version 1.1.4. 

(4)proxy_http_version 1.1; 

③代理到后端的TCP连接,响应,返回等超时时间

#nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
#nginx代理等待后端服务器的响应时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
#后端服务器数据回传给nginx代理超时时间
Syntax: 
proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

④proxy_buffer代理缓冲区

4.1启用缓冲,nginx代理服务器将尽快的响应Header以及响应报文,并将其保存到proxy_buffer_size(headers)和proxy_buffers(data)设置的缓冲区中
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location

如果响应的报文过大无法存储至内存,则会将其中部分保存到磁盘上的临时文件中,
写入临时文件由
proxy_temp_path(控制临时存储目录)
proxy_max_temp_file_size(控制临时存储目录大小)
proxy_temp_file_write_size(控制一次写入临时文件的数据大小)限制,
临时文件最大大小由proxy_buffer_sizeproxy_buffers限制。
temp英语单词缩写
在这里插入图片描述

但当禁用缓冲时,nginx代理服务器会在接受到响应时立即同步传递给客户端。nginx代理服务器不会读取整个响应过程

4.2 proxy_buffer_size用于控制代理服务器读取后端第一部分响应header的缓冲区大小
Syntax: proxy_buffers_size size;
Default: proxy_buffers_size 4k|8k;
Context: ``http, server, location

#proxy_buffer_size 64k
4.3 proxy_buffers是代理服务器为单个连接设置响应缓冲区“数量”和“大小”.如果一个后端服务所返回的页面大小为256kb,那么会为其分配4个64KB的缓冲区来缓存,如果页面大小大于256kb,那么大于256kb的部分会缓存到proxy_temp_path指定的路径中。但是这并不是好方法,因为内存中的数据处理速度要快于硬盘,所以这个值一般建议设置为站点响应所产生的页面大小中间值,如果站点大部分脚本所产生的页面大小为256kb,那么可以把这个值设置为“16 16k" 等
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location

⑤代理的局限性

1.代理仅能代理一台后端节点(引入了负载均衡的技术)
2.如果代理需要代理多个后端节点,需要多个locaiton

那么这个时候代理的参数我们为了防止重复书写就把我们需要的代理参数整合到一个文件中,在配置文件中用icloud proxy_params;调用文件中的代理参数

5.1统一把代理参数放在nginx默认目录(/etc/nginx)下proxy_params文件
[root@lb01 ~]# cat /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_connect_timeout  60s;     # nginx连接后端的超时时间  TCP
proxy_read_timeout 60s;         # 响应头部超时时间
proxy_send_timeout 60s;         # 响应数据主体的超时时间
proxy_buffering on;		# 开启缓冲区
proxy_buffer_size 8k;		# 缓冲区Header大小
proxy_buffers 4 64k;		# 缓冲区数量 * 大小 = 最大接收
5.2Nginx代理最终配置 —> include proxy_params
[root@lb01 ~]# cat  /etc/nginx/conf.d/proxy_web.cry.com.conf
server {
  listen 80;
  server_name web.cry.com;

  location / {
    proxy_pass http://172.16.1.7:80;
    include proxy_params;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值