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

Nginx入门指南-元一软件

官网地址:https://nginx.org/en/docs/beginners_guide.html

本指南对 nginx 进行了基本介绍,并描述了一些可以使用它完成的简单任务。假定nginx已经安装在阅读者的机器上。如果不是,请参阅nginx安装页面。本指南描述了如何启动和停止 nginx 并重新加载它的配置,解释配置文件的结构,描述了如何设置 nginx 来提供静态内容,如何将 nginx 配置为代理服务器,以及如何将它与 FastCGI 应用程序连接。

nginx 有一个主进程和几个工作进程。主进程的主要目的是读取和评估配置,并维护工作进程。工作进程处理实际请求。nginx 使用基于事件的模型和依赖于操作系统的机制来有效地在工作进程之间分发请求。工作进程的数量在配置文件中定义,可以针对给定的配置进行固定,也可以根据可用 CPU 内核的数量自动调整。

nginx 及其模块的工作方式在配置文件中确定。默认情况下,配置文件名为 nginx.conf,并放置在 /usr/local/nginx/conf、/etc/nginx 或 /usr/local/etc/nginx 目录中。

启动、停止和重新加载配置

要启动nginx,运行可执行文件。一旦启动nginx,就可以通过调用带有 -s 参数的可执行文件来控制它。使用以下语法:

nginx-ssignal

这里的 signal 取值可能如下:

  • stop — 快速关闭,执行该命令直接停止 nginx,不管 nginx 当前是否还有请求在处理。

  • quit — 优雅的关闭,执行该命令后,如果 nginx 还有请求在处理,则等待请求处理完成后才关闭 nginx。

  • reload — 重新加载配置文件,修改 nginx.conf 文件后可以使用该命令去重新加载配置。

  • reopen — 重新打开日志文件,假如我们需要备份日志文件,备份后的日志文件为 access.log.old,然后创建一个新的 access.log 文件。你会发现,新的数据并没有写入 access.log 文件,而是写入到了access.log.old文件。这要我们去重启 nginx,如果不想重启 nginx,可以通过 reopen 重新打开日志文件。

例如,要停止 nginx 进程,等待 worker 进程完成服务当前请求,可以执行以下命令:

nginx-squit

这个命令应该在启动nginx的同一用户下执行。

在将重新加载配置的命令发送到 nginx 或 重新启动配置之前,不会应用配置文件中所做的更改。要重新加载配置,请执行:

nginx-sreload

一旦主进程接收到重新加载配置的信号,它将检查新配置文件的语法有效性,并尝试应用其中提供的配置。如果成功,主进程将启动新的工作进程并向旧工作进程发送消息,请求它们关闭。否则,主进程将回滚更改并继续使用旧配置。老工作进程接收关闭命令,停止接受新连接,并继续为当前请求提供服务,直到所有这些请求都得到服务为止。然后,老工作进程退出。

在 kill 实用程序等 Unix 工具的帮助下,还可以向 nginx 进程发送信号。在本例中,一个信号被直接发送到具有给定进程ID的进程。默认情况下,nginx 主进程的进程ID被写入nginx。pid 位于 /usr/local/nginx/logs 或 /var/run 目录中。例如,如果主进程ID是1628,要发送退出信号导致 nginx 优雅地关闭,执行:

kill-sQUIT1628

要获得所有运行nginx进程的列表,可以使用ps实用程序,例如:

ps-ax|grepnginx

有关向nginx发送信号的更多信息,请查阅控制Nginx。

配置文件结构

nginx 由模块组成,模块由配置文件中指定的指令控制。指令分为简单指令和块指令。一个简单的指令由名称和参数组成,它们由空格分隔,并以分号(;)结束。块指令具有与简单指令相同的结构,但它的结尾不是分号,而是一组由大括号({和})包围的附加指令。如果一个块指令可以在大括号中包含其他指令,那么它被称为上下文(例如:events、http、server 和 location)。

放在任何上下文之外的配置文件中的指令被认为是在主上下文中。events 和 http 指令驻留在主上下文中,server指令驻留在http复合指令中,location指令驻留在server复合指令中。即:

worker_processes1;events{worker_connections1024;}# 复合指令http{include mime.types;default_type application/octet-stream;# 复合指令server{listen8080;server_name localhost;location /{root html;index index.html;}}}

# 符号后面的内容被认为是注释。

提供静态内容

一个重要的 web 服务器任务是提供文件(比如图像或静态HTML页面)。您将实现一个示例,根据请求,文件将从不同的本地目录中得到:/data/www(可能包含HTML文件)和 /data/images(包含图像)。这需要编辑配置文件,并在 http 块内部设置 server 块,并有两个 location 块。

首先,创建 /data/www 目录并将包含任何文本内容的 index.html 文件放入其中,然后创建 /data/images 目录并在其中放置一些图像。

接下来,打开配置文件。默认配置文件已经包含了 server 块的几个例子,大部分都被注释掉了。现在注释掉所有这样的块,并开始一个新的服务器块:

http{server{}}

通常,配置文件可能包含几个 server 块,这些 server 块由它们侦听的端口和服务器名称来区分。一旦 nginx 决定哪个服务器处理请求,它就根据服务器块中定义的 location 指令的参数测试请求头中指定的URI。

将以下 location 块添加到 server 块:

location /{root /data/www;}

此 location 块指定与请求中的URI相比较的“/”前缀。为了匹配请求,URI 将被添加到根指令中指定的路径,即 /data/www,以形成本地文件系统上被请求文件的路径。如果有多个匹配的 location 块,nginx 选择前缀最长的一个。上面的 location 块提供了长度为 1 的最短前缀,因此,只有当所有其他 location 块都不能提供匹配时,才会使用这个块。

接下来,添加第二个 location 块:

location /images/{root /data;}

它将匹配以 /images/ 开头的请求 (location / 也匹配此类请求,但前缀更短)。

server 块的最终配置应该如下所示:

server{location /{root /data/www;}location /images/{root /data;}}

这已经是一个服务器的工作配置,它监听标准端口80,并且可以在本地机器上访问,地址是 https://localhost/ 。对于以 /images/ 开头的 uri 请求,服务器将从 /data/images 目录发送文件。例如,响应https://localhost/images/example.png 请求,nginx 将发送 /data/images/example.png 文件。如果不存在这样的文件,nginx 将发送一个响应,指示 404 错误。不以 /images/ 开头的 uri 请求将映射到 /data/www 目录。例如,响应 https://localhost/some/example.html 请求,nginx 将发送 /data/www/some/example.html 文件。

若要应用新配置,请在nginx尚未启动时启动nginx,或向 nginx 的主进程发送重新加载信号,方法如下:

nginx-sreload

如果某些东西不能按预期工作,您可以尝试在 /usr/local/nginx/logs 或 /var/log/nginx 目录中的 access.log 和 error.log 文件中找出原因。

设置一个简单的代理服务器

nginx 的一个常见用途是将其设置为代理服务器,这意味着服务器接收请求,将请求传递给代理服务器,从代理服务器检索响应,并将响应发送给客户机。

我们将配置一个基本代理服务器,它使用本地目录中的文件来处理图像请求,并将所有其他请求发送到代理服务器。在本例中,这两个服务器将在一个 nginx 实例上定义。

首先,通过在 nginx 的配置文件中添加一个包含以下内容的 server 块来定义代理服务器:

server{listen8080;root /data/up1;location /{}}

这将是一个简单的服务器,它监听端口8080(之前,由于使用了标准端口80,所以没有指定 listen 指令),并将所有请求映射到本地文件系统上的 /data/up1 目录。创建此目录并将 index.html 文件放入其中。注意,根指令放在服务器上下文中。当为服务请求而选择的 location 块不包含自己的根指令时,将使用这种根指令。

接下来,使用上一节中的服务器配置并修改它,使其成为代理服务器配置。在第一个 location 块中,将 proxy_pass指 令与参数中指定的协议、代理服务器的名称和端口放在一起 (在我们的例子中,是https://localhost:8080 ):

server{location /{proxy_pass https://localhost:8080;}location /images/{root /data;}}

我们将修改第二个 location 块,它当前将带有 /images/ 前缀的请求映射到 /data/images 目录下的文件,使其匹配具有典型文件扩展名的图像请求。修改后的位置块如下:

location ~ .(gif|jpg|png)${root /data/images;}

该参数是一个正则表达式,它匹配所有以 .gif、.jpg 或 .png结尾的 uri。正则表达式的前面应该加上~。相应的请求将映射到/data/images目录。

当 nginx 选择一个 location 块来服务一个请求时,它首先检查指定前缀的 location 指令,记住前缀最长的位置,然后检查正则表达式。如果与正则表达式匹配,nginx 将选择此位置,否则,它将选择之前记住的location。

代理服务器的最终配置如下:

server{location /{proxy_pass https://localhost:8080/;}location ~ .(gif|jpg|png)${root /data/images;}}

该服务器将过滤以 .gif、.jpg 或 .png 结尾的请求,并将它们映射到 /data/images 目录(通过向根指令的参数添加URI),并将所有其他请求传递到上面配置的代理服务器。

要应用新的配置,请将reload信号发送到nginx,如前面部分所述。

可以使用更多的指令来进一步配置代理连接。

设置FastCGI代理

nginx 可用于将请求路由到 FastCGI 服务器,FastCGI 服务器运行使用各种框架和编程语言(如PHP)构建的应用程序。

使用 FastCGI 服务器的最基本的 nginx 配置包括使用 fastcgi_pass 指令而不是 proxy_pass 指令,以及 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。假设 FastCGI 服务器可以在localhost:9000 上访问。以上一节中的代理配置为基础,用 fastcgi_pass 指令替换 proxy_pass 指令,并将参数更改为 localhost:9000。在 PHP 中,SCRIPT_FILENAME 参数用于确定脚本名,QUERY_STRING 参数用于传递请求参数。最终的配置将是:

server{location /{fastcgi_pass localhost:9000;fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;fastcgi_param QUERY_STRING$query_string;}location ~ .(gif|jpg|png)${root /data/images;}}
http://www.cnnetsun.cn/news/3416738.html

相关文章:

  • 跨越天际:从智能汽车到 eVTOL 的适航与系统级开发43——多旋翼/倾转旋翼全包线动力学建模、姿态解算与控制律 Control Law 切换陷阱
  • TVA-具身智能:如何跨越电子与原子鸿沟(17)
  • TVA赋能下的具身智能技术进阶之路(6)
  • 从零构建高效可扩展的C++行为树框架:原理、实现与优化
  • 炉石传说脚本终极指南:3步配置,24小时自动刷金币
  • Python:使用segno模块打造个性化艺术二维码
  • SpringBoot Actuator端点安全加固实战:从风险识别到配置修复
  • Cursor配置Java+SpringBoot开发环境全指南(Windows版)
  • YOLOv12改进策略【Conv和Transformer】| CVPR2025 CATANet LRSA局部区域自注意力 重叠分块交互 + 共享多头权重,精细复原图像纹理细节
  • HarmonyOS实战《疆域纪行》第10篇|发布交付:构建配置、截图文案、隐私说明和上架前检查
  • Go-Zero进阶实战1: Docker 环境构建与微服务容器化实践
  • ArcGIS工具箱实战:一键生成多边形四至点坐标的完整流程
  • C++实战:商场客户服务系统开发与架构设计详解
  • 寻址方式:从原理到实战,七种模式深度解析与应用场景
  • 当EndNote与Word“失联”时:一份全面的修复与预防指南
  • 串口通信(UART)原理、优势与应用场景详解
  • Hitboxer:键盘玩家的竞技场革命,重新定义游戏输入边界
  • C++投票系统实战:从面向对象到文件操作的项目开发指南
  • C++实战:从零构建学生成绩管理系统,掌握面向对象与文件操作
  • 野外流动气象观测怎么选?小型车载自动气象站使用优势解析
  • 【软考设计模式】外观模式:复杂子系统的“门面“封装与代码填空精讲
  • C++低时延服务优化七大核心策略:从编译到部署的工程实践
  • C++程序暂停:告别system(‘pause‘),掌握安全跨平台实现方案
  • 独立站搭建全流程:适合深圳室内装饰材料跨境企业的建站服务商哪家好?含零代码SAAS、AI编程、源码定制交付
  • 计算机组成原理-从加法器到ALU:CPU运算核心的构建之路
  • whose Jacobi
  • 深入探究C++字符串:从std::string底层机制到现代C++高效实践
  • 豆包App新手操作指南:7步物理级上手与故障排错
  • C++结构体实战:从洛谷P5744题看数据建模与边界处理
  • 拓扑算法与图形渲染在跨界项目中的技术实现与应用