代理和负载均衡


什么是代理?
代理一词往往并不陌生, 该服务我们常常用到如(代理理财、代理租房、代理收货等等),如下图所示

image-20240527141634673

没有代理情景
在没有代理模式的情况下,客户端和 Nginx 服务端,都是客户端直接请求服务端,服务端直接响应客户端。

image-20240527141700830

企业场景
那么在互联网请求里面,客户端往往无法直接向服务端发起请求,那么就需要用到代理服务,来实现客户端和服务通信,如下图所示。

image-20240527141725340

Nginx代理服务常见模式:
Nginx作为代理服务,按照应用场景模式进行总结,代理分为正向代理、反向代理

正向代理与反向代理的区别:
1.区别在于形式上服务的”对象”不一样
2.正向代理代理的对象是客户端,为客户端服务
3.反向代理代理的对象是服务端,为服务端服务

Nginx代理服务支持协议:
Nginx作为代理服务,可支持的代理协议非常的多,具体如下图

image-20240527141843419

反向代理模块总结

反向代理模式 nginx配置模块
http、websocket、https ngx_http_proxy_module
fastcgi ngx_http_fastcgi_module
uwsgi ngx_http_uwsgi_module
grpc ngx_http_v2_module

Nginx反向代理配置语法

Syntax: proxy_pass 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/
location
	proxy_pass
主机 WAN IP Lan IP 角色 应用
web01 10.0.0.6 127.16.1.6 web网站 nginx php wordpress
lb01 10.0.0.5 127.16.1.5 反向代理服务 nginx
db01 10.0.0.51 127.16.1.51 数据库 mariadb

web服务器

# 安装gninx php
yum install -y nginx
# 编写wordpress配置文件
vim /etc/nginx/conf.d/1.conf
server {
	listen 80;
	server_name www.wp.com;
	root /test;
	index index.html;
}
# 创建站点目录
mkdir /test
# 准备索引文件
echo 123 > /test/index.html
# 启动nginx 和 php
systemctl start nginx
# 访问页面
www.wp.com

image-20240527142807082

部署反向代理服务器(proxy_pass)

# 安装nginx
yum install -y nginx
# 编辑代理配置文件
vim /etc/nginx/conf.d/lb.conf
server{
	listen 80;
	server_name www.wp.com;
	location / {
			proxy_pass http://172.16.1.7:80;
			proxy_set_header HOST $HOST; # 不会盲目访问conf.d目录下的第一个文件
	}
}
# 检测nginx 语法
[root@lb01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 启动nginx
[root@lb01 ~]# systemctl start nginx
# 本地DNS解析
10.0.0.5 www.wp.com
# 问题1
lb01是通过访问172.16.1.7:80端口访问到后端的web服务器
web01的/etc/nginx/conf.d/下谁的配置文件在第一层 就优先访问谁
# 处理方式 proxy_set_header HOST $HOST;
将域名放到后面 lb01请求web01的时候带着域名去访问
server{
	listen 80;
	server_name www.wp.com;
	location / {
		proxy_pass http://172.16.1.7:80;
		proxy_set_header HOST $HOST;
		}
}
# 访问浏览器
www.wp.com

优化nginx配置文件

# 准备优化文件
vim /etc/nginx/proxy_params

# 在代理服务器上的请求头中 带着域名去访问后端的web服务器
优化后的nginx代理配置文件
proxy_set_header Host $http_host;

# 在代理服务器得请求头中 透传用户的真实ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# 代理服务器连接后端web的超时时间
proxy_connect_timeout 30;

# 后端服务器回传给代理服务器的超时时间
proxy_send_timeout 60;

# 后端服务器收到数据的接受超时时间
proxy_read_timeout 60;

# 代理缓冲区的开启
proxy_buffering on;

# 代理缓冲区的大小
proxy_buffer_size 32k;

# 开启了4个128k的缓冲区主体
proxy_buffers 4 128k;



################ 优化后的conf文件  #################

server{
	listen 80;
	server_name nb.hh.com;
	location /{
	proxy_pass http://172.16.1.7:80;
	include proxy_params;  #(文件存在在nginx目录下,调用此文件的内容)
	}
}

负载均衡(upstream backend)

主机名 IP 角色 应用
web01 10.0.0.7 web服务器 nginx
web02 10.0.0.8 web服务器 nginx
lb 10.0.0.5 负载均衡 nginx
######### web端 ##########
# web01 web02 安装nginx
yum install -y nginx
# 编写网站配置
######## web01 #########
server{
	listen 8080;
	server_name 10.0.0.7;
	root /test;
	index index.html;
}
# 检测语法
nginx -t
# 创建站点目录
mkdir /test
# 准备索引文件
echo 'this is web01' > /test/index.html
# 启动nginx
systemctl start nginx

######### web02 ###########

server{
	listen 8081;
	server_name 10.0.0.8;
	root /test;
	index index.html;
}
# 检测语法
nginx -t
# 创建站点目录
[root@web02 ~]# mkdir /test
# 创建索引文件
[root@web02 ~]# echo 'this is web02' > /test/index.html
# 启动nginx
[root@web02 ~]# systemctl restart nginx

image-20240527143838220

############ 负载均衡配置 ###########
# 安装nginx
yum install -y nginx
# 编写nginx负载均衡配置文件
vim /etc/nginx/conf.d/lb.conf
upstream web {     #  定义了一个web服务器组
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}
server{
	listen 80;
	server_name lb.web.com;
	location / {
	proxy_pass http://web;    #  转发到web服务器组中
	include proxy_params; # 调用优化好的文件
	}
}
# 编写优化文件
vim /etc/nginx/proxy_params
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 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

# 检测语法
nginx -t

# 启动nginx
systemctl start nginx

# 本地DNS解析
10.0.0.5 lb.web.com
# 访问负载均衡
lb.web.com




###########负载均衡代理域名时候要指定  其他端口   #################
### 别相同不然只会访问第一个网站



########### 负载均衡的调度算法 ##########
# 轮询 默认配置就是轮询
upstream web {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
按时间顺序逐一分配到不同的后端服务器(默认)