关于负载均衡前对反向代理的理解

本文详细介绍了Nginx代理的基本概念,包括正向代理和反向代理的区别,以及如何配置Nginx进行反向代理。此外,还深入探讨了负载均衡的配置方法,特别是通过Nginx的upstream指令定义地址池来实现负载均衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.多个web节点如何访问

1.1 DNS轮询, 需要依赖web节点是公网IP,
	配置DNS的 A记录 
		blog.wyk.com
			10.0.0.7
			10.0.0.8
			10.0.0.9

	1.需要所有的web节点具备公网IP地址
	2.公网独立IP需要费用,而且不便宜。
	3.所有的web节点有公网IP,不安全。
	4.DNS轮询机制,没有 健康检查功能。( 体验差 )
1.2 负载均衡, 仅需要一台服务器对外, 所有的后端节点走内网
	1.所有的web节点不在需要有公网IP
		1.1 节省成本
		1.2 保证安全
	2.能够对后端的web节点进行健康检查机制
	3.负载均衡有对应的调度算法
		轮询
		加权轮询
		最少连接数调度算法
		.........

想要实现负载均衡,必须先去了解 Nginx代理? 然后在学习负载均衡。

2.正向代理和反向代理的区别

区别在于形式上服务的"对象"不一样
  正向代理代理的对象是客户端,为客户端服务 (常用与为客户端提供科学写上网的方式)
  反向代理代理的对象是服务端,为服务端服务 (用用于企业集群架构, 后端有多个web节点组成的集群,然后 接入代理,由代理统一调度)

反向代理模式					Nginx反向代理模块
http、websocket、https		ngx_http_proxy_module		java | http | https | websocket | go 
fastcgi						ngx_http_fastcgi_module		php
uwsgi						ngx_http_uwsgi_module		python
grpc						ngx_http_v2_module			go
	

3.配置反向代理

客户端:10.0.0.1
反向代理: 10.0.0.5 172.16.1.5
后端节点: 10.0.0.7 172.16.1.7
1.配置后端的web节点,域名是web.wyk.com; 端口是8080

[root@web01 ~]# cat /etc/nginx/conf.d/web.wyk.com.conf
server {
	listen 8080;
	server_name web.wyk.com;
	root /web;

	location / {
		index index.html;
	}
}

[root@web01 ~]# systemctl reload nginx

2.配置nginx反向带理,代理后端的web节点

[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf
server {
	listen 80;
	server_name web.wyk.com;

	location / {
		proxy_pass http://10.0.0.7:8080;
	}
}

[root@lb01 ~]# systemctl start nginx
[root@lb01 ~]# systemctl enable nginx

3.抓包分析下原理
3.1.如果将后端节点的端口修改为80会怎样?

	1.修改后端的web_Server为80端口
	2.修改代理服务器,代理的后端为80端口


	返回 的结果应该是   web.....
	返回的结果没有 达到预期?
	
	原因是:proxy_pass 后面跟的是 IP地址:端口,后端只知道你要请求80端口 ,但并 不知道你要请求的是哪个域名?
		proxy_set_Header Host $http_host;
	告诉后端服务器,我要请求你的80端口,同时请求的是哪个域名。


	
	用户请求 代理 使用的是 http1.1协议,而代理请求后端服务使用的是 http1.0协议。

		proxy_http_version 1.1;   配置这条即可实现代理与后端走http1.1长连接协议。


	3.后端的web节点如何知道客户端的真实IP?

		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

写到配置文件

  • proxy代理服务:
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf
server {
	listen 80;
	server_name web.wyk.com;

	location / {
		proxy_pass http://10.0.0.7:80;
		proxy_set_header Host $http_host;	#告诉服务器请求那个端口同事加上那个域名,不然会找不到域名
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;	#向后端的web节点返回客户端的真实ip,因为一直都是代理去访问的,不知道客户端的真实ip
		proxy_http_version 1.1; 			#实现代理与后端走http1.1长连接
	}
}
  • 后端web节点
[root@web01 ~]# cat  /etc/nginx/conf.d/web.wyk.com.conf
server {
	listen 80;
	server_name web.wyk.com;
	root /web;

	location / {
		index index.html;
	}
}
  • 与nginx代理相关的参数
	proxy_connect_timeout time;		nginx代理与后端服务器连接超时时间(代理连接超时)
	proxy_read_timeout time;		nginx代理等待后端服务器的响应时间
	proxy_send_timeout time;		后端服务器数据回传给nginx代理超时时间
	proxy_buffering on | off;
	proxy_buffer_size size;
	proxy_buffers number size;

写到配置中

[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf
server {
	listen 80;
	server_name web.wyk.com;

	location / {
		proxy_pass http://172.16.1.7:80;
		proxy_http_version 1.1;

		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代理的 配置文件进行优化:将代理相关的参数写到/etc/nginx/下以params结尾

[root@lb01 ~]# cat /etc/nginx/proxy_params
proxy_http_version 1.1;

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;

#然后就可以直接在配置文件写include proxy_params;即可.
[root@lb01 ~]# cat  /etc/nginx/conf.d/proxy_web.eyk.com.conf
server {
	listen 80;
	server_name web.wyk.com;

	location / {
		proxy_pass http://172.16.1.7:80;
		include proxy_params;
	}
}
关于负载均衡的配置upstream定义一个地址池
nginx负载均衡配置

[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.wyk.com.conf
upstream web {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}

server {
	listen 80;
	server_name web.wyk.com;

	location / {
		proxy_pass http://web;
		include proxy_params;
	}

}



web01:
[root@web01 ~]# cat /etc/nginx/conf.d/web.wyk.com.conf
server {
	listen 80;
	server_name web.wyk.com;
	root /web;

	location / {
		index index.html;
	}
}

web02:
[root@web02 ~]# cat /etc/nginx/conf.d/web.wyk.com.conf
server {
	listen 80;
	server_name web.wyk.com;
	root /web;

	location / {
		index index.html;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值