当前位置: 首页 > news >正文

Nginx快速入门及案例

Ngnix介绍

Nginx(发音为“engine X”)是一款高性能、开源的轻量级 Web 服务器和反向代理服务器,同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔·西索夫(Igor Sysoev)于 2002 年开始开发,并于 2004 年首次公开发布。

Nginx 的主要特点

高性能

高并发处理能力:Nginx 使用异步非阻塞的事件驱动架构,能够高效地处理大量并发连接,相比传统的 Apache 等服务器在高并发场景下表现更为出色。例如,在处理静态资源请求时,Nginx 可以同时处理数万个并发连接,而不会出现明显的性能瓶颈。
低资源消耗:它占用的系统资源较少,即使在高负载情况下也能保持较低的内存和 CPU 使用率。这使得它非常适合运行在资源有限的服务器上。
强大的反向代理功能

负载均衡:

Nginx 可以将客户端的请求分发到多个后端服务器,支持轮询、最少连接、IP 哈希等多种负载均衡算法。例如,一个网站的后端由多个应用服务器组成,Nginx 可以根据配置的算法将用户的请求合理地分配到这些服务器上,从而提高系统的整体可用性和性能。

缓存功能:

它可以缓存后端服务器的响应内容,减少对后端服务器的请求次数,提高响应速度。对于一些不经常变化的动态内容,如新闻网站的新闻页面,Nginx 可以缓存这些页面的 HTML 内容,当用户再次请求时直接返回缓存的内容,大大减轻后端服务器的负担。

灵活的配置

模块化设计:Nginx 提供了丰富的模块支持,用户可以根据需要加载或卸载模块,以实现不同的功能。比如,通过加载 SSL 模块可以支持 HTTPS 协议,通过加载 gzip 模块可以对响应内容进行压缩,从而提高传输效率。
配置文件简洁明了:它的配置文件采用层次化的结构,易于理解和修改。用户可以通过简单的指令来配置服务器的行为,如定义虚拟主机、设置访问控制、配置反向代理等。

高可用性

热部署:Nginx 支持热部署,可以在不中断服务的情况下更新配置文件或升级软件版本。这使得系统维护更加方便,不会对用户的正常访问造成影响。
故障转移:在反向代理的场景下,如果某个后端服务器出现故障,Nginx 可以自动将请求转发到其他可用的服务器,从而保证服务的高可用性。
Nginx 的应用场景

Web 服务器

Nginx 可以作为静态资源服务器,高效地提供 HTML、CSS、JavaScript、图片等静态文件的访问服务。例如,一个大型的电商网站,其大量的商品图片和前端页面文件可以通过 Nginx 快速地提供给用户。
它也可以与后端应用服务器(如 PHP-FPM、Tomcat 等)配合,通过反向代理的方式处理动态请求。当用户请求动态内容时,Nginx 将请求转发给后端应用服务器,然后将处理后的结果返回给用户。
反向代理服务器
在分布式系统中,Nginx 常被用作反向代理服务器,将客户端的请求分发到多个后端服务节点,实现负载均衡。例如,在一个微服务架构的应用中,Nginx 可以作为网关,将用户的请求路由到不同的微服务实例。
它还可以作为 CDN(内容分发网络)的边缘节点,缓存热点内容,提高内容的分发效率,降低源站的负载。

邮件代理服务器

Nginx 支持邮件协议(如 IMAP、POP3 等),可以作为邮件代理服务器,对邮件流量进行转发和处理。它可以提高邮件系统的性能和安全性,例如通过缓存邮件内容来减少对邮件服务器的访问压力,或者对邮件流量进行加密传输。

Nginx 的工作原理
事件驱动架构

Nginx 采用基于事件驱动的架构,通过监听网络事件(如客户端的连接请求、数据读写等)来处理请求。当一个事件发生时,Nginx 会触发相应的处理函数来完成任务。这种架构使得 Nginx 能够高效地处理大量并发连接,因为它不需要为每个连接创建一个单独的线程或进程,从而避免了线程切换和进程创建的开销。

工作进程模型

Nginx 通常运行在多核服务器上,它会启动多个工作进程(worker process),每个工作进程负责处理一部分请求。这些工作进程之间通过共享内存、文件描述符等方式进行通信和协作。Nginx 的主进程(master process)负责管理这些工作进程,例如启动、停止、监控工作进程的状态等。

请求处理流程

当客户端发送请求到 Nginx 时,首先会被主进程接收,然后根据配置的规则将请求分配给某个工作进程。工作进程会解析请求头,根据请求的类型(如静态资源请求、动态请求等)进行相应的处理。如果是静态资源请求,工作进程会直接从文件系统中读取文件内容并返回给客户端;如果是动态请求,工作进程会将请求转发到后端应用服务器,等待后端服务器的响应,然后将响应内容返回给客户端。

Ngnix快速入门

安装Ngnix

1.配置Nginx yum存储库
vim /etc/yum.repos.d/nginx.repo

将下面的内容写入

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2.安装Nginx

执行命令

yum -y install nginx

在这里插入图片描述

3.启动Nginx

执行启动命令

systemctl start nginx

查看状态 显示active(running)就是启动成功了

systemctl status nginx

在这里插入图片描述

设置开机自动启动

systemctl enable nginx
3.访问Nginx服务默认首页

如果能成功出现下面的页面说明Nginx运行时正常的
在这里插入图片描述

重要的目录和文件

在 Nginx 系统中,有几个关键的目录和文件扮演着重要的角色。以下是对这些核心内容的详细介绍:

1.配置文件

/etc/nginx/:这是 Nginx 主要配置文件存放的目录。

/etc/nginx/nginx.conf:这是 Nginx 的主配置文件,其中包含了服务器的全局配置信息。

2.日志文件

/var/log/nginx/:这个目录包含了 Nginx 的所有日志文件,包括访问日志和错误日志。

/var/log/nginx/access.log:这是访问日志文件,记录了所有访问服务器的请求信息。

/var/log/nginx/error.log:这是错误日志文件,用于记录服务器在处理请求过程中出现的错误信息。

Nginx案例

静态资源服务器案例

1.上传静态资源到服务器

通过网盘分享的文件:hello-nginx.zip
链接: https://pan.baidu.com/s/18N1ny8x2bm0K0kBzlY9I0w?pwd=kk5d 提取码: kk5d

2.解压hello-nginx.zip/usr/share/nginx/html
unzip hello-nginx.zip -d /usr/share/nginx/html

在这里插入图片描述
项目路径如下:

/usr
└── share└── nginx└── html└── hello-nginx├── css│   └── style.css├── images│   └── img.png└── index.html
3.配置Nginx虚拟主机
vim /etc/nginx/conf.d/hello-nginx.conf

添加如下内容:

server {listen       8080;server_name  主机名;location /hello-nginx {root   /usr/share/nginx/html;index  index.html;}
}
以下是对配置文件的介绍

Nginx 处理请求的逻辑

通过以下示例,我们可以了解 Nginx 是如何处理进入的 HTTP 请求的。

1.匹配 Server

由于 Nginx 可以为多个虚拟主机配置不同的server块,因此当 Nginx 接收到一个请求时,它首先需要确定将请求交给哪个虚拟主机处理。这一过程主要依据server_namelisten指令进行判断。

server {listen       8080;server_name  192.168.10.102;# 其他配置...
}

当有请求发往http://192.168.10.102:8080/hello-nginx时,Nginx 会将请求匹配到上述的server块进行处理。

2.匹配 Location

在完成server块的匹配后,Nginx 还需要在该server块内部匹配具体的location块。location的匹配是基于请求的 URI 进行的。

例如,以下配置中的location块会处理所有以/hello-nginx开头的请求:

location /hello-nginx {# 配置指令...
}

当请求http://192.168.10.102:8080/hello-nginx时,Nginx 会匹配到这个location块。

3.定位文件

一旦匹配到location块,Nginx 会使用该location块中指定的root指令作为根目录,然后在该目录下查找请求的资源。

例如,以下配置:

location /hello-nginx {root   /usr/share/nginx/html;index  index.html;
}

当请求http://192.168.10.102:8080/hello-nginx时,Nginx 会在/usr/share/nginx/html/hello-nginx路径下查找资源。由于该路径是一个目录,Nginx 会在该目录下寻找index.html文件,然后将该文件的内容返回给客户端。

注意:上述提到的serverlocation匹配有多种模式,如精确匹配、前缀匹配等,此处不再展开。

重新加载配置文件

systemctl reload nginx

浏览器搜索http://192.168.10.102:8080/hello-nginx/ 如果可以看到以下页面说明配置成功了
在这里插入图片描述

反向代理案例

1.配置虚拟主机

创建配置文件

vim /etc/nginx/conf.d/hello-proxy.conf

写入以下内容

server {listen       9090;server_name  192.168.10.102;location / {proxy_pass http://www.baidu.com;}
}
2.重新加载Nginx配置文件
systemctl reload nginx
3.观察代理效果

访问http://192.168.10.102:9090 观察结果
在这里插入图片描述

http://www.dtcms.com/a/296979.html

相关文章:

  • 【安卓笔记】解决livedata粘性事件
  • 《Java语言程序设计》第2章复习题(2)
  • RePlugin 坑位使用原理与指南
  • 多源信息融合智能投资【“图神经网络+强化学习“的融合架构】【低配显卡正常运行】
  • 模拟退火算法 (Simulated Annealing, SA)简介
  • JavaWeb学习打卡14(JSP内置对象及作用域)
  • ARM汇编常见伪指令及其用法示例
  • IntelliJ IDEA中管理多版本Git子模块的完整指南
  • 智慧工厂网络升级:新型 SD-WAN 技术架构与应用解析
  • 商场导航软件:3D+AI 基于Deepseek 模型的意图识别技术解析
  • BacNet 是什么?跟 LoRaWAN 的关系是什么?
  • 将JS字节流转化为对象
  • 西安交通大学XJTU 通信/信息工程大三和部分大四 实验和课程答案
  • C++哪些运算符不能被重载?
  • kubernetes集群中部署CoreDNS服务
  • day46day47 通道注意力
  • 一种基于单片机控制的太阳能电池板系统设计
  • 集训Demo6
  • 挖掘录屏宝藏:Screenity 深度解析与使用指南
  • 《计算机网络》实验报告八 加密、数字签名与证书
  • pytest测试框架
  • AUTOSAR进阶图解==>AUTOSAR_SWS_BSWGeneral
  • 【Vue学习笔记】状态管理:Pinia 与 Vuex 的使用方法与对比【附有完整案例】
  • 网络安全入门第一课:信息收集实战手册(2)
  • C语言-指针[变量指针与指针变量]
  • Java 集合框架之----ArrayList
  • Effective Modern C++ 条款16:保证const成员函数的线程安全性
  • 网址收集总结
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-17,(知识点:PCB布线,传输线阻抗影响因素)
  • 第一二章笔记