-
在现代网络架构中,高性能、可扩展性和灵活性是构建成功 Web 应用程序的关键。Nginx(发音为"engine-x")是一款轻量级、高性能的 Web 服务器和反向代理服务器,以其卓越的性能和可靠性而备受推崇。因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
-
Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强
总结 Nginx 特性:
高性能、反向代理、负载均衡、静态文件服务、可扩展性
2、Nginx 的反向代理
介绍:Nginx 的反向代理是一种服务器架构模式,其中 Nginx 服务器接收客户端的请求,然后将这些请求转发给后端的一个或多个服务器。反向代理隐藏了后端服务器的细节,使得客户端只与 Nginx 服务器通信,而不直接与实际提供服务的后端服务器通信。以下是关于 Nginx 反向代理的详细介绍:
2.1、什么是反向代理?
正向代理 vs. 反向代理:
-
正向代理是客户端通过代理服务器访问其他服务器的方式,代理服务器充当客户端的角色。
-
反向代理是客户端通过访问代理服务器,代理服务器将请求转发给后端服务器,充当服务端的角色。
客户端与反向代理的通信:
-
客户端发送请求给反向代理,认为它就是实际提供服务的服务器。
Nginx 的反向代理特点:
-
性能优越: Nginx 以其高性能和低资源消耗而著称,使其成为反向代理的理想选择。
-
负载均衡: Nginx 支持多种负载均衡算法,能够将请求分发到多个后端服务器,提高整个系统的性能和可用性。
-
安全性: 隐藏了后端服务器的真实 IP 地址,增强了系统的安全性。
-
静态资源服务: Nginx 可以缓存静态资源,降低后端服务器的压力,提高访问速度。
2.2、配置反向代理
修改安装 nginx 后的文件中nginx.conf 文件
-
配置文件中的 location 块:
location / {
proxy_pass http://backend_server; #backend_server 是下面要讲的负载均衡写的,可以理解为变量吧(这个哩填的是后端服务器)
proxy_set_header Host $host; #设置HTTP请求头例如Host和X-Real-IP。
proxy_set_header X-Real-IP $remote_addr;
}
实际应用特点:
-
将请求分发到多个后端服务器,提高系统的吞吐量和可用性。
-
反向代理隐藏了后端服务器的真实 IP 地址,提高了安全性。
-
利用 Nginx 的缓存功能,提高响应速度。
-
加速静态资源的访问,减轻后端服务器压力。
总结: Nginx 的反向代理是一种强大的服务器架构模式,广泛应用于提高性能、负载均衡、安全性等方面。通过配置 Nginx 的反向代理,可以实现高效而灵活的请求处理,适用于各种 Web 应用场景。
3、Nginx 的负载均衡
3.1、什么是负载均衡?
-
负载均衡是一种将网络流量或工作负载分配到多个服务器或计算资源的技术,以提高系统的性能和可用性。其目的是为了均衡服务器的负载,防止某一台服务器过载而导致性能下降。提高整个系统的可用性和稳定性。
-
简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有 ABCD 等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。
3.2、Nginx 的负载均衡算法(简单阐述):
-
轮询法(Round Robin):
-
默认算法,按顺序将请求分发给每个后端服务器。
upstream backend_servers { #这个upstream就是上面提到的东西,用来定义了一组后端服务器。
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
location / {
proxy_pass http://backend_servers; #使用负载均衡
# 其他配置...
} -
-
IP 哈希(IP Hash):
-
使用客户端 IP 地址的哈希值来决定将请求发送到哪一台后端服务器。
upstream backend_servers {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
location / {
proxy_pass http://backend_servers;
# 其他配置...
} -
-
最小连接数(Least Connections):
-
将请求发送到当前连接数最少的后端服务器,确保负载更平均。
upstream backend_servers {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
location / {
proxy_pass http://backend_servers;
# 其他配置...
} -
-
权重轮询(Weighted Round Robin):
-
允许为每个后端服务器分配不同的权重,确保高性能服务器获得更多的请求。
upstream backend_servers {
server backend1.example.com weight=3;
server backend2.example.com;
server backend3.example.com;
}
location / {
proxy_pass http://backend_servers;
# 其他配置...
} -
-
哈希(Hash):
-
根据某个标识符的哈希值将请求分配给后端服务器,通常用于确保同一标识符的请求始终路由到相同的服务器。
upstream backend_servers {
hash $request_uri;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
location / {
proxy_pass http://backend_servers;
# 其他配置...
}
-
3.3、负载均衡的实际应用(优点):
-
分发 Web 应用请求,确保每个用户获得相对平均的响应时间。
-
将数据库查询请求分发到多个数据库服务器,减轻单个数据库的负担。
-
在云环境中,负载均衡用于分发云中的工作负载,提高系统的弹性和可用性。
-
使用负载均衡可以提高系统的高可用性,即使某一台服务器出现故障,其他服务器仍然可以继续提供服务。
-
Nginx 可以定期检查后端服务器的健康状况,如果某个服务器不可用,将停止将请求发送到该服务器,确保只有健康的服务器参与负载均衡。
Nginx 的负载均衡是一种强大的工具,可用于提高系统性能、可用性和扩展性。通过选择合适的负载均衡算法和配置,可以适应不同规模和需求的应用场景。负载均衡是构建高性能、可靠系统架构中不可或缺的一部分。
4、Nginx 的安装
Nginx 的安装可以通过包管理工具或源码编译两种方式进行。下面分别介绍这两种方式:
通过包管理工具安装(适用于 Linux 系统):
-
🍀 在 CentOs7 上安装 Nginx:
-
yum 安装 配置 nginx 源
# 执行如下命令
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 运行如下
[root@localhost ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
Retrieving http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
warning: /var/tmp/rpm-tmp.G6IXR0: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:nginx-release-centos-7-0.el7.ngx ################################# [100%]
# 出现如上所示,则配置成功,也可以在/etc/yum.repos.d/ 下看到多了一个nginx.repo文件
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Media.repo docker-ce.repo
CentOS-CR.repo CentOS-Sources.repo nginx.repo
CentOS-Debuginfo.repo CentOS-Vault.repo
CentOS-fasttrack.repo CentOS-x86_64-kernel.repo-
执行以下命令开始安装
yum install -y nginx
-
启动 nginx
输入如下命令,没有报错,则启动成功
nginx
浏览器访问, IP:80
-
-
🍀 源码编译安装(不推荐) 进入官网下载:
然后将其上传到虚拟机(或者也可以使用 wget 的方式) [root@localhost ~] wget https://nginx.org/download/nginx-1.24.0.tar.gz
随之新建一个目录用来存放 nginx 相关文件
[root@localhost ~] mkdir -p /usr/local/nginx
将刚刚下载好的 nginx 包上传到/nginx
目录下(在该目录下执行 wget https://..nginx...命令,上面有写)。解压文件
[root@localhost ~]# mkdir -p /usr/local/nginx
[root@localhost nginx]# ll
total 1052
-rw-r--r-- 1 root root 1073948 Mar 29 17:53 nginx-1.24.0.tar.gz
# 解压
tar -zxvf nginx-1.24.0.tar.gz
[root@localhost nginx]# tar -zxvf nginx-1.24.0.tar.gz
nginx-1.24.0/
nginx-1.24.0/auto/
nginx-1.24.0/conf/
nginx-1.24.0/contrib/
nginx-1.24.0/src/
nginx-1.24.0/configure
nginx-1.24.0/LICENSE
nginx-1.24.0/README
nginx-1.24.0/html/
············
安装编译环境
# 安装gcc,源码编译依赖 gcc 环境
yum -y install gcc-c++
# 安装pcre,pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库
yum install -y pcre pcre-devel
# 安装zlib,zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip
yum install -y zlib zlib-devel
# 安装OpenSSL库
yum install -y openssl openssl-devel
# 进入解压后的目录
[root@localhost ~]# cd /usr/local/nginx/
[root@localhost nginx]# ls
nginx-1.24.0 nginx-1.24.0.tar.gz
[root@localhost nginx]# cd nginx-1.24.0
[root@localhost nginx-1.24.0]# ll
total 800
drwxr-xr-x 6 kaisa kaisa 326 Mar 29 17:55 auto
-rw-r--r-- 1 kaisa kaisa 317399 Oct 19 16:02 CHANGES
-rw-r--r-- 1 kaisa kaisa 485035 Oct 19 16:02 CHANGES.ru
drwxr-xr-x 2 kaisa kaisa 168 Mar 29 17:55 conf
-rwxr-xr-x 1 kaisa kaisa 2590 Oct 19 16:02 configure #安装
drwxr-xr-x 4 kaisa kaisa 72 Mar 29 17:55 contrib
drwxr-xr-x 2 kaisa kaisa 40 Mar 29 17:55 html
-rw-r--r-- 1 kaisa kaisa 1397 Oct 19 16:02 LICENSE
drwxr-xr-x 2 kaisa kaisa 21 Mar 29 17:55 man
-rw-r--r-- 1 kaisa kaisa 49 Oct 19 16:02 README
drwxr-xr-x 9 kaisa kaisa 91 Mar 29 17:55 src
# 执行安装
./configure
make
make install
# 执行完后 输入 whereis nginx 检查是否安装成功,如果出现路径则安装成功
[root@localhost nginx-1.24.0]# whereis nginx
nginx: /usr/local/nginx
# 启动nginx,需进入安装目录
[root@localhost ~]# cd /usr/local/nginx/
[root@localhost nginx]# ls
conf html logs nginx-1.24.0 nginx-1.24.0.tar.gz sbin
[root@localhost nginx]# ./sbin/nginx
# 查看进程
[root@localhost nginx]# ps -ef | grep nginx
root 6787 1 0 18:15 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 6788 6787 0 18:15 ? 00:00:00 nginx: worker process
root 6790 1415 0 18:16 pts/1 00:00:00 grep --color=auto nginx
浏览器查看访问 IP:80
-
🍀 在 Ubuntu 上安装 Nginx:
Nginx 在默认的 Ubuntu 源仓库中可用。想要安装它,运行下面的命令:
sudo apt update sudo apt install nginx
一旦安装完成,Nginx 将会自动被启动。你可以运行下面的命令来验证它:
sudo systemctl status nginx
-
🍀docker 部署 nginx
# 拉取镜像
[root@localhost ~] docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f1f26f570256: Pull complete
7f7f30930c6b: Pull complete
2836b727df80: Pull complete
e1eeb0f1c06b: Pull complete
86b2457cc2b0: Pull complete
9862f2ee2e8c: Pull complete
Digest: sha256:2ab30d6ac53580a6db8b657abf0f68d75360ff5cc1670a85acb5bd85ba1b19c0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
# 查看镜像
[root@localhost ~] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 080ed0ed8312 38 hours ago 142MB
# 启动容器(下面我会来讲解这条命令行)
[root@localhost ~] docker run --name nginx --restart=always -p 80:80 -d -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/aurora-vue:/usr/local/vue nginx
c4c63ea02cd8c4fb0fb4f99ed97319a28d13d88d45564290e9a605909227b3ed
# 查看容器进程
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4c63ea02cd8 nginx "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
浏览器访问 虚拟机 IP:80 (可以选择做端口映射 -p 1008:80 -d -v) 这样的话访问地址为 IP:1008
解析🤔😋:
docker run
: 启动一个新的容器。
--name nginx
: 为容器指定一个名称为 "nginx"。
--restart=always
: 设置容器总是在 Docker 守护进程启动时自动重启。
-p 80:80
: 将主机的 80 端口映射到容器的 80 端口。这样,可以通过主机的 80 端口访问 Nginx 服务。
-d
: 在后台运行容器,即以守护进程方式运行。
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf
: 将主机上的 Nginx 配置文件/usr/local/nginx/nginx.conf 映射到容器内的 /etc/nginx/nginx.conf。这样可以在主机上编辑配置文件,同时使配置文件生效于容器内。
-v /usr/local/vue:/usr/local/vue
: 将主机上的 /usr/local/vue 目录映射到容器内的 /usr/local/vue。这样可以将本地的 Vue 应用程序(vue 项目打包后的 dist,具体文件命名在 conf 文件中定义哦~)挂载到容器内,实现数据共享。
nginx
: 指定要运行的镜像名称为 "nginx",这是基于官方 Nginx 镜像运行容器。
5、Nginx 常用命令 😀😃
# 进入nginx的执行目录
cd /usr/local/nginx/sbin
# 启动nginx
./nginx
# 停止nginx(强制停止)
./nginx -s stop
# 退出nginx(安全退出)
./nginx -s quit
# 重新加载配置文件(修改过配置文件后使用)
./nginx -s reload
你还需要知道的一些命令呢 😆
# 防火墙相关命令
# 关闭防火墙
systemctl stop firewalld
# 开启防火墙
systemctl start firewalld
# 查看防火墙状态
systemctl status firewalld
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=80/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 关闭80端口
firewall-cmd --permanent --remove-port=8080/tcp
# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
暂无评论内容