nginx主配置文件nginx.conf采用严格层级结构,分为main全局块、events连接块、http协议块三大核心部分,其中server和location为http块内嵌套的虚拟主机与路径路由模块。

Nginx 主配置文件(nginx.conf)不是一堆指令的简单堆砌,而是一个有严格层级和职责划分的“指挥系统”。理解它,关键不是记住每行怎么写,而是看清每个块“管什么、在哪用、为什么不能乱放”。
main 全局块:Nginx 的启动参数与运行环境
这是整个配置的顶层,所有其他块都嵌套在它之下。它不处理请求,只决定 Nginx 自身怎么跑。
- user nginx; 指定 worker 进程以哪个系统用户身份运行,关系到文件读取权限和安全性
- worker_processes auto; 让 Nginx 自动匹配 CPU 核心数,比写死数字更适应不同服务器
-
pid /run/nginx.pid; 记录主进程 ID,是执行
nginx -s reload或systemctl reload nginx的依据 -
error_log /var/log/nginx/error.log warn; 错误日志路径和级别,生产环境建议设为
warn或error,避免日志爆炸
events 块:专管连接怎么接、怎么分发
它和 http 块同级,但功能完全独立——只负责“网络连接层”,不碰 HTTP 协议内容。
-
worker_connections 10240; 每个 worker 进程最多同时处理多少连接,配合
worker_processes决定理论并发上限 -
use epoll; Linux 下推荐的高性能事件模型,Windows 环境需改用
select - multi_accept on; 允许单次事件通知中接收多个新连接,提升高并发时的响应效率
http 块:HTTP 服务的总控中心
所有跟 Web 服务直接相关的能力都在这里定义,比如静态文件、反向代理、SSL、压缩、缓存等。它是真正“干活”的核心区域。
- 必须包含 include mime.types; 和 default_type,否则浏览器可能无法正确识别 CSS、JS 等资源类型
- sendfile on; 启用内核零拷贝,大幅提升静态文件传输性能
- gzip on; 开启 Gzip 压缩,减小文本类响应体体积,但注意不要对图片、视频等已压缩格式再压
- 所有 server 块都必须写在 http 块内部,不能放在 events 或 main 里
server 与 location:从域名到路径的两级路由
server 块定义一个虚拟主机(即一个站点),location 块则在其内部进一步细分 URL 路径的处理逻辑。
-
server_name example.com www.example.com; 支持多个域名,空格分隔;泛域名用
*.example.com -
location /api/ { proxy_pass http://backend; } 表示所有以
/api/开头的请求都转发给后端服务 - location 匹配有优先级:精确匹配(
=)> 长前缀匹配(^~)> 正则匹配(~或~*)> 普通前缀匹配 - location 不能脱离 server 存在,就像房间不能脱离房子单独建在地上











