锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 专题栏目
  3. Nginx专题
  4. Nginx 反向代理和负载均衡

Nginx 反向代理和负载均衡

0
  • Nginx专题
  • 发布于 2024-08-19
  • 9 次阅读
黄健
黄健

❤之前粗略的学习了一下nginx,也能够简单的进行使用,但时间长了难免就会出现遗忘,遇到命令啥的有时候还得去网上搜,索性就自己整理了一份,以后看起来也比较方便。有什么不对的地方还请大家多多指正。

目录

一、nginx 简介

1、nginx 概述

2、正向代理

3、反向代理

4、负载均衡

5、动静分离

二、nginx 安装

在 linux 系统中进行安装

三、nginx 常用的命令和配置文件

1、nginx 启动、关闭、重新加载命令

2、介绍 nginx 的配置文件

四、nginx 配置实例-反向代理

1、反向代理实例一

2、反向代理实例二

五、nginx 配置实例-负载均衡

六、nginx 配置实例-动静分离 ​编辑

七、nginx 高可用集群(主从模式)

❤在正式学习nginx之前,我们先来看一下nginx百度百科,大致了解一下什么是nginx:

❤**为什么会出现nginx,它的出现又能给我们的开发带来怎样的好处,**这是我们比较关心的:

(1)对于一个刚刚上线的小项目,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。

(2)慢慢地,如果说使用平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。

​

(3)这个时候我们考虑横向扩展,也就是增加服务器。这时候项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器,通过代理服务器来帮我们转发和处理请求。

❤这里的代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。所以我们使用Nginx。

一、nginx 简介

1、nginx 概述

❤Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,它占有内存少,并发能力强,而且它的并发能力在同类型的网页服务器中表现较好。

❤此外,Nginx 安装简单、配置文件简洁、Bug非常少。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。

❤Nginx完全用C语言编写。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

❤Nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。

2、正向代理

正向代理是代理客户端,可以代理隐藏真实的客户端。

我们可以粗暴的理解为翻墙业务,通过一个代理服务器实现上网。此时对外暴露的是代理客户端的地址,隐藏了真实客户端 IP 地址。

3、反向代理

反向代理是代理服务器,反向代理隐藏真实服务端。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。

4、负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。

内置策略:轮询,加权轮询,IPHash

**轮询:**每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题(服务器挂了数据就都没了,建议使用redis实现session共享)。

5、动静分离

在开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。为了加快网站的解析速度,可以把动态页面和静态页面交由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

二、nginx 安装

在 linux 系统中进行安装

(1)去官网下载源码进行编译,并安装编译环境gcc,如果没有 gcc 环境,则需要安装:

yum install gcc-c++

(2) 手动下载安装包:下载地址

(3)下载完毕上传到服务器上并解压安装启动:

# 解压安装包
tar -zxvf nginx-1.22.1.tar.gz
cd nginx-1.22.1
# 使用默认配置,在nginx根目录下执行
./configure
make
make install
# 查看nginx安装目录
whereis nginx 

三、nginx 常用的命令和配置文件

1、nginx 启动、关闭、重新加载命令

# 进入安装目录
cd /usr/local/nginx/sbin/
# 启动
./nginx
# 停止  
./nginx -s stop 
# 安全退出
./nginx -s quit  
# 重新加载配置文件
./nginx -s reload  
# 查看nginx进程
ps aux|grep nginx 

2、介绍 nginx 的配置文件

nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件 nginx.conf 也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改。

我们可以将 nginx.conf 配置文件分为三部分:全局块、events 块、http 块

(1)全局快

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令。

如图,这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

(2)events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接。

如图,表示每个 work process 支持的最大连接数为 1024.

这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

(3)http块

这一部分是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。 其中http 块又包括 http 全局块、server 块。

①、http 全局块

http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

②、server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

1、全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。

2、location 块

一个 server 块可以配置多个 location 块。

四、nginx 配置实例-反向代理

1、反向代理实例一

(1)实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080

(2)实现代码:

1)启动一个 tomcat,浏览器地址栏输入 127.0.0.1:8080

注意:这里需要对外开放8080端口。

# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
 
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

2) 通过修改本地 host 文件,将 www.123.com 映射到 127.0.0.1

这时候我们可以通过**www.123.com:8080**访问到 Tomcat 初始界面。

3) 在 nginx.conf 配置文件中增加如下配置:

如上配置,我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故 访问该域名时会跳转到 127.0.0.1:8080 路径上。在浏览器端输入 www.123.com 结果如下:

2、反向代理实例二

(1)实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中

1)nginx 监听端口为 9001

2)访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081

3)访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082

(2)实现代码:

1)准备两个 tomcat,一个 8001 端口,一个 8002 端口,对外开放8001和8002端口。

2)创建文件夹和测试页面:

在Tomcat8081安装目录中找到webapps,在里面创建edu文件夹。在edu文件夹中创建一个HTML页面用来区分。

在Tomcat8082安装目录中找到webapps,在里面创建vod文件夹。在vod文件夹中创建一个HTML页面用来区分。

3)修改 nginx 的配置文件 在 http 块中添加 server{}

五、nginx 配置实例-负载均衡

1、实现效果:输入地址http://192.168.17.129/edu/a.html,负载均衡效果,平均到8081和8082端口中。

2、实现代码:

(1)准备两个同时启动的 Tomcat

(2)在两台Tomcat里面的webapps目录中,创建名为edu 的文件夹,在edu文件夹中创建页面 a.html,用于测试。

(3)在 nginx.conf 中进行配置

3、weight策略(权重)

weight权重默认为 1,权重越高被分配的客户端越多。

指定轮询机率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:

​​​

六、nginx 配置实例-动静分离

1、准备工作:

1)在根目录下创建一个data文件夹,在打他文件夹中创建www和image文件夹用来存放资源。

2)在www中放一个HTML页面,在image中放一张图片

2、具体配置:

1)找到 nginx 安装目录,打开/conf/nginx.conf 配置文件

2)测试:

在浏览器中输入http:192.168.17.129/image/01.jpg,可以发现将文件列表列出来了,这是因为我们在nginx配置文件中的location中配置了 autoindex on

在浏览器中输入http:192.168.17.129/www/a.html,成功访问:

七、nginx 高可用集群(主从模式)

(1)准备工作:

1)准备两台服务器 192.168.17.129和192.168.17.131

2)在两台服务器上都安装nginx和keepalived

# 安装pcre
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
# 安装 openssl、zlib
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
# 安装nginx(略)
.....
# 安装keepalived
yum install keepalived -y
# 查看keepalived是否安装成功
rpm -q -a keepalived
# keepalived安装目录(存在keepalived.conf文件)
cd /etc/keepalived 

(2)主服务器具体配置:keepalived.conf文件配置如下

# 全局定义
global_defs {
 notification_email {
 acassen@firewall.loc
 failover@firewall.loc
 sysadmin@firewall.loc
 }
 notification_email_from Alexandre.Cassen@firewall.loc
 smtp_server 192.168.17.129
 smtp_connect_timeout 30
 router_id LVS_DEVEL  # 唯一值(也可以写成我们的IP值)

}

vrrp_script chk_http_port {

 script "/usr/local/src/nginx_check.sh"

 interval 2 #(检测脚本执行的间隔)

 weight 2

}

vrrp_instance VI_1 {
 state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
 interface ens33 # 网卡
 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 192.168.17.50 # VRRP H 虚拟地址
 }
} 

在/usr/local/src/下创建nginx_check.sh文件,文件内容如下:用来检测nginx是否存活。

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
 /usr/local/nginx/sbin/nginx  # nginx的启动路径
 sleep 2
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
 killall keepalived
 fi
fi

(3)从服务器具体配置:keepalived.conf文件需要修改的地方

在/usr/local/src/下创建nginx_check.sh文件,文件与主服务器中内容相同

(4)把两台服务器上的nginx和keepalived启动

# 启动keepalived
cd /usr/local/nginx/sbin/
./nginx -s stop
systemctl start keepalived.service
ps -ef | grep keepalived.service

# 启动 nginx
systemctl start nginx
# 加入开机自启动
systemctl enable nginx 

(5)测试

1)在浏览器地址栏中输入虚拟IP地址 192.168.17.50,可以发现能够正常访问。此时访问的是主服务器。

2)此时我们关闭主服务器中的nginx,在浏览器地址栏中输入虚拟IP地址 192.168.17.50,可以发现也是能够正常访问。此时访问的是 备份服务器。

原文链接: https://blog.csdn.net/friggly/article/details/127420160

标签: #nginx 9 #软件开发 1171
相关文章

Nginx部署前端Vue项目 2024-09-26 17:57

在使用Nginx部署前端Vue项目时,我们主要关注的是如何高效地将静态资源(HTML、CSS、JavaScript、图片等)提供给客户端浏览器。Vue.js是一个流行的JavaScript框架,用于构建用户界面,而Nginx作为一个高性能的HTTP和反向代理服务器,非常适合用于静态资源的托管。以下将

Nginx+Tomcat负载均衡、反向代理 2024-09-28 15:11

目录 一、代理 1.概述 二、Nginx反向代理 1.七层反向代理 - 动静分离

Centos下安装nginx步骤解析 2024-08-19 16:06

最近研究LNMP,首先要在linux下配置nginx服务器,话不多说,上步骤 1、编译环境gcc g++ 开发库之类的需要提前装好   yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 2、首先安装PC

Nginx 反向代理和负载均衡 2024-08-19 14:21

❤之前粗略的学习了一下nginx,也能够简单的进行使用,但时间长了难免就会出现遗忘,遇到命令啥的有时候还得去网上搜,索性就自己整理了一份,以后看起来也比较方便。有什么不对的地方还请大家多多指正。 目录 一、nginx 简介 1、nginx 概述 2、正向代理 3、反向代理 4、负载均衡<

nginx: [emerg] getpwnam(“nginx“) failed in /etc/nginx/nginx.conf:1 2024-08-13 17:01

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net 在 Nginx 配置文件(/etc/nginx/nginx.conf)中出现错误信息 “ngin

隐藏nginx响应头中的server信息(HTTP服务器版本信息泄漏) 2024-08-13 13:40

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net 安全审计中有时会有 漏洞名称 HTTP 服务器版本信息泄漏 漏洞描述 目标服务器

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.