42. Nginx扩展多个WEB节点 | nginx反向代理

文章目录

  • 1.扩展多个WEB节点
  • 2. 多节点问题一:存储问题
  • 3. 多节点问题二:访问问题
      • 3.2 DNS轮询, 需要依赖web节点是公网IP
      • 3.2负载均衡,
        • Nginx代理的 配置文件进行优化:(proxy_params)

1.扩展多个WEB节点

原因:单台web服务器能抗住的访问是有限的
配置多台web服务器能提升更高的访问速度,能够接收更多的用户请求。

  • 提高冗余。
  • 提高性能。
节点 ip
web01 10.0.0.7    172.16.1.7
web02 (复制一份172.16.1.7的数据即可) 10.0.0.8   172.16.1.8
db01 10.0.0.51   172.16.1.51

1.1 准备web02服务器
1.2 安装Nginx+PHP环境
web01执行的操作

scp /etc/yum.repos.d/[email protected]:/etc/yum.repos.d/nginx.repo
scp php.zip [email protected]:~

web02执行的操作:

[root@web02 ~]# unzip php.zip      #解压web01推送过来的压缩包
[root@web02 ~]# yum
localinstall php/*.rpm           #通过本地方式安装所有的rpm
[root@web02 ~]# yum install  nginx -y

1.3 推送web01上的nginx配置、php配置、至web02

[root@web01 ~]# scp -rp /etc/nginx [email protected]:/etc/
[root@web01 ~]# scp -rp /etc/php-fpm.d/www.conf [email protected]:/etc/php-fpm.d/www.conf
[root@web01 ~]# scp -rp /etc/php.ini [email protected]:/etc/php.ini

1.4 将web01上的代码推送一份至web02

[root@web01 ~]# scp -rp /code [email protected]:/

1.5 启动服务nginx php

[root@web02 ~]# groupadd -g 666 www
[root@web02 ~]# useradd -u 666 -g 666 www
[root@web02 ~]# systemctl restart nginx php-fpm
[root@web02 ~]# systemctl enable nginx php-fpm
[root@web02 ~]# chown -R www.www /code/
#因为推送过来的代码权限发生了变化,所以需要做一次修改

2. 多节点问题一:存储问题

扩展节点需要解决的问题: 静态资源不统一。

user --> web02 user --> web01
引入NFS共享存储,来保证静态资源的一致。

除了NFS,也可以是其他的存储,比如:glusterfs、fastdfs、云厂商的OSS
容量是有限的。 有多台服务器组成的一个集群。 ( 4台组成集群。 400TB )
图片、视频、附件、文档、pdf (不可变的内容,称之为静态资源 )

NFS共享储存方案

1.静态资源的一致。
2.节省web节点空间。
3.能够解决容量不足。

2.1安装一台NFS服务器,配置并共享一个目录

思路:任何一个服务,都是 安装 配置 启动。

  • 安装,配置 NFS
[root@nfs ~]# yum install nfs-utils -y
[root@nfs ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
  • 初始化环境
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u666 -g666 www
[root@nfs ~]# rm -rf /data/  &&  mkdir /data/blog -p
[root@nfs ~]# chown -R www.www /data/blog/
  • 重启
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enable nfs

2.2 找到网站静态资源存放的路径,进行NFS的共享。

浏览器开发者模式:
  地址:http://blog.oldxu.com/wp-content/uploads/2020/04/timg.jpeg
  路径:/code/wordpress/wp-content/uploads/2020/04/timg.jpeg
–>需要共享的目录:/code/wordpress/wp-content/uploads/

2.3 web节点挂载NFS共享目录:
[root@web02 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/

2.3 测试,web02上传。web01查看,如果没有问题,说明共享存储对接完成。


3. 多节点问题二:访问问题

3.2 DNS轮询, 需要依赖web节点是公网IP

配置DNS的 A记录 
  blog.oldxu.com
  10.0.0.7
  10.0.0.8
  10.0.0.9

1.需要所有的web节点具备公网IP地址
2.公网独立IP需要费用,而且不便宜。
3.所有的web节点有公网IP,不安全。
4.DNS轮询机制,没有 健康检查功能。( 体验差 )

3.2负载均衡,

仅需要一台服务器对外, 所有的后端节点走内网

1.所有的web节点不在需要有公网IP
  1.1 节省成本
  1.2 保证安全
2.能够对后端的web节点进行健康检查机制
3.负载均衡有对应的调度算法
  轮询
  加权轮询
  最少连接数调度算法

想要实现负载均衡,必须先去了解 Nginx代理?

负载均衡地址跳转

正向与反向代理的区别

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

42. Nginx扩展多个WEB节点 | nginx反向代理_第1张图片
42. Nginx扩展多个WEB节点 | nginx反向代理_第2张图片


反向代理模式 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

ip地址规划:

访问ip 反向代理服务ip 后端节点
10.0.0.1 10.0.0.5 / 172.16.1.5 we02 172.16.1.7

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

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

	location / {
		index index.html;
	}
}

[root@web01 ~]# systemctl reload nginx

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

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

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

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长连接协议。

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

把客户端的真实IP告诉后端的web节点

proxy代理服务:
[root@lb01 ~]# gzip /etc/nginx/conf.d/default.conf
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.oldxu.com.conf

server {
	listen 80;
	server_name web.oldxu.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;
		proxy_http_version 1.1;
	}
}

后端web节点:
[root@web01 ~]# cat /etc/nginx/conf.d/web.oldxu.com.conf

server {
	listen 80;
	server_name web.oldxu.com;
	root /web;

	location / {
		index index.html;
	}
}

4.与Nginx代理相关的参数有哪些?通过 一张图来解释所有的参数。

42. Nginx扩展多个WEB节点 | nginx反向代理_第3张图片

proxy_connect_timeout time;	nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_read_timeout time;	nginx代理等待后端服务器的响应时间
proxy_send_timeout time;	后端服务器数据回传给nginx代理超时时间
proxy_buffering on | off;
proxy_buffer_size xxxsize;
proxy_buffers number xxxsize;

[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_web.oldxu.com.conf

server {
	listen 80;
	server_name web.oldxu.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的代理接收的用户连接是有限? 65535 最多能使用的端口数。
5w可以使用。最多代理能支撑5w的连接。
负载均衡 其实 都是 七层应用层 的。

Nginx的代理有问题?
仅能代理一台后端webserver?多台webserver组成的集群怎么办?

Nginx反向代理衍生的另一个功能?
Nginx负载均衡


Nginx代理的 配置文件进行优化:(proxy_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.oldxu.com.conf
server {
	listen 80;
	server_name web.oldxu.com;

	location / {
		proxy_pass http://172.16.1.7:80;
		include proxy_params;
	}
}

你可能感兴趣的:(集群,nginx,运维,负载均衡,服务器,centos)