目录
一、Nginx 的介绍
1.1 开源版 Nginx
① 访问路由
② 反向代理
③ 负载均衡
④ 内容缓存
⑤ 可编程
1.2 商业版 Nginx Plus
① 负载均衡
② 动态管理
③ 安全控制
④ 状态监控
⑤ Kubernetes Ingress Controller
⑥ 流媒体
1.3 扩展版本 OpenResty
二、Nginx 的 Docker 安装
2.1 安装步骤
三、项目资源上传至 Nginx
3.1 修改 Nginx 的 default.conf 配置文件
3.2 上传前端资源文件
编辑 3.3 前端访问测试
一、Nginx 的介绍
Nginx(发音同”engine x”)是一个高性能的反向代理和 Web 服务器软件,最初是由俄罗斯人 Igor Sysoev 开发的。Nginx 的第一个版本发布于 2004 年,其源代码基于双条款 BSD 许可证发布,因其系统资源消耗低、运行稳定且具有高性能的并发处理能力等特性,Nginx 在互联网企业中得到广泛应用。
Nginx 是互联网上最受欢迎的开源 Web 服务器之一,它不仅提供了用于开发和交付的一整套应用技术,还是应用交付领域的开源领导者。Netcraft 公司 2019 年 7 月的统计数据表明,Nginx 为全球最繁忙网站中的 25.42% 提供了服务或代理,进一步扩大了其在主机域名领域的占有量,新增 5220 万个站点,总数达 4.4 亿个,市场占有率已经超过 Apache 4.89%。
得益于近几年云计算和微服务的快速发展,Nginx 因在其中发挥了自身优势而得到广泛应用,且有望在未来占有更多的市场份额。
2019 年 3 月,著名硬件负载均衡厂商 F5 宣布收购 Nginx,Nginx 成为 F5 的一部分。F5 表示,将加强对开源和 Nginx 应用平台的投资,致力于 Nginx 开源技术、开发人员和社区的发展,更大的投资将为开放源码计划注入新的活力,会主办更多的开放源码活动,并产生更多的开放源码内容。
作为最受欢迎的 Web 服务器之一,Nginx 自 2004 年发布以来已经得到很多互联网企业的应用。官方目前有 Nginx 开源版和 Nginx Plus 商业版两个版本,开源版是目前使用最多的版本,商业版除了包含开源版本的全部功能外,还提供了一些独有的企业级功能。
Nginx 在国内互联网企业中也得到了广泛应用,企业在实际使用中会根据自身的需求进行相应的扩展和增强。目前国内流行的 Nginx 主要有两个开源版本,分别是由淘宝网技术团队维护的 Tengine 项目和由章亦春发起的 OpenResty 项目。
1.1 开源版 Nginx
Nginx 开源版一直处于活跃开发状态,由 Nginx 公司负责开发与维护。截至本教程写作时,Nginx 开源版本已经更新到 1.17.2 版本。Nginx 自推出以来,一直专注于低资源消耗、高稳定、高性能的并发处理能力,除了提供 Web 服务器的功能外,还实现了访问代理、负载均衡、内容缓存、访问安全及带宽控制等功能。其基于模块化的代码架构及可与其他开发语言(如 Perl、JavaScript 和 Lua)有效集成的可编程特性,使其具有强大的扩展能力。
部署和优化具有高效率、高性能并发请求处理能力的应用架构是应用架构师一直追求的目标,在应用架构技术的迭代中,各种分离式思想成为主流,比如将访问入口和 Web 服务器分离、将 Web 服务器和动态脚本解析器分开、将 Web 功能不断拆分、微服务等。
Nginx 不仅提供了 Web 服务器的功能,还极大满足了这一主流架构的需求并提供了如下应用特性。
① 访问路由
现今大型网站的请求量早已不是单一 Web 服务器可以支撑的了。单一入口、访问请求被分配到不同的业务功能服务器集群,是目前大型网站的通用应用架构。Nginx 可以通过访问路径、URL 关键字、客户端 IP、灰度分流等多种手段实现访问路由分配。
② 反向代理
就反向代理功能而言,Nginx 本身并不产生响应数据,只是应用自身的异步非阻塞事件驱动架构,高效、稳定地将请求反向代理给后端的目标应用服务器,并把响应数据返回给客户端。其不仅可以代理 HTTP 协议,还支持 HTTPS、HTTP/2、FastCGI、uWSGI、SCGI、gRPC 及 TCP/UDP 等目前大部分协议的反向代理。
③ 负载均衡
Nginx 在反向代理的基础上集合自身的上游(upstream)模块支持多种负载均衡算法,使后端服务器可以非常方便地进行横向扩展,从而有效提升应用的处理能力,使整体应用架构可轻松应对高并发的应用场景。
④ 内容缓存
动态处理与静态内容分离是应用架构优化的主要手段之一,Nginx 的内容缓存技术不仅可以实现预置静态文件的高速缓存,还可以对应用响应的动态结果实现缓存,为响应结果变化不大的应用提供更高速的响应能力。
⑤ 可编程
Nginx 模块化的代码架构方式为其提供了高度可定制的特性,但可以用C语言开发 Nginx 模块以满足自身使用需求的用户只是少数。Nginx 在开发之初就具备了使用 Perl 脚本语言实现功能增强的能力。Nginx 对 JavaScript 语言及第三方模块对 Lua 语言的支持,使得其可编程能力更强。
Nginx 开源版本维护了两个版本分支,分别为主线(mainline)分支和稳定(stable)分支。主线分支是一个活跃分支,会添加一些最新的功能并进行错误修复,由版本号中的第二位奇数标识,截至本教程写作时的最新版本为 1.17.2。稳定分支会集成修复严重错误的代码,但不会增加新的功能,由版本号中的第二位偶数标识,截至本教程写作时的最新版本为 1.16.1。想了解更多内容的用户可参阅Nginx 官方网站。
1.2 商业版 Nginx Plus
Nginx Plus 是 Nginx 于 2013 年推出的商业版本,在开源版本的基础上增加了使用户对 Nginx 的管理和监控更轻松的功能。其代码在单独的私有代码库中维护。它始终基于最新版本的 Nginx 开源版本主线分支,并包含一些封闭源代码特性和功能。因此,除了开源版本中提供的功能外,Nginx Plus 还具有独有的企业级功能,包括实时活动监视数据、通过 API 配置上游服务器负载平衡和主动健康检查等。
相对于开源版本,Nginx Plus 还提供了以下几个功能。
① 负载均衡
基于 cookies 的会话保持功能。
基于响应状态码和响应体的主动健康监测。
支持 DNS 动态更新。
② 动态管理
支持通过 API 清除内容缓存。
可通过 API 动态管理上游的后端服务器列表。
③ 安全控制
基于 API 和 OpenID 连接协议单点登录(SSO)的 JWT(JSON Web Token)认证支持。
Nginx WAF 动态模块。
④ 状态监控
超过 90 个状态指标的扩展状态监控。
内置实时图形监控面板。
集成可用于自定义监控工具的 JSON 和 HTML 输出功能支持。
⑤ Kubernetes Ingress Controller
支持 Kubernetes 集群 Pod 的会话保持和主动健康监测。
支持 JWT 身份认证。
⑥ 流媒体
支持自适性串流(Adaptive Bitrate Streaming,ABS)媒体技术 HLS(Apple HTTP Live Streaming)和 HDS(Adobe HTTP Dynamic Streaming)。
支持对 MP4 媒体流进行带宽控制。
1.3 扩展版本 OpenResty
OpenResty 是基于 Nginx 开源版本的扩展版本,它利用 Nginx 的模块特性,使 Nginx 支持 Lua 语言的脚本编程,鉴于 Lua 本身嵌入应用程序中增强应用程序扩展和定制功能的设计初衷,开源版本 Nginx 的可编程性得到大大增强。
据 OpenResty 官网介绍,2017 年全球互联网中至少有 23 万台主机正在使用 Nginx 的 OpenResty 版本作为 Web 服务器或网关应用。OpenResty® 是一个基于 Nginx 与 Lua 的高性能Web平台,其内部集成了大量精良的 Lua库、第三方模块以及大多数依赖项,以便搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),将 Nginx 变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师就可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 模块及 Lua 模块,快速构造出足以胜任一万乃至百万以上单机并发连接的高性能Web应用系统。
OpenResty® 的目标是让 Web 服务直接运行在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅对 HTTP 客户端请求,还对远程后端如 MySQL、PostgreSQL、Memcached 及 Redis 等都进行一致的高性能响应。
OpenResty 构架在 Nginx 和 LuaJIT 的基础之上,利用 Nginx 的模块特性集成了大量 Lua 支持库,用户可以很方便地使用 Lua 编程语言对 Nginx 的功能进行扩展和增强。
OpenResty 通过基于 Nginx 优化的 ngx.location.capture_multi 功能,可以非阻塞地并行转发多个子请求给后端服务器,当后端服务器返回数据时进行相应的归类和排序处理,进而有效提升客户端的请求响应速度。在 OpenResty 代码架构中,其代码以 ngx_lua 模块的形式嵌入 Nginx 代码中,从而使用户编写的 Lua 代码与 Nginx 进程协同工作。OpenResty 为每个 Nginx 工作进程(Worker Process)创建了一个 Lua 虚拟机(LuaVM),如下图所示。并将 Nginx I/O 原语封装注入 Lua 虚拟机中供 Lua 代码访问,每个外部请求都由 Lua 虚拟机产生一个 Lua 协程(coroutine)进行处理,协程之间彼此数据隔离并共享对应的 Lua 虚拟机。
二、Nginx 的 Docker 安装
2.1 安装步骤
1. 拉取 Nginx镜像
docker pull nginx:1.27

2. 创建 Nginx 挂载配置文件
mkdir -p /root/conf/nginx/conf
mkdir -p /root/conf/nginx/log
mkdir -p /root/conf/nginx/html

3. 将容器内文件拷贝到宿主机中
# 生成容器
docker run --restart=always --name nginx -p 80:80 -d nginx:1.27
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /root/conf/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /root/conf/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /root/conf/nginx/html/

4. 执行命令删除简单的容器
# 直接执行docker rm nginx或者以容器id方式关闭容器
# 找到nginx对应的容器id
docker ps -a
# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx
# 删除正在运行的nginx容器
docker rm -f nginx

5. 重新运行容器实例
docker run
-p 80:80
--name nginx
-v /root/conf/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /root/conf/nginx/conf/conf.d:/etc/nginx/conf.d
-v /root/conf/nginx/log:/var/log/nginx
-v /root/conf/nginx/html:/usr/share/nginx/html
-d nginx:1.27

6. 查看效果

三、项目资源上传至 Nginx
3.1 修改 Nginx 的 default.conf 配置文件
需要对网关服务的 IP 进行更改,同时修改 server_name 为实际的 IP:
# 配置服务器组
upstream yunlanforum {
server 192.168.1.4:10086; #网关服务
}
server {
listen 80;
server_name localhost;
location / {
root /home/dist/forum;
index sign-in.html index.html index.htm;
try_files $uri $uri/ /sign-in.html;
}
location /dev-api/ {
proxy_pass http://yunlanforum/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
3.2 上传前端资源文件
[root@192 ~]# cd /home
[root@192 home]# ll
总用量 4
drwx------. 16 aoyunlan aoyunlan 4096 4月 25 21:19 aoyunlan
[root@192 home]# ll
总用量 8
drwx------. 16 aoyunlan aoyunlan 4096 4月 25 21:19 aoyunlan
drwxr-xr-x. 3 root root 4096 5月 3 00:01 dist
[root@192 home]# pwd
/home
[root@192 home]#
3.3 前端访问测试






















暂无评论内容