【PHP】nginx负载均衡器的部署(5层\7层)
转载:https://blog.csdn.net/lpfstudy/article/details/130087423
目录
1、准备4台服务器,一台做负载均衡器,另外的3台做web服务器,每台都需要安装nginx,建议都编译安装nginx,统一安装配置
2、安装nginx成功后配置nginx里的网页,使之呈现对应的效果
三、配置HTTPS的负载均衡器(前提是需要会配置nginx的HTTPS环境)
服务器web服务上都有日志,日志里的ip是nginx-LB的函数用户user的呢?
1、在阿里云(也可以在腾讯云等云上)上购买域名(买一个最便宜的),并申请https证书(如下图所示)
2、将证书传递到我们的负载均衡器的nginx配置文件夹里,并给予解压如图所示
4、修改windows的hosts文件配置(配置对应的DNS服务)
5、在自己电脑上的浏览器进行测试(访问https://www.claylpf.xyz)
什么是负载均衡?
负载均衡,英文名称为Load Balance,是指将网络流量分配到多个服务器上,以达到提高系统性能、增加可靠性、降低延迟等目的的技术。负载均衡器可以根据不同的算法(如轮询、最少连接数等)将请求分发到不同的服务器上,从而实现服务器资源的均衡利用,提高系统的可扩展性和可用性。负载均衡通常用于高流量的网站、应用程序和数据库服务器等场景。
负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
理解:
负载:很多人访问 --》负担 load
均衡:很多台机器 --》平衡 balance
流量:用户的访问就是流量
实验:实现Web业务的负载均衡(http协议负载均衡)
一、实验规划图:
准备至少四台虚拟机,可以通过克隆虚拟机实现,如Web端的三台虚拟机就可以通过克隆实现
如何实现克隆虚拟机呢?
首先如下图所示:
然后进入克隆界面,之后点击创建链接克隆功能 (能减少磁盘空间的消耗)
之后就能自己选择安装位置和设置虚拟机名称啦
是不是很简单呀!!
注:如果你使用的网卡模式是桥接模式下静态配置的IP地址,则可能会出现IP地址出现冲突的问题,解决这个问题则需要你去重新配置IP地址哦,而且你有可能需要改变nginx输出的端口,不然可能会导致端口冲突。
完成环境的配置后:
二、实验步骤:
1、准备4台服务器,一台做负载均衡器,另外的3台做web服务器,每台都需要安装nginx,建议都编译安装nginx,统一安装配置
下面是统一安装配置nginx的脚本:
完整版一键安装配置nginx脚本[root@mysql nginx]# cat onekey_install_henshan_nginx.sh#!/bin/bash#新建一个文件夹用来存放下载的nginx源码包mkdir -p /nginxcd /nginx#新建工具人用户、设置无法登录模式useradd -s /sbin/nologin clay#下载nginx#wget http://nginx.org/download/nginx-1.23.2.tar.gzcurl -O http://nginx.org/download/nginx-1.23.2.tar.gz#解压nginx源码包tar xf nginx-1.23.2.tar.gz#解决软件依赖关系、需要安装的软件包yum install epel-release -yyum install gcc gcc-c++ openssl openssl-devel pcre pcre-devel automake make psmisc net-tools lsof vim geoip geoip-devel wget zlib zlib-devel -y#到达nginx配置文件目录下cd nginx-1.23.2#编译前的配置./configure --prefix=/usr/local/scnginx66 --user=clay --with-http_ssl_module --with-http_v2_module --with-stream --with-http_stub_status_module --with-threads#编译、开启一个进程同时编译make -j 1#编译安装make install#启动nginx/usr/local/scnginx66/sbin/nginx#永久修改PATH变量PATH=$PATH:/usr/local/scnginx66/sbinecho "PATH=$PATH:/usr/local/scnginx66/sbin" >>/root/.bashrc#设置nginx的开机启动--手动添加#在/etc/rc.local中添加启动命令#/usr/local/scnginx66/sbin/nginxecho "/usr/local/scnginx66/sbin/nginx" >>/etc/rc.local#给文件可执行权限chmod +x /etc/rc.d/rc.local#selinux和firewalld防火墙都需要关闭service firewalld stopsystemctl disable firewalld#临时关闭selinuxsetenforce 0#永久关闭selinux (需要开机重启)#vim /etc/selinx/configsed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config[root@mysql nginx]#
2、安装nginx成功后配置nginx里的网页,使之呈现对应的效果
[root@web-1 html]# pwd/usr/local/scnginx66/html[root@web-1 html]# ls50x.html index.html[root@web-1 html]#[root@web-1 html]# vim index.html[root@web-1 html]# cat index.html<!DOCTYPE html><html><head><title>Welcome to Web-1!</title> #修改为Web-1<style>html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }</style></head><body><h1>Welcome to Web-1!</h1> #修改为Web-1<p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>[root@web-1 html]#
3、修改四台linux机器的名字:
[root@localhost /]# hostnamectl set-hostname nginx-LB1[root@localhost /]# su[root@nginx-lb1 /]#
4、检查配置是否成功
IP是否对应成功:
nginx-LB1 --》192.168.2.77
Web-1 --》192.168.2.215
Web-2 --》192.168.2.212
Web-3 --》192.168.2.210
检测主机名是否对应上:
检测3台Web端的nginx是否能连接的上:
下面是nginx连接成功的图片
5、对nginx-LB1负载均衡器进行配置
nginx是工作在应用层的,而我们需要对nginx配置文件中的http协议进行配置
http协议也是工作在应用层的。
因此我们可以叫做配置负载均衡5层,也可以叫做负载均衡7层
我们通过对默认的配置文件nginx.conf文件进行配置
[root@nginx-lb1 /]# cd /usr/local/scnginx66/conf/ #nginx配置文件路径[root@nginx-lb1 conf]# lsfastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utffastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default[root@nginx-lb1 conf]# vim nginx.conf #编译配置文件
参考官方网站:Using nginx as HTTP load balancer
Load balancing methods --》 负载均衡的算法--》调度算法
The following load balancing mechanisms (or methods) are supported in nginx:
1、轮询:轮转 --》rr
round-robin — requests to the application servers are distributed in a round-robin fashion,
轮询是一种调度算法,其基本原理是依次轮流分配CPU时间片给每个进程,每个进程都有相同的机会获得CPU时间片,直到所有进程都被执行完毕或者达到预设的时间片长度。在轮询算法中,每个进程被分配的时间片通常是固定的,因此长时间运行的进程可能会阻塞其他进程的执行,导致响应时间较长。轮询算法适用于进程的执行时间相对较短,且没有特别紧急的进程需要优先处理的情况。
2、最小连接数
least-connected — next request is assigned to the server with the least number of active connections,
最小连接数调度算法是一种负载均衡算法,它的主要思想是将请求分配到当前连接数最少的服务器上,以达到负载均衡的目的。该算法适用于集群中的服务器数量较少的场景,因为在服务器数量较多的情况下,该算法的优势会逐渐减弱。最小连接数调度算法可以提高服务器的利用率,避免某些服务器过度负载的情况,从而提高整个系统的稳定性和可靠性。
ip-hash算法
ip-hash — a hash-function is used to determine what server should be selected for the next request (based on the client’s IP address).
我们可以保持会话的一致性,总是让客户机去访问到相同的后端服务器,这是因为它是根据客户机的IP地址进行选择的,相同的ip地址总是会访问第一的那个后端服务器
IP-hash算法是一种调度算法,它将客户端的IP地址作为散列键,将其映射到服务器组中的一个服务器上。在负载均衡的过程中,当客户端发送请求时,该请求的IP地址将被散列,并根据散列值将请求发送到服务器组中的一个服务器上。IP-hash算法的优点是可以确保同一客户端的请求始终被发送到同一台服务器上,从而避免了一些可能由于服务器之间的状态不同而导致的问题。此外,该算法还可以在服务器组中实现负载均衡,从而提高整个系统的性能和可靠性。
我们的负载均衡的配置是放在http协议里面的:
http {include mime.types;default_type application/octet-stream;.....#添加这一条upstream scweb{ #对其进行负载均衡,命名为scwebserver 192.168.2.215;server 192.168.2.212;server 192.168.2.210;}server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {proxy_pass http://scweb; #修改这一条}.....}....}
完成配置后重载nginx-LB1负载均衡器:
[root@nginx-lb1 conf]# vim nginx.conf[root@nginx-lb1 conf]# cd ..[root@nginx-lb1 scnginx66]# nginx -tnginx: the configuration file /usr/local/scnginx66/conf/nginx.conf syntax is oknginx: configuration file /usr/local/scnginx66/conf/nginx.conf test is successful[root@nginx-lb1 scnginx66]# cd sbin[root@nginx-lb1 sbin]# ./nginx -s reload #对nginx进行重载,不影响nginx服务的进行[root@nginx-lb1 sbin]#
6、对nginx负载均衡器进行测试
我们访问192.168.2.77(负载均衡器的IP),他会自动跳转到我们设置的Web服务器里去
如果出现以上图片,说明nginx的7层负载均衡器完成配置啦!
注:我们默认使用的负载均衡器的算法是 轮询算法
如果我们需要使用其他的调度算法,我们需要在nginx的配置文件里设置:
ip_hash算法:
最小连接数算法:
三、配置HTTPS的负载均衡器(前提是需要会配置nginx的HTTPS环境)
可以参考我的:(36条消息) 使用nginx搭建http和https环境_Claylpf的博客-CSDN博客
先搭建好https的环境哦
先回答下面这个问题:
服务器web服务上都有日志,日志里的ip是nginx-LB的函数用户user的呢?
access.log 访问日志
tail -f access.log :意思是动态查看访问日志
由上图可知,我们的web后端服务是不告诉用户的,用户是不知道的,我们的web服务也是不知道是哪个用户访问了它的,他知道是负载均衡器访问了它,因此我们在配置https协议的时候,可以直接对用户访问的负载均衡器进行配置即可。因为负载均衡器才是对外提供的接口。
步骤:
1、在阿里云(也可以在腾讯云等云上)上购买域名(买一个最便宜的),并申请https证书(如下图所示)
2、将证书传递到我们的负载均衡器的nginx配置文件夹里,并给予解压如图所示
3、编辑nginx.conf文件,配置HTTPS环境
配置如下图所示:
重新编译nginx
4、修改windows的hosts文件配置(配置对应的DNS服务)
增加这一条
最后再验证一下(cmd.exe)
5、在自己电脑上的浏览器进行测试(访问https://www.claylpf.xyz)
完成配置啦!!
猜你喜欢
- 【PHP】Permission denied怎么解决
- Permission denied的解决方法:1、确保当前用户具有足够的权限来执行该操作;2、如果当前用户没有足够的权限,可以尝试更改文件或目录的权限;3、如果当前用户不是管理员或没有足够的权限,可以尝试使用管理员权限来执行操作;4、可以尝试更改文件系统属性,以便允许写入操作;5、可以尝试释放磁盘空间,以便有足够的空间来执行操作;6、检查文件是否被其他进程占用。当我们遇到Permission denied这样的错误提示时,这通常意味着我们没有足够的权限来执行某个操作。解决Permiss
- 【PHP】PHP8如何通过Sanitize Filters来增强应用程序的安全性
- PHP是一门广泛应用于Web开发的脚本语言,而安全性一直是Web应用程序开发者需要关注的重要问题。PHP8提供了一种称为Sanitize Filters的机制,通过对用户输入进行过滤和清理,可以增强应用程序的安全性。本文将详细介绍PHP8中Sanitize Filters的使用方法,并提供一些具体的代码示例,帮助开发者更好地了解如何应用这一特性。首先,让我们来了解一下Sanitize Filters是什么。Sanitize Filters是一组用于过滤和清理用户输入数据的PHP函数,可以帮助开发
- 【PHP】如何在ThinkPHP6中使用MongoDB进行数据存储
- 随着互联网的不断发展,数据的存储和处理越来越成为一个重要的方向。而mongodb则是一种适用于大规模数据和高性能应用场景的nosql数据库,它的高性能和可扩展性得到了众多开发者的拥护。在这篇文章中,我们将介绍如何在thinkphp6中使用mongodb进行数据存储。一、安装MongoDB拓展首先,我们需要在服务器上安装MongoDB拓展,以便我们在ThinkPHP6中使用MongoDB进行数据存储。在这里,我以Windows系统为例,讲解MongoDB的安装方法。1.下载MongoDB拓展我们可
- 【PHP】php判断字符串是否是中文
- 可以判断。判断方法:1、使用preg_match()函数配合正则来判断是否全是中文 ,语法“!preg_match("/[^\x80-\xff]/i",$str)”;2、使用preg_match()函数配合正则来判断是否包含中文 ,语法“preg_match("/[\x7f-\xff]/", $str)”或“preg_match('/[^\x00-\x80]/',$str)”。本教程操作环境:windows7系统、PHP8.1版、
- 【PHP】php如何创建关联数组表格
- 随着互联网技术的不断发展,Web 应用程序的开发变得越来越重要。其中,关联数组表格是 Web 应用程序中常用的一种数据结构,它可以将数据按照列与行的方式分组存储,并且可以方便地在前端界面中进行展示。那么,如何使用 PHP 创建关联数组表格呢?本文将为您一一介绍。一、创建关联数组在 PHP 中,我们可以使用关联数组来存储数据,关联数组是以字符串为索引的数组。相较于索引数组(使用数字作为索引的数组),关联数组更加灵活,可以通过索引来直接访问每个元素。下面的示例代码创建了一个关联数组,包含了
- 【PHP】 php 打包zip文件
- 实现方法一:使用ZipArchive类// 创建一个ZipArchive对象 $zip = new ZipArchive(); // 新建一个zip文件 $zipName = 'archive.zip'; if ($zip->open($zipName, ZipArchive::CREATE | ZipArchive::OVERWRITE)
- 【PHP】PHP8如何创建可扩展的应用程序
- 深入掌握PHP8底层开发原理与新特性:如何创建可扩展的应用程序导语随着互联网技术的发展,PHP成为最受欢迎的Web开发语言之一。PHP语言的最新版本PHP8在底层开发原理和新特性方面做了很多改进和优化,使得开发者可以更好地创建可扩展的应用程序。本文将带您深入探索PHP8的底层开发原理和新特性,并给出代码示例来帮助您更好地理解。一、PHP8底层开发原理的改进JIT编译器的引入PHP8引入了JIT(Just-In-Time)编译器,通过将PHP代码转换成本地机器码,使得PHP代码的执行速度得到了显著
- 【PHP】php会出现哪些漏洞呢
- 会出现的漏洞有跨站脚本攻击、sql注入、文件包含漏洞、代码注入漏洞、文件上传漏洞、会话劫持、不安全的文件权限等等。详细介绍:1、跨站脚本攻击,xss漏洞通常是由于未正确过滤用户输入导致的,为了防止xss漏洞,开发人员应该对用户输入进行严格的过滤和转义,确保用户输入不会被当作脚本执行;2、sql注入,通常是由于未正确过滤用户输入或者使用不安全的sql查询语句导致的等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP作为一种广泛使用的服务器端脚本语言,被广泛
- 【PHP】如何在PHP中使用ReactPHP进行异步操作和事件驱动开发
- 【PHP】了解PHP 8新特性Attributes注解
- 【VUE】Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!
- 【PHP】使用intervention/image给图片添加文字和图片
- 【PHP】如何使用PHP在微信小程序中实现AI功能?
- 【PHP】TP使用endroid/qr-code生成二维码
- 【C#】C# Winform程序之间通讯
- 【AntDesignPro】Ant Design Pro学习记录—ModalForm的使用(一)
- 【负载均衡】Nginx实现负载均衡的4种方式
- 【PHP】php 实现SHA256WithRSA