nginx(engine x) 是一个 高性能 的 HTTP 和 反向代理 服务器、邮件代理服务器以及通用的 TCP/UDP 代理服务器。其特点为轻量级(占用系统资源少)、稳定性好、可扩展性(模块化结构)、并发能力强、配置简单等。 本文主要介绍在测试环境中通过 nginx 实现基本的 负载均衡 功能。 nginx 可以提供 HTTP 服务,包括处理静态文件,支持 SSL 和 TLS SNI、GZIP 网页压缩、虚拟主机、URL 重写等功能,可以搭配 FastCGI、uwsgi 等程序处理动态请求。 此外,nginx 还可以用于代理、反向代理、负载均衡、缓存等服务器功能,在集群环境中改善网络负载、提高可用性。 一、搭建测试环境 这里的测试环境为通过VirtualBox 安装的两台Lubuntu 19.04 虚拟机,Linux 系统安装方法不作赘述。 为了保证两台 Linux 虚拟机之间的相互访问,虚拟机的网络配置除了默认的 NAT 方式外,还使用了 VirtualBox 软件提供的内部网络(Internal) 联网方式。 此外,还需要将两台虚拟机中与“内部网络”相关联的网卡,绑定上 同一网段 的静态 IP 地址,则两台主机形成局域网络,相互之间可以直接访问。 网络配置 打开 VirtualBox 软件,分别进入两台虚拟机的设置界面,为其添加 连接方式为内部网络 的网络连接,截图如下(两台虚拟机作同样的配置): 内部网络 登录进虚拟机系统,使用 ip addr 命令查看当前的网络连接信息: $ ip addr ... 2: enp0s3: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:38:65:a8 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3 valid_lft 86390sec preferred_lft 86390sec inet6 fe80::9a49:54d3:2ea6:1b50/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: enp0s8: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:0d:0b:de brd ff:ff:ff:ff:ff:ff inet6 fe80::2329:85bd:937e:c484/64 scope link noprefixroute valid_lft forever preferred_lft forever 可以看到,此时的 enp0s8 网卡还没有绑定 IPv4 地址,需要为其手动指定静态 IP。 需要 注意 的是,从 Ubuntu 17.10 版本开始,一个新的名为 netplan 的工具被引入,原来的网络配置文件/etc/network/interfaces不再生效。 所以为网卡设置静态 IP 时需要修改 /etc/netplan/01-network-manager-all.yaml 配置文件,示例如下: network: version: 2 renderer: NetworkManager ethernets: enp0s8: dhcp4: no dhcp6: no addresses: [192.168.1.101/24] # gateway4: 192.168.1.101 # nameservers: # addresses: [192.168.1.101, 8.8.8.8] 由于两台主机处于同一子网,网关和 DNS 服务器未配置的情况下仍可以互相访问。对应的配置项暂时先注释掉(后续可以尝试自行搭建 DNS 服务器)。 编辑完成后运行sudo netplan apply命令,前面配置的静态 IP 即可生效。 $ ip addr ... 3: enp0s8: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:0d:0b:de brd ff:ff:ff:ff:ff:ff inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe0d:bde/64 scope link valid_lft forever preferred_lft forever 登录进另一台虚拟机中,执行同样的操作(注意配置文件中的 addresses 项改为 [192.168.1.102/24] )。两台虚拟机的网络即配置完成。 此时有 Linux 虚拟机 server1,IP 地址为 192.168.1.101;Linux 虚拟机 server2,IP 地址为 192.168.1.102。两台主机可相互访问。测试如下: starky@server1:~$ ping 192.168.1.102 -c 2 PING 192.168.1.102 (192.168.1.102) 56(84) bytes of data. 64 bytes from 192.168.1.102: icmp_seq=1 ttl=64 time=0.951 ms 64 bytes from 192.168.1.102: icmp_seq=2 ttl=64 time=0.330 ms --- 192.168.1.102 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 2ms rtt min/avg/max/mdev = 0.330/0.640/0.951/0.311 ms skitar@server2:~$ ping 192.168.1.101 -c 2 PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data. 64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.223 ms 64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.249 ms --- 192.168.1.101 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 29ms rtt min/avg/max/mdev = 0.223/0.236/0.249/0.013 ms 二、安装 nginx 服务器 nginx 的安装方式主要有两种:
本示例并没有特殊的需求,所以直接选择第一种安装方式。命令如下: $ sudo apt-get update $ sudo apt-get install nginx 安装成功后,通过systemctl status nginx命令查看 nginx 服务的运行状态: $ systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en Active: active (running) since Tue 2019-07-02 01:22:07 CST; 26s ago Docs: man:nginx(8) Main PID: 3748 (nginx) Tasks: 2 (limit: 1092) Memory: 4.9M CGroup: /system.slice/nginx.service ├─3748 nginx: master process /usr/sbin/nginx -g daemon on; master_pro └─3749 nginx: worker process 通过curl -I 127.0.0.1命令验证 Web 服务器是否可以正常访问: $ curl -I 127.0.0.1 HTTP/1.1 200 OK Server: nginx/1.15.9 (Ubuntu) ... 三、负载均衡配置 负载均衡(load-balancing)即按照一定的规则将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度。 简单的示例图如下: load-balancing 如某网站应用部署在多台主机构成的服务器集群上,负载均衡服务器位于终端用户和服务器集群之间,负责接收终端用户的访问流量,并根据一定的规则将用户访问 分发 给后端的服务器主机,从而提高在高并发状态下的响应速度。 负载均衡服务器 nginx 可以通过 upstream 选项配置负载均衡。这里使用虚拟机 server1 作为负载均衡服务器。 修改 serve1 上默认站点的配置文件( sudo vim /etc/nginx/sites-available/default ),改为如下内容: upstream backend { server 192.168.1.102:8000; server 192.168.1.102; } server { listen 80; location / { proxy_pass http://backend; } } 基于测试的目的,当前只有两台虚拟机。server1(192.168.1.101)已经作为负载均衡服务器,所以使用 server2(192.168.1.102)作为应用服务器。 这里借助 nginx 的虚拟主机功能,分别将 192.168.1.102 和 192.168.1.102:8000 “模拟”为两台不同的应用服务器。 应用服务器 修改 server2 上默认站点的配置文件( sudo vim /etc/nginx/sites-available/default ),改为如下内容: server { listen 80; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name 192.168.1.102; location / { try_files $uri $uri/ =404; } } 在 /var/www/html 目录下创建 index.html 文件,作为 default 站点的 index 页面,内容如下: <html> <head> <title>Index Page From Server1</title> </head> <body> <h1>This is Server1, Address 192.168.1.102.</h1> </body> </html> 运行 [code]sudo systemctl restart nginx [/code]命令重启 nginx 服务,此时访问http://192.168.1.102 即可获取刚刚创建的 index.html 页面: $ curl 192.168.1.102 <html> <head> <title>Index Page From Server1</title> </head> <body> <h1>This is Server1, Address 192.168.1.102.</h1> </body> </html> 配置“另一台主机”上的站点,在 server2 上创建 [code]/etc/nginx/sites-available/server2 [/code]配置文件,内容如下: server { listen 8000; root /var/www/html; index index2.html index.htm index.nginx-debian.html; server_name 192.168.1.102; location / { try_files $uri $uri/ =404; } } 注意监听端口和 index 页面的配置变化。在 /var/www/html 目录下创建 index2.html 文件,作为 server2 站点的 index 页面,内容如下: <html> <head> <title>Index Page From Server2</title> </head> <body> <h1>This is Server2, Address 192.168.1.102:8000.</h1> </body> </html> PS:为了测试目的,default 站点和 server2 站点配置在同一个主机 server2 上,且页面稍有不同。实际环境中通常将这两个站点配置在不同的主机上,且内容一致。 运行sudo ln -s /etc/nginx/sites-available/server2 /etc/nginx/sites-enabled/命令启用刚刚创建的 server2 站点。 重启 nginx 服务,此时访问 http://192.168.1.102:8000 即可获取刚刚创建的 index2.html 页面: $ curl 192.168.1.102:8000 <html> <head> <title>Index Page From Server2</title> </head> <body> <h1>This is Server2, Address 192.168.1.102:8000.</h1> </body> </html> 负载均衡测试 回到负载均衡服务器即虚拟机 server1 上,其配置文件中设置的 反向代理 URL 为 http://backend 。 由于未曾配置域名解析服务,无法将 URLhttp://backend 定位到正确的位置。 可以修改 server1 上的 /etc/hosts 文件,添加如下一条记录: 127.0.0.1 backend 即可将该域名解析到本地 IP ,完成对负载均衡服务器的访问。 重启 nginx 服务,在 server1 上访问http://backend ,效果如下: $ curl http://backend <html> <head> <title>Index Page From Server1</title> </head> <body> <h1>This is Server1, Address 192.168.1.102.</h1> </body> </html> $ curl http://backend <html> <head> <title>Index Page From Server2</title> </head> <body> <h1>This is Server2, Address 192.168.1.102:8000.</h1> </body> </html> $ curl http://backend <html> <head> <title>Index Page From Server1</title> </head> <body> <h1>This is Server1, Address 192.168.1.102.</h1> </body> </html> $ curl http://backend <html> <head> <title>Index Page From Server2</title> </head> <body> <h1>This is Server2, Address 192.168.1.102:8000.</h1> </body> </html> 从输出中可以看出,server1 对负载均衡服务器http://backend 的访问,完成了对应用服务器 server2 上两个 Web 站点的 轮询 ,起到负载均衡的作用。 四、负载均衡方法 nginx 开源版本提供四种负载均衡的实现方式,简单介绍如下。 1. Round Robin 用户请求 均匀 地分配给后端服务器集群(可以通过 weight 选项设置轮询的 权重 ),这是 nginx 默认使用的负载均衡方式: upstream backend { server backend1.example.com weight=5; server backend2.example.com; } 2. Least Connections 用户请求会优先转发给集群中当前活跃连接数最少的服务器。同样支持 weight 选项。 upstream backend { least_conn; server backend1.example.com; server backend2.example.com; } 3. IP Hash 用户请求会根据 客户端 IP 地址 进行转发。即该方式意图保证某个特定的客户端最终会访问 同一个 服务器主机。 upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; } 4. Generic Hash 用户请求会根据一个 自定义键值 确定最终转发的目的地,该键值可以是字符串、变量或者组合(如源 IP 和端口号)。 upstream backend { hash $request_uri consistent; server backend1.example.com; server backend2.example.com; } 权重 参考下面的示例配置: upstream backend { server backend1.example.com weight=5; server backend2.example.com; server 192.0.0.1 backup; } 默认权重(weight)为 1 。 backup 服务器 只有在所有其他服务器全部宕机的情况下才会接收请求。 如上面的示例,每 6 个请求会有 5 个转发给[code] backend1.example.com[/code],1 个转发给 backend2.example.com。只有当 backend1 和 backend2 全部宕机时,192.0.0.1 才会接收并处理请求。 |
免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!
始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!
扫一扫,关注站长网微信
当我们在共享网络访问的时候,可能会遇到提示指定的网络名不再可用的问题,这可能是由于我们的共享网络出现了错误,也可能是被共享的对象所拒绝了。指定的网络名 ......
文/曹杨 原标题:谁还看电视? 爸爸戴一副老花镜,妈妈戴一副近视镜,一人坐在沙发,一人躺在床上,各自刷着自己关注的博主更新的短视频。电视也许开着,但只是背景。 这样的画面,几乎成了洛奇家的常 ...
图片来源于简书 文/郭开森 杨帆 陆玖财经准备开新栏目了,每周一创始人郭开森和杨帆合体郭德帆,对行业进行一些观察和评论,第一篇我们仍是打算写社区团购,这是当下最火的话题。 来过陆玖财经做客的朋友们...
一、软件冲突1、首先确认是否是应用程序冲突导致的。2、查看是否只有特定几个游戏或应用会导致该问题。3、如果是应用冲突,那么只要卸载这些app就可以解决了。二 ......
1、首先进入到“百度”软件中, 2、然后在其中输入“百度识图”, 3、之后点击图中的“开始使用”按钮, 4、紧接着点击右下角的“相册”功能, 5、在相册下 ......
电脑端:1、大家可以点击右边链接进入网页版的百度网盘,进入之后点击“去登录”。https://pan.baidu.com/2、之后正确的输入账号密码进行登录就好啦。手机端:1 ......
在填写一些项目申请书中,总是免不了要选择一些数字,但是在方框中如何插入数字,该怎么办呢?那么下面就由学习啦小编给大家分享下word在方框里输入数字的技巧, ......
8月15日消息 上周,有媒体报道前身为百度图片的“榴莲”APP含有大量不雅视频内容被用户举报。对此,百度图片官方进行了回应,百度图片表示已经对报道中所涉及的“生吃旋风哥”等争议内容进行了下线处理。 此外,百度...
一、N100对比intel i3 1、N100的跑分达到了147210分,这个数据可以达到i3的七代级别。 2、在跑分上也是超越了大部分的I3七代CPU,不过比I3八代要弱势一些。 3 ......
WPS Office手机版怎么加横线?很多用户还不知道WPS Office手机版怎么加横线,WPS Office手机版怎么加横线,WPS Office手机版怎么打横线,WPS Office手机版怎么弄 ......
迅雷前缀是什么 答:迅雷前缀是(magnet:?xt=urn:btih:)括号里的就是了。 我们只要在这段文字之后输入后续的内容,就可以创建下载链接了。 1、磁力链接不基于文 ......
一、内容特权。 1、半价点播。 许多站内视频都需要付费观看,而大会员用户可以直接半价享受; 购买成功后的48h内无限次观看。有部分的内容是只限在中国大陆内观 ......
1、首先打开小米运动的“实验室功能”。 2、接着点击“门卡模拟”。 3、然后点击“我知道了”。 4、最后贴近就可以刷卡成功了。...
答:华为P系列: 华为p40,华为p40plus,华为p50,华为p50e,华为p60 华为mate系列: 华为mate40,华为mate50,华为mate50e,华为mate60 华为nova系列: 华为n ......
近期有用户反映,电脑在更新Windows 11 Insider Preview 25252.1000后,出现了应用和已压缩的文件点击毫无反应,拖拽都不行,只能从开始菜单打开的情况,这是怎 ......
文/黎明 一场针对中国互联网巨头的反垄断风暴正在酝酿,而且这次动真格了。 11月10日,国家市场监管总局发布《关于平台经济领域的反垄断指南(征求意见稿)》,要加大对互联网巨头涉嫌垄断的调查和监管。 ...
答:骁龙8+更好。 骁龙7+gen2实际上就是骁龙8+的低配版本。 在一些其他的核心架构方面都是保持一致的,比如说CPU的架构、GPU的架构等等。 骁龙7+和骁龙8+具体 ......
可见单元格就是不包括隐藏或者筛选筛选后隐藏起来的单元格区域。方法:筛选或隐藏数据,复制需要粘贴的值,在目标单元格区域左上角的第一个单元格处右击,选择【 ......
win11系统如何释放掉系统默认保留的存储空间?一般情况下,Windows会保留一些存储空间,以便设备获得良好性能和成功更新。但是当出现系统盘储存空间不足时,我们会将几个G的保留空间释放出来,以解燃眉之急。本期教...
文件被win10系统误报病毒自动删除了如何进行恢复?有用户下载了某些破解软件却被Win10系统误认为是病毒文件而自动删除,当然系统自带杀毒软件其实挺不错的,就是有时候会误报,大家遇到这种情况的时候就希望把误删的...
win11系统快速跳过联网创建本地管理账户3种方法?现在市面上销售的品牌笔记本和台式机基本上都预装Windows11家庭中文版正版操作系统,联网后系统会自动激活。当用户拿到新机器后还需要按照cortana(小娜)的提示一步...
罗技g304dpi灯颜色代表什么:1、蓝色:这种情况是正常工作的显示,如果说是常亮或者闪烁,那都没有问题这是在正常工作呢。2、红色:如果说是红灯闪烁的话那就是 ......
答:在3DMark压力测试当中,显卡需要超高97%才能够算合格,证明显卡的稳定性是过关的。 1、一般的默认情况下在2500~3000分就算很正常的了。 2、分数越高说明显卡 ......
相信有非常多使用过笔记本的用户都听说过独显直连这个词,但很多用户并不了解独显直连是什么,又有什么用处,那么下面就和小编一起来看看什么是独显直连和开启这 ......
win11系统开机总是自动登录OneDrive如何关闭?win11系统开机的时候,会自动启动OneDrive,不想要启动,该怎么操作呢?下面我们就来看看详细的教程。 在OneDrive界面点小齿轮按钮,下拉菜单中点【设置】。 单击【...
背景 有时候我们需要获取文件的创建时间。 例如: 我在研究 《xtrabackup 原理图》的时候,想通过观察确认 xtrabackup_log 是最早创建 并且是 最晚保存的 ......
假设有 A、 B 两台 Linux 服务器,我们希望能够从其中一台服务器通过 SSH 免密码登录到另一台服务器。 两台服务器的信息如下:  ......
答:性能上差不多是和天玑9000以及骁龙8+处于差不多的水平。 也可以看成是骁龙8+的降配版本 骁龙7+处理器介绍 1、高通称这款芯片为“骁龙史上最强 7 系平台” ......
1、先打开机顶盒进入主界面,并且使用遥控器打开设置。 2、然后选择“账号与安全”,并且进入。 3、最后往下面翻就可以看到“ADB调试”的选项,直接开启就行了 ......