Nginx 采用高度模块化的架构,核心功能由核心模块提供,而其他功能则通过各种模块实现。Nginx 的架构可以分为以下几个部分:

  • Master 进程: 主进程负责管理子进程的启动、停止和重新加载配置等工作。
  • Worker 进程: Worker 进程处理客户端的请求。每个 Worker 进程通常只处理一个客户端连接,这样可以提高并发性能。
  • 事件模块: Nginx 使用事件驱动模型处理网络事件,例如接受新连接、读取数据、发送数据等。事件模块可以基于 select、poll、epoll、kqueue 等机制实现。
  • HTTP 核心模块: 提供 HTTP 协议的基本功能,例如请求解析、响应生成、重定向、缓存等。
  • HTTP 动态模块: 提供动态内容的支持,例如 FastCGI、uWSGI、SCGI 等协议的代理和转发。
  • 反向代理模块: 提供反向代理功能,可以将请求转发给后端服务器。
  • 负载均衡模块: 提供负载均衡功能,可以根据不同的算法将请求分发给多个后端服务器。

配置文件结构

Nginx 配置文件一般包含全局配置和特定块的配置。全局配置位于 http 块之外,用于配置全局的 Nginx 行为。特定块的配置位于 http 块内,用于配置特定的服务、虚拟主机等.

  1. 全局块:包含了影响 nginx 服务器整体运行的指令。通常包括配置文件的基础设置和全局参数的定义。

  2. events 块:用于配置 nginx 处理连接的特性,如 worker 进程数和连接的限制等。

  3. http 块:包含了 HTTP 服务器配置指令,是大多数 nginx 配置的核心部分。可以包括多个 server 块,每个 server 块定义一个虚拟主机。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 全局配置
user nginx;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;

# events 块
events {
worker_connections 1024;
use epoll;
}


# HTTP 服务配置
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

# 服务器块配置
server {
listen 80;
server_name example.com;

location / {
root /var/www/html;
index index.html;
}
}
}

可以使用 include 指令包含其他的配置文件,使配置文件更加模块化和可维护。例如:

1
include /etc/nginx/conf.d/*.conf;

常见配置指令

以下是一些常用的 Nginx 配置指令列表:

  1. worker_processes: 设置 Nginx 主进程的工作进程数量。
  2. worker_connections: 设置每个工作进程允许的最大连接数。
  3. events: 配置 Nginx 事件模块,如工作进程数和连接数。
  4. http: 配置 HTTP 服务器模块。
  5. server: 定义虚拟主机(服务器块)。
  6. location: 定义 URI 匹配规则,处理请求的方式。
  7. listen: 指定服务器监听的 IP 地址和端口号。
  8. root: 指定服务器的根目录。
  9. index: 指定默认文档。
  10. error_page: 定义错误页面。
  11. access_log: 配置访问日志。
  12. error_log: 配置错误日志。
  13. include: 包含其他配置文件。
  14. if: 条件判断。
  15. rewrite: URL 重写。
  16. proxy_pass: 反向代理到后端服务器。
  17. proxy_set_header: 设置请求头。
  18. proxy_cache: 配置反向代理缓存。
  19. ssl_certificate: 指定 SSL 证书文件路径。
  20. ssl_certificate_key: 指定 SSL 证书的私钥文件路径。
  21. ssl_protocols: 指定支持的 SSL 协议版本。
  22. ssl_ciphers: 指定 SSL 加密算法。
  23. ssl_prefer_server_ciphers: 指定是否优先使用服务器端的 SSL 加密算法。
  24. ssl_session_cache: 配置 SSL 会话缓存。
  25. ssl_session_timeout: 配置 SSL 会话超时时间。
  26. gzip: 启用或禁用 Gzip 压缩。
  27. include: 包含其他配置文件。
  28. load_module: 加载动态模块。
  29. limit_req_zone: 定义限制请求的区域。
  30. limit_conn_zone: 定义限制连接数的区域

参考官方文档nginx指令查询