# Nginx 反向代理服务

# 1.Nginx 代理概述

# 1.1 什么是代理
  • 代理代理,代为办理,对于代理一词而言,我们并不陌生,在我们日常生活中常常用到。
  • 比如代理理财、代理租房、代理收货等等

1.jpg

# 2. Nginx 正向代理

  • 正向代理,(内部上网) 客户端 <--> 代理 -> 服务端
  • 比如:科学的方式访问 Google

2.jpg

# 3. Nginx 反向代理

反向代理,用于公司集群架构中,客户端 -> 代理 <--> 服务端

3.jpg

# 3.1 负载均衡

将用户发送的请求,通过负载均衡调度算法挑选一台合适的节点进行请求处理。

4.jpg

# 3.2 动静分离

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

5.jpg

# 3.3 数据缓存

将后端查询的数据存储至反向代理上缓存,可以加速用户获取资源。

6.jpg

# 4. 正向与反向代理区别

区别在于形式上服务的 "对象" 不一样、其次架设的位置点不一样。

  • 正向代理代理的对象是【客户端】,为客户端服务
  • 反向代理代理的对象是【服务端】,为服务端服务
  • user--> 正向代理(路由器)--> 反向代理(缓存)--> 服务器

# 5. Nginx 常用的代理协议

通常情况下,我们将 Nginx 作为反向代理,常常会用到如下几种代理协议,如下图所示:

7.jpg

8.jpg

# 6. Nginx 反向代理实践

# 6.1 配置语法指令
Syntax: proxy_pass URL;
Default: —
Context: location, if in location,limit_except
proxy_pass http://localhost:8000/uri/
http://10.0.0.7:8000/uri/
# 6.2 代理配置场景

9.jpg

# 6.2.1 环境准备
角色外网 ****IP (NAT)内网 ****IP (LAN)主机名
Proxyeth0:10.0.0.5eth1:172.16.1.5proxy01
web01eth1:172.16.1.7web01
# 6.2.2 web 节点配置
# web01 服务配置一个网站,监听在 `8080`,此时网站仅 `172` 网段的用户能访问
[root@web01 conf.d]# cat /etc/nginx/conf.d/web.hmallleasing.com.conf
server {
	listen 8080;
	server_name web.hmallleasing.com;
	
	location / {
		root /code/web;
		index index.html;
	}
}
[root@web01 conf.d]# mkdir /code/web
[root@web01 conf.d]# echo "web01-8080...">/code/web/index.html
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
# 6.2.3 proxy 节点配置
# proxy 代理服务配置,让外网用户能够通过代理服务访问到后端的 172.16.1.7 的 8080 端口站点内容
[root@lb01 conf.d]# cat /etc/nginx/conf.d/proxy_web.hmallleasing.com.conf
server {
	listen 80;
	server_name web.hmallleasing.com;
	
	location / {
		proxy_pass http://172.16.1.7:8080;
	}
}
[root@lb01 conf.d]# systemctl enable nginx
[root@lb01 conf.d]# systemctl start nginx
# 6.2.4 抓包分析访问过程

抓包分析 Nginx 代理处理整个请求的过程

1.jpg

# 6.3 代理相关配置参数
# 6.3.1 proxy_set_header
# 添加发往后端服务器的请求头信息,
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
		 proxy_set_header Connection close;
Context: http, server, location
# 客户端请求 Host 的值是 www.oldxu.net, 那么代理服务会像后端请求时携带 Host 变量为 www.oldxu.net
proxy_set_header Host $http_host;
# 将 $remote_addr 的值放进变量 X-Real-IP 中,$remote_addr 的值为客户端的 ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务,后端服务会通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 6.3.2 proxy_http_version
# 代理的向后端请求时使用的 HTTP 协议版本。默认 1.0 版本
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
# 6.3.3 proxy_connect_timeout
#nginx 代理与后端服务器 "连接超时" 时间 (代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
# 6.3.4 proxy_read_timeout
#nginx 代理等待后端服务器 "响应(Header)超时" 时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
# 6.3.5 proxy_send_timeout
#后端服务器 "数据(Data)回传给 nginx 代理超时" 时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
# 6.3.6 proxy_buffer (缓冲区)

1)启用缓冲时,nginx 代理服务器将尽快的接收响应 Header 以及响应报文,并将其保存到 proxy_buffer_size (Headers) 和 proxy_buffers (data) 设置的缓冲区中。

# proxy_buffer 代理缓冲区
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_size 和 proxy_buffers 限制。但当禁用缓冲时,nginx 代理服务器会在接收到响应时立即同步传递给客户端。nginx 代理服务器不会读取整个响应。

2)proxy_buffer_size 用于控制代理服务读取后端第一部分响应 Header 的缓冲区大小。

Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
# proxy_buffer_size 64k;

3)proxy_buffers 是代理服务器为单个连接设置响应缓冲区 “数量” 和 “大小” 。

如果一个后端服务所返回的页面大小为 256KB,那么会为其分配 4 个 64KB 的缓冲区来缓存,如果页面大小大于 256KB,那么大于 256KB 的部分会缓存到 proxy_temp_path 指定的路径中。但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。所以这个值一般建议设置为站点响应所产生的页面大小中间值,如果站点大部分脚本所产生的页面大小为 256KB,那么可以把这个值设置为 “16 16k”、“4 64k” 等。

Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
#proxy_buffers 4 64k;
# 6.3.7 代理参数总结
# 代理网站常用优化配置如下,将配置写入一个新文件,调用时使用 include 即可
[root@lb01 ~]# vim /etc/nginx/proxy_params
proxy_http_version 1.1;
proxy_set_header Connectin "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 120;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_temp_file_write_size 10240k;
proxy_max_temp_file_size 10240k;
# 使用 include 方式,便于后续 Location 的重复使用。
location / {
	proxy_pass http://127.0.0.1:8080;
	include proxy_params;
}

2.jpg

此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝