编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡

这篇具有很好参考价值的文章主要介绍了编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Ubuntu中安装Nginx

概念介绍

负载均衡

几种负载均衡算法

反向代理

环境规划

配置反向代理

加权负载均衡(Weighted Load Balancing)

轮询(Round Robin)

IP 哈希(IP Hash)

最少连接(Least Connections)

URL 哈希(URL Hash)


想要安装nginx,首先我们需要有一台Ubuntu的虚拟机,然后最好在没有安装前做一个快照,防止出错可以快速恢复到没有安装前的状态

Ubuntu中安装Nginx

(1)安装依赖库

sudo apt install libgd-dev

(2)下载nginx的源码包

wget http://nginx.org/download/nginx-1.22.1.tar.gz

(3)解压该压缩包

tar -zvxf nginx-1.22.1.tar.gz

(4)进入到解压完成的nginx目录中,进行编译安装

cd nginx-1.22.1

(5)编译并指定安装位置,执行安装之后会创建指定文件夹/www/nginx

但是这编译却有很多的文件找不到,并且报错说没有prce库,PCRE库支持正则表达式。如果我们在配置文件nginx.conf中使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块需要靠它来解析正则表达式。

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

可以使用下载libpcre3和libpcre3-dev的方法来解决:

sudo apt update
sudo apt install libpcre3 libpcre3-dev

(6)编译完成后进行安装

make && make install

安装完成后,移动到/www/nginx目录下就可以看到几个文件了

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

conf/ - 这个目录包含Nginx的配置文件,用于配置服务器的行为,包括虚拟主机配置、代理设置等。

html/ - 这个目录通常包含Nginx服务器的网页文件,也就是网站的内容文件,比如HTML、CSS、JavaScript文件等。

logs/ - 这个目录包含Nginx服务器的日志文件,记录了服务器的活动、访问日志、错误日志等。

sbin/ - 这个目录包含Nginx服务器的可执行文件,是服务器的主要执行文件,用于启动、停止、重载服务器等操作。

(7)使用

启动Nginx:

sbin/nginx

除了启动还有一些常用的命令:

nginx -s reload	修改配置后重新加载生效
nginx -s stop	快速停止nginx
nginx -s start	启动nginx
nginx -s quit	完整有序的停止nginx
nginx -v	查看nginx的版本
nginx -V	查看版本和nginx的配置选项
nginx -t -c /path/to/nginx.conf	测试nginx配置文件是否正确
nginx -s reopen	重新打开日志文件

启动完成后可以在浏览器中输入Ubuntu机器的ipd地址,检查是否成功运行:
编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

可以看到是正常运行的 

概念介绍

因为需要配置反向代理实现负载均衡,这里需要先知道一下反向代理和负载均衡分别都是什么

负载均衡

当一个网站需要多台服务器时,通常会部署负载均衡器,因为请求量太大,单台服务器无法进行高效处理。部署多台服务器还有助于消除单点故障,从而提高网站的可靠性。

几种负载均衡算法

  • 1.轮询 每个请求按照时间顺序逐一分配到下游的服务节点,如果其中某一节点故障,nginx 会自动剔除故障系统使用户使用不受影响。

  • 2.加权负载均衡 在配置文件中对下游的服务节点指定权重值 weight, weight 值越大则被分配的评率越高,一般这种负载均衡,用于节点的配置情况不一样,有的可能配置高,有的配置低。

  • 3.ip hash 对每个请求,针对 ip 进行 hash, 然后分配到后台节点,这样一来,同一 ip 会被固定分配到下游固定服务上。它能够暂时的解决集群环境中容器之间 session 共享的问题(因为session每次只能和一个人,一对一的记录,但是如果现在需要负载均衡就出现了一种一对多的情况,可以使用ip_hash实现一对一),但是不是解决的根本之道,只是权宜之策,我们试想,如果访问的好好的,家里的路由器被重启了,或者运营商分配给你的 ip 地址改变了,那么你再次访问的时候,新的 ip 就可能被分配到新的服务上,之前的 session 也就失效了。

  • 4.least_conn (最少连接调度算法) 最少连接调度算法,对下游服务中连接情况,优先选择连接数最少的服务分配。

  • 5.url_hash按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

反向代理

反向代理接受来自客户端的请求,将其转发到可完成该请求的服务器,并将服务器的响应返回给客户端。

环境规划

了解了负载均衡和反向代理都是什么后那么现在开始来进行演示,这里需要使用反向代理实现负载均衡最少需要三台设备,这里我的计划是这样的:

centos1(192.168.159.200):作为web服务器

Ubuntu(192.168.159.202):作为负载均衡服务器2号

centos2(192.168.159.201):作为负载均衡服务器1号

画一张图来演示一下:
 编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

首先来测试一下两个服务器的nginx页面是否可以成功访问

centos2:

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

Ubuntu:

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

可以看到这里的两台设备都是可以正常访问的

配置反向代理

现在我们就可以在centos1上配置反向代理了

加权负载均衡(Weighted Load Balancing)

(1)首先进入到对应的安装nginx的目录的conf目录下:

cd /etc/nginx/

(2)编辑配置文件:

vim nginx.conf
upstream nginx_boot{
# 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2   
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 这里的IP请配置成你WEB服务所在的机器IP
}
server {
        listen  80;
        server_name 192.168.159.200;
        location / {
                root   html;        # 配置一下index的地址,最后加上index.ftl。        
                index  index.html index.htm index.jsp index.ftl;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 请求交给名为nginx_boot的upstream上        
                proxy_pass http://nginx_boot;

}
        location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
        root   /usr/local/nginx/html/static;
        expires 7d;}
}

(2)修改完成后一定要重新启动nginx服务

systemctl restart nginx.service 

(3)然后我们就可以在浏览器中再次访问192.168.159.200

第一次:

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

第二次:

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

可以从上面两次访问的结果看到,这里的反向代理已经实现了。我们第一次访问192.168.159.200(centos1)流量被转发到centos2(192.168.159.201)上,然后第二次访问流量被转发到了ubuntu(192.168.159.202)上,成功的实现了负载均衡。

这里是使用的权重的方式来实现的,上面的例子中,我将两台设备的权重均设置为100,所以,都是每次刷新都会换另外一个设备响应,在实际应用中是可以根据服务器的性能和流量大小来更加灵活的设置权重。

后面再来分别演示一下轮询算法和ip-hash算法的实现效果

轮询(Round Robin)

首先介绍一下轮询算法:每个请求按照时间顺序逐一分配到下游的服务节点,如果其中某一节点故障,nginx 会自动剔除故障系统使用户使用不受影响。

轮询算法的配置非常的简单,甚至比权重算法都简单,只需要在web服务器的nginx配置文件中将每个ip后的weight去掉即可

修改后的配置文件:

upstream nginx_boot{
# 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2   
server 192.168.159.201  max_fails=2 fail_timeout=30s;
server 192.168.159.202  max_fails=2 fail_timeout=30s;
# 这里的IP请配置成你WEB服务所在的机器IP
}
server {
        listen  80;
        server_name 192.168.159.200;
        location / {
                root   html;        # 配置一下index的地址,最后加上index.ftl。        
                index  index.html index.htm index.jsp index.ftl;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 请求交给名为nginx_boot的upstream上        
                proxy_pass http://nginx_boot;

}
        location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
        root   /usr/local/nginx/html/static;
        expires 7d;}
}

可以再次访问一下:

第一次:

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

第二次: 

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

可以看到还是两次访问,分被将流量分到了两个设备个一次,这也就是轮询,一人一次

IP 哈希(IP Hash)

对每个请求,针对 ip 进行 hash, 然后分配到后台节点,这样一来,同一 ip 会被固定分配到下游固定服务上。

比如说我现在就要每次都让访问centos1(192.168.159.200)的流量只分配到centos2(192.168.159.201)上,不去ubuntu,当然在本例中只有两台负载均衡设备,可以直接关闭一台达到同样的效果,但是实际应用中我想不会这么简单,这里还是修改nginx配置文件为:

upstream nginx_boot{
ip_hash;
# 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2   
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 这里的IP请配置成你WEB服务所在的机器IP
}
server {
        listen  80;
        server_name 192.168.159.200;
        location / {
                root   html;        # 配置一下index的地址,最后加上index.ftl。        
                index  index.html index.htm index.jsp index.ftl;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 请求交给名为nginx_boot的upstream上        
                proxy_pass http://nginx_boot;

}
        location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
        root   /usr/local/nginx/html/static;
        expires 7d;}
}

编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡,安全,中间件,ubuntu,nginx,负载均衡,web安全,网络安全,中间件

这样我们无论刷新页面多少次,响应的始终都是Ubuntu(192.168.159.202)这台设备响应

最少连接(Least Connections)

最少连接调度算法,对下游服务中连接情况,优先选择连接数最少的服务分配。使用最少连接策略可以避免出现某些服务器负载过重的情况。

最少连接的算法将配置文件修改为:

upstream nginx_boot{
least_conn;
# 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2   
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 这里的IP请配置成你WEB服务所在的机器IP
}
server {
        listen  80;
        server_name 192.168.159.200;
        location / {
                root   html;        # 配置一下index的地址,最后加上index.ftl。        
                index  index.html index.htm index.jsp index.ftl;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 请求交给名为nginx_boot的upstream上        
                proxy_pass http://nginx_boot;

}
        location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
        root   /usr/local/nginx/html/static;
        expires 7d;}
}

这样配置后根据least_conn 策略将会我们请求的分配到连接数最少的服务器上。但是这里我们只有三台设备无法演示连接最少的环境,就不演示了。

URL 哈希(URL Hash)

url_hash按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

该策略的配置如下:

upstream nginx_boot{
hash $request_uri;
# 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2   
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 这里的IP请配置成你WEB服务所在的机器IP
}
server {
        listen  80;
        server_name 192.168.159.200;
        location / {
                root   html;        # 配置一下index的地址,最后加上index.ftl。        
                index  index.html index.htm index.jsp index.ftl;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 请求交给名为nginx_boot的upstream上        
                proxy_pass http://nginx_boot;

}
        location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
        root   /usr/local/nginx/html/static;
        expires 7d;}
}

 在配置文件中hash指令将哈希算法设置为URL哈希,$request_uri表示使用请求的URL作为哈希值。因为需要安装相应的软件包和环境不满足,这里也就不再演示了

到此,Ubuntu下安装nginx和使用五种算法实现nginx反向代理负载均衡就完成了(^▽^)文章来源地址https://www.toymoban.com/news/detail-823820.html

到了这里,关于编译安装Nginx和使用五种算法实现Nginx反向代理负载均衡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【nginx实战】nginx正向代理、反向代理、由反向代理实现的负载均衡、故障转移详解

    本文将要讨论以下内容 正向代理与反向代理的基本概念 Nginx正向代理服务的配置指令、Nginx反向代理服务的配置指令 Nginx反向代理服务器的应用——负载均衡、故障转移 案例分析   正向代理的概念 局域网内的机器借助代理服务访问局域网外的网站,此代理服务器提供的服务

    2024年01月24日
    浏览(52)
  • 【Nginx三】——Nginx实现反向代理

    【Nginx一】——Nginx介绍(正向代理 反向代理 负载均衡 动静分离) 【Nginx二】——Nginx常用命令 配置文件 Nginx如何处理请求 本篇博客主要介绍Nginx如何实现反向代理,会进行介绍什么是反向代理,以及进行实例实现反向代理。 代理服务器来接收网络上请求,然后将请求转发

    2024年02月05日
    浏览(64)
  • nginx 离线安装 https反向代理

    1.1 安装gcc和gcc-c++ 1.1.1下载依赖包 gcc依赖下载镜像地址: 官网:https://gcc.gnu.org/releases.html 阿里云镜像站:http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ CentOS 镜像站点:https://vault.centos.org/7.5.1804/os/x86_64/Packages/ ​只需下载如下依赖即可: 1.1.2 上传依赖包 下载完成后,将依赖包上

    2024年02月02日
    浏览(68)
  • Nginx安装Windows、Linux | 正向代理、反向代理、负载均衡

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Nginx是一个高性能的HTTP和反向代理服务器,也可用作电子邮件代理服务器和通用TCP/UDP代理服务器。它是一个轻量级的Web服务器,可以作为静态资源服务器、负载均衡器和反向代理服务器使用。Nginx的优点包括高性能、低

    2024年02月09日
    浏览(54)
  • nginx配置例子-反向代理实现

    4.1 反向代理实现(实例1) 4.1.1需要实现的效果 (1)打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到liunx.系统tomat主页面中 4.1.2 准备工作 (1)在liunx, 系统安装 tomcat, 使用默认端口8080. tomcat安装文件放到 liunx系统中,解压。 (安装前,可以使用java -version 查 jdk 是否安装,

    2024年02月15日
    浏览(38)
  • Nginx(一)介绍Nginx、正向代理和实现反向代理的两个实例

    中国Nginx官网:https://www.nginx-cn.net/ GitHub地址:https://github.com/nginxinc/ 客户端想访问tomcat服务器,只需要访问ww.baidu.com。对真实的服务器IP是隐藏的 1、反向代理实例一(反向代理,访问www.123.com) 步骤一:修改主机映射“C:WindowsSystem32driversetchosts” 步骤二:修改Nginx中的配

    2024年02月08日
    浏览(48)
  • Nginx反向代理实现负载均衡webshell

    目录 本实验所用的环境: 问题一:由于nginx采用的反向代理是轮询的方式,所以上传文件必须在两台后端服务器的相同位置上传相同的文件 问题二:我们在执行命令时,无法知道下次的请求交给哪台机器去执行我们在执行hostname -i查看当前执行机器的IP时,可以看到IP地址一

    2024年02月04日
    浏览(46)
  • nginx反向代理及负载均衡的实现

    目录 1.nginx反向代理 2.nginx负载均衡 3.nginx反向代理及负载均衡实现 nginx反向代理 4台主机都需要的操作: 两台服务器操作: 两台主机服务器进行测试; nginx负载均衡配置 4.nginx配置其他参数 多虚拟机访问 后端服务器日志中需要记录客户端真实ip nginx设置不同的url访问不同页面

    2024年02月14日
    浏览(42)
  • kkviewfile 实现nginx反向代理+https

    3.1 如果访问出错,并且报错信息是下图 两种解决方案 第一用我打包好的jar,下载替换就行 代码是 2021年7月6日,v4.0.0 版本 下载地址:链接: https://pan.baidu.com/s/1yqJDa75tokAWQhn_tfCOmA?pwd=ribv 提取码: ribv 第二你自己在gitee拉取代码进行处理 如果拉取中报错 error: RPC failed; curl 18 tr

    2024年02月11日
    浏览(47)
  • 利用nginx/apache代理wss 实现 小程序 端口 反向代理

    除了用Workerman自身的SSL,也可以利用nginx/apache作为wss代理转发给workerman 我就是栽在这大坑里(nginx/apache代理wss,workerman部分就不要设置ssl,否则将无法连接,两个方法2选1)官方推荐用nginx/apache代理wss 如果是微信小程序,要添加合法域名 格式:wss://域名 结尾不要加/,可以:端

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包