模块介绍
若标记为商业
的模块需要订阅Nginx商业计划才能使用。
什么是模块(module)?
Nginx的模块设计原理基于一种高度模块化的架构,这使得它可以灵活地扩展和定制,以满足不同的需求每个模块提供特定的功能,并通过模块间的协作来构建完整的服务器功能。
通过这种模块化的设计原理,Nginx可以实现高性能、高扩展性的服务器功能。开发者可以通过编写自定义模块来定制Nginx的行为,满足各种不同的需求。 这也是Nginx成为一个广泛使用的Web服务器的重要原因之一。
什么是指令(directive)?
在 Nginx 配置文件中,"Directives"(指令)是用于配置服务器行为的关键词。每个指令告诉 Nginx 如何处理请求、设置服务器参数、定义虚拟主机等。指令可以在全局配置块、HTTP 块、Server 块和 Location 块中使用,以定制服务器的行为。
指令的基本结构是由指令名称和一个或多个参数组成。指令名称通常是以英文字母开头,并由大小写字母、数字和下划线组成。指令的参数是用来配置指令行为的值,可以是字符串、数字、布尔值等。指令的参数值可以用引号括起来,也可以不用引号。
什么是上下文(context)?
在 Nginx 配置文件中,每个配置块称为一个 "context"(上下文)。不同的 context 对应不同的配置部分,用于设置不同层次的配置信息。 context也是由各个模块提供的指令,只是接受的参数为块
。
以下是 Nginx 配置文件中常见的几个 context:
- main: 这是 Nginx 配置文件的最外层,包含全局性的配置信息,如 user、worker_processes 等。它是所有其他 context 的父级。
- events:这个context 包含有关事件处理模型的配置,如 worker_connections、use、multi_accept 等。
- http:这是配置 HTTP 服务器的上下文,包括 server 块和其他相关指令。在这个 context 中,可以配置 HTTP 服务器的全局性设置,如 server_name、listen 等。
- server:在 http 上下文内,可以包含多个 server 块,每个 server 块代表一个虚拟主机的配置。
- location:在 server上下文内,可以包含多个 location 块,用于配置不同 URI 路径的处理方式。
什么是内置变量(Embedded Variables)?
内置变量的名称通常以$
开头,后跟特定的变量名。不同模块都可能带有一些内嵌变量。 例如,$http_user_agent 表示请求的 User-Agent 标头。这些变量可以在不同的配置上下文中使用,如 location 块、server 块等。
以下是一些常见的嵌入式变量示例:
- $http_user_agent:客户端的 User-Agent 标头值。
- $remote_addr:客户端的 IP 地址。
- $server_name:服务器的名称。
- $request_uri:客户端请求的 URI。
- $args:客户端请求的查询参数部分。
- $host:客户端请求的主机名部分。
- $status:服务器响应的状态码。
基本数据类型
nginx配置都是指令紧跟值来实现配置,值的类型主要分为以下几种,nginx官网文档并没有基本数据类型的介绍, 以下数据类型来源于个人总结。
string
字符串是最常见的配置属性类型,可以用双引号包围,若存在特殊字符或中文最好用引号包围。
# 简单字符串可以不用引号
user root root;
server {
listen 8080;
location / {
# 存在中文
root "D:/我的网站";
}
}
2
3
4
5
6
7
8
9
10
number
表示数值,可以是整数或浮点数。
# 配置工作进场数量
worker_processes 8;
2
enum
取值只能是给定的枚举范围之一,比如布尔类型,在nginx中是使用on和off对应。
# 可选值 on/off
daemon off;
# 可选值 on/off/always
lingering_close on;
2
3
4
file
文件路径,若以/
开头表示绝对路径,否则表示nginx根目录的相对路径
# 错误日志文件默认配置路径
error_log logs/error.log;
# 使用绝对路径配置
error_log /var/logs/nginx/error.log
2
3
4
directory:
文件目录路径,若以/
开头表示绝对路径,否则表示nginx根目录的相对路径
location /absolute {
root /opt/web;
}
location /relative {
root relative;
}
2
3
4
5
6
7
size
一般表示容量大小,数字后面加单位k
、m
、g
、t
表示单位,不带单位表示字节(byte)。
client_max_body_size 1g;
time/interval
一般用于标识时间间隔或持续时长,数字后面加单位ms
、s
、m
、h
、d
。
keepalive_timeout 30s;
proxy_read_timeout 1m;
2
list
一般是空格分隔,表示接受一个或多个相同类型的参数
# 字符串类型列表
server_name abc.com cba.com nbc.com;
# 数字类型列表
error_page 500 502 503 504 /50x.html;
2
3
4
block
某些指令参数接受的一个特定的块配置,而不是基本参数类型,一般接受块为参数的指令称作context(上下文)。
# 简单块
http {
listen 8080;
server_name _;
# 第一个参数为字符串,第二个参数为块
location / {
root /opt/web;
}
}
2
3
4
5
6
7
8
9
10