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

nginx 新手指南

文章来源:https://nginx.cadn.net.cn/beginners_guide.html

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

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

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

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

要启动 nginx,请运行可执行文件。 nginx 启动后,可以通过调用可执行文件来控制它 替换为参数。 使用以下语法:-s

nginx -s signal

其中 signal 可以是以下值之一:

  • stop— 快速关机
  • quit— 优雅关闭
  • reload— 重新加载配置文件
  • reopen— 重新打开日志文件

例如,要停止 nginx 进程并等待 worker 进程 要完成对当前请求的处理,可以执行以下命令:

nginx -s quit

此命令应在 启动 nginx。

在配置文件中所做的更改 ,直到重新加载配置的命令为 发送到 nginx 或重新启动。 要重新加载配置,请执行:

nginx -s reload

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

在 Unix 工具的帮助下,也可以向 nginx 进程发送信号 比如 Utility 。 在这种情况下,信号将直接发送到具有给定进程 ID 的进程。 默认情况下,nginx 主进程的进程 ID 会写入目录 或 中的 。 例如,如果主进程 ID 为 1628,则发送 QUIT 信号 导致 nginx 正常关闭,请执行:killnginx.pid/usr/local/nginx/logs/var/run

kill -s QUIT 1628

要获取所有正在运行的 nginx 进程的列表,可以使用该实用程序,例如,按以下方式:ps

ps -ax | grep nginx

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

配置文件的结构

nginx 由模块组成,这些模块由指定的指令控制 在配置文件中。 指令分为 simple directives 和 block directives。 简单指令由用空格分隔的 name 和 parameters 组成 ,以分号 () 结尾。 block 指令的结构与 simple 指令相同,但 它不是分号,而是以一组附加指令结尾 用大括号 ( 和 ) 括起来。 如果 block 指令可以在大括号内有其他指令, 它称为上下文(例如:事件、HTTP、服务器、 和位置)。;{ }

放置在配置文件外部的指令 的 S 都被视为位于主上下文中。 和 指令 驻留在上下文中, 中 和 中。eventshttpmainserverhttplocationserver

标志后面的行的其余部分被视为注释。#

提供静态内容

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

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

接下来,打开配置文件。 默认配置文件已经包含几个 该块,大部分被注释掉了。 现在注释掉所有此类块并启动一个新块:serverserver

http {
    server {
    }
}

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

将以下数据块添加到数据块中:locationserver

location / {
    root /data/www;
}

此块指定 “” 前缀与请求中的 URI 进行比较。 对于匹配的请求,URI 将被添加到 root 指令中指定的路径,即 to 、 以在本地文件系统上形成所请求文件的路径。 如果有多个匹配的块 nginx 选择前缀最长的那个。 上面的块提供了最短的 前缀,长度为 1, 因此,只有当所有其他区块都无法提供匹配时,才会使用这个区块。location//data/wwwlocationlocationlocation

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

location /images/ {
    root /data;
}

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

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

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

    location /images/ {
        root /data;
    }
}

这已经是侦听 在标准端口 80 上,并且可以在本地计算机上的 上访问 。 响应 URI 以 开头的请求,则 服务器将从该目录发送文件。 例如,为了响应请求,nginx 将 发送文件。 如果此类文件不存在,nginx 将发送响应 指示 404 错误。 URI 开头不为 的请求将是 映射到目录。 例如,为了响应请求,nginx 将 发送文件。http://localhost//images//data/imageshttp://localhost/images/example.png/data/images/example.png/images//data/wwwhttp://localhost/some/example.html/data/www/some/example.html

要应用新配置,请启动 nginx(如果尚未启动)或 将信号发送到 nginx 的主进程, 通过执行:reload

nginx -s reload

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

设置 Simple Proxy Server

nginx 的常见用途之一是将其设置为代理服务器,这 表示接收请求并将其传递给代理服务器的服务器, 从中检索响应,并将其发送到客户端。

我们将配置一个基本的代理服务器,它为 包含本地目录中的文件的映像,并将所有其他请求发送到 代理服务器。 在此示例中,两个服务器都将在单个 nginx 实例上定义。

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

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

这将是一个侦听端口 8080 的简单服务器 (以前,尚未指定该指令 由于使用了标准端口 80)和映射 对本地目录的所有请求 文件系统。 创建此目录并将文件放入其中。 请注意,该指令位于 context. 当为服务请求选择的块没有 include 它自己的指令。listen/data/up1index.htmlrootserverrootlocationroot

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

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

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

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

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

当 nginx 选择一个区块来提供请求时 它首先检查指定前缀的位置指令,记住最长的前缀,然后检查正则表达式。 如果存在与正则表达式的匹配项,nginx 会选择这个,否则,它会选择之前记住的那个。locationlocationlocation

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

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

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

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

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

还有更多指令可用于进一步配置 proxy 连接。

设置 FastCGI 代理

nginx 可用于将请求路由到运行 使用各种框架和编程语言构建的应用程序 比如 PHP。

与 FastCGI 服务器一起使用的最基本的 nginx 配置 包括使用 fastcgi_pass 指令而不是指令, 以及 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。 假设 FastCGI 服务器可在 上访问 。 以上一节中的 proxy 配置为基础, 将 Directive 替换为 Directive,并将参数更改为 . 在 PHP 中,该参数用于 确定脚本名称,参数用于传递请求参数。 生成的配置将为:proxy_passlocalhost:9000proxy_passfastcgi_passlocalhost:9000SCRIPT_FILENAMEQUERY_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;
    }
}

这将设置一个服务器,该服务器将路由除 向通过 FastCGI 协议运行的代理服务器请求静态图像。localhost:9000


http://www.kler.cn/a/531745.html

相关文章:

  • 洛谷 P11626 题解
  • 当WebGIS遇到智慧文旅-以长沙市不绕路旅游攻略为例
  • LeetCode:121.买卖股票的最佳时机1
  • VLC-Qt: Qt + libVLC 的开源库
  • 【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示
  • 笔灵ai写作技术浅析(三):深度学习
  • 强化学习数学原理(五)——随机近似与随机
  • 携程Java开发面试题及参考答案 (200道-下)
  • 分享半导体Fab 缺陷查看系统,平替klarity defect系统
  • 【leetcode练习·二叉树拓展】快速排序详解及应用
  • 蓝桥与力扣刷题(234 回文链表)
  • PHP代码审计学习02
  • Vue-data数据
  • WebSocket——netty实现websocket编码
  • JDK 8 的HashMap扩容源代码分析
  • 【自学笔记】GitHub的重点知识点-持续更新
  • 让万物「听说」:AI 对话式智能硬件方案和发展洞察
  • Ada语言的数据库交互
  • 《LLM大语言模型深度探索与实践:构建智能应用的新范式,融合代理与数据库的高级整合》
  • 一文了解硅基流动(SiliconCloud):有前景的大模型云服务平台
  • 为AI聊天工具添加一个知识系统 之83 详细设计之25 度量空间之2 知识树
  • Spring Boot框架下的单元测试
  • 3 Yarn
  • JAVA实战开源项目:学科竞赛管理系统(Vue+SpringBoot) 附源码
  • 我的AI工具箱Tauri版-ZoomImageSDXL全图超清放大TILE+SDXL
  • DOM 操作入门:HTML 元素操作与页面事件处理