您的当前位置:首页>全部文章>文章详情

【PHP】nginx负载均衡器的部署(5层\7层)

CrazyPanda发表于:2024-05-29 21:08:55浏览:367次TAG:

转载:https://blog.csdn.net/lpfstudy/article/details/130087423

目录

什么是负载均衡?

实验:实现Web业务的负载均衡(http协议负载均衡)

一、实验规划图:

如何实现克隆虚拟机呢?

二、实验步骤:

1、准备4台服务器,一台做负载均衡器,另外的3台做web服务器,每台都需要安装nginx,建议都编译安装nginx,统一安装配置

2、安装nginx成功后配置nginx里的网页,使之呈现对应的效果

3、修改四台linux机器的名字:

4、检查配置是否成功

5、对nginx-LB1负载均衡器进行配置 

6、对nginx负载均衡器进行测试

三、配置HTTPS的负载均衡器(前提是需要会配置nginx的HTTPS环境)

服务器web服务上都有日志,日志里的ip是nginx-LB的函数用户user的呢?

1、在阿里云(也可以在腾讯云等云上)上购买域名(买一个最便宜的),并申请https证书(如下图所示)

2、将证书传递到我们的负载均衡器的nginx配置文件夹里,并给予解压如图所示

 3、编辑nginx.conf文件,配置HTTPS环境

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
发表于:2023-12-06 浏览:368 TAG:
【PHP】PHP8如何通过Sanitize Filters来增强应用程序的安全性
PHP是一门广泛应用于Web开发的脚本语言,而安全性一直是Web应用程序开发者需要关注的重要问题。PHP8提供了一种称为Sanitize Filters的机制,通过对用户输入进行过滤和清理,可以增强应用程序的安全性。本文将详细介绍PHP8中Sanitize Filters的使用方法,并提供一些具体的代码示例,帮助开发者更好地了解如何应用这一特性。首先,让我们来了解一下Sanitize Filters是什么。Sanitize Filters是一组用于过滤和清理用户输入数据的PHP函数,可以帮助开发
发表于:2023-12-30 浏览:285 TAG:
【PHP】如何在ThinkPHP6中使用MongoDB进行数据存储
随着互联网的不断发展,数据的存储和处理越来越成为一个重要的方向。而mongodb则是一种适用于大规模数据和高性能应用场景的nosql数据库,它的高性能和可扩展性得到了众多开发者的拥护。在这篇文章中,我们将介绍如何在thinkphp6中使用mongodb进行数据存储。一、安装MongoDB拓展首先,我们需要在服务器上安装MongoDB拓展,以便我们在ThinkPHP6中使用MongoDB进行数据存储。在这里,我以Windows系统为例,讲解MongoDB的安装方法。1.下载MongoDB拓展我们可
发表于:2024-05-28 浏览:316 TAG:
【PHP】php判断字符串是否是中文
可以判断。判断方法:1、使用preg_match()函数配合正则来判断是否全是中文 ,语法“!preg_match(&quot;/[^\x80-\xff]/i&quot;,$str)”;2、使用preg_match()函数配合正则来判断是否包含中文 ,语法“preg_match(&quot;/[\x7f-\xff]/&quot;, $str)”或“preg_match(&#39;/[^\x00-\x80]/&#39;,$str)”。本教程操作环境:windows7系统、PHP8.1版、
发表于:2023-12-13 浏览:321 TAG:
【PHP】php如何创建关联数组表格
随着互联网技术的不断发展,Web 应用程序的开发变得越来越重要。其中,关联数组表格是 Web 应用程序中常用的一种数据结构,它可以将数据按照列与行的方式分组存储,并且可以方便地在前端界面中进行展示。那么,如何使用 PHP 创建关联数组表格呢?本文将为您一一介绍。一、创建关联数组在 PHP 中,我们可以使用关联数组来存储数据,关联数组是以字符串为索引的数组。相较于索引数组(使用数字作为索引的数组),关联数组更加灵活,可以通过索引来直接访问每个元素。下面的示例代码创建了一个关联数组,包含了
发表于:2023-12-18 浏览:331 TAG:
【PHP】 php 打包zip文件
实现方法一:使用ZipArchive类//&nbsp;创建一个ZipArchive对象 $zip&nbsp;=&nbsp;new&nbsp;ZipArchive(); &nbsp; //&nbsp;新建一个zip文件 $zipName&nbsp;=&nbsp;&#39;archive.zip&#39;; if&nbsp;($zip-&gt;open($zipName,&nbsp;ZipArchive::CREATE&nbsp;|&nbsp;ZipArchive::OVERWRITE)&nbsp;
发表于:2024-01-27 浏览:331 TAG:
【PHP】PHP8如何创建可扩展的应用程序
深入掌握PHP8底层开发原理与新特性:如何创建可扩展的应用程序导语随着互联网技术的发展,PHP成为最受欢迎的Web开发语言之一。PHP语言的最新版本PHP8在底层开发原理和新特性方面做了很多改进和优化,使得开发者可以更好地创建可扩展的应用程序。本文将带您深入探索PHP8的底层开发原理和新特性,并给出代码示例来帮助您更好地理解。一、PHP8底层开发原理的改进JIT编译器的引入PHP8引入了JIT(Just-In-Time)编译器,通过将PHP代码转换成本地机器码,使得PHP代码的执行速度得到了显著
发表于:2024-01-07 浏览:312 TAG:
【PHP】php会出现哪些漏洞呢
会出现的漏洞有跨站脚本攻击、sql注入、文件包含漏洞、代码注入漏洞、文件上传漏洞、会话劫持、不安全的文件权限等等。详细介绍:1、跨站脚本攻击,xss漏洞通常是由于未正确过滤用户输入导致的,为了防止xss漏洞,开发人员应该对用户输入进行严格的过滤和转义,确保用户输入不会被当作脚本执行;2、sql注入,通常是由于未正确过滤用户输入或者使用不安全的sql查询语句导致的等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP作为一种广泛使用的服务器端脚本语言,被广泛
发表于:2024-03-17 浏览:338 TAG:
【PHP】Composer创建包,设置命名空间
在Composer创建的库中,给文件命名空间应遵循PSR-4自动加载标准。以下是简要步骤和示例:在库的根目录下创建一个名为 src 的目录,用于存放源代码。在 src 目录下创建你的库的 PHP 文件,并在文件顶部声明命名空间。在库的 composer.json 文件中指定自动加载配置。使用Composer的 dump-autoload 命令更新自动加载器。示例:假设你的库名为 example-library,你想要创建一个名为 ExampleClass 的类。步骤 1: 在 src 目录下创建
发表于:2024-08-28 浏览:371 TAG: #php #composer
【PHP】哪些函数会影响php探针
影响php探针的函数有ini_set()、error_reporting()、set_time_limit()、memory_limit()、exec()、eval()、disable_functions等等。详细介绍:1、ini_set()函数,用于动态地设置PHP的配置选项,可以在运行时修改php.ini文件中的配置;2、error_reporting()函数等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP探针是一种用于检测和分析服务器
发表于:2023-12-06 浏览:399 TAG: