nginx.conf 由全局块、http 块、server 块和 location 块四层嵌套构成:全局块配置进程参数;http 块定义 Web 服务基础;server 块配置虚拟主机;location 块实现 URL 精细路由,修改后须用 nginx -t 检查并 reload 生效。

nginx.conf 是 Nginx 的核心配置文件,结构清晰但层级敏感,修改前必须理解其块(block)嵌套逻辑和指令作用域,否则容易导致服务启动失败或配置不生效。
全局块(main context):影响整个 Nginx 进程
位于文件最外层,不被任何花括号包裹。主要设置工作进程、用户权限、日志路径、事件模型等基础运行参数。
-
user 指定 worker 进程运行的系统用户和组,如
user www-data;;生产环境避免用 root -
worker_processes 建议设为
auto,自动匹配 CPU 核心数;单核服务器可设为 1 -
error_log 定义错误日志路径与级别,如
error_log /var/log/nginx/error.log warn; - events 块虽独立,但属于全局上下文,用于配置连接处理模型(如 use epoll)和最大并发连接数(worker_connections)
http 块:Web 服务的核心配置区域
所有与 HTTP 协议相关的配置都放在 http { ... } 内,它不能嵌套在其他块中,且只能出现一次。内部可包含多个 server 块,也可定义共享变量、缓存、MIME 类型等。
- include mime.types; 加载标准 MIME 映射,确保静态资源正确返回 Content-Type
- sendfile on; 启用内核零拷贝,提升静态文件传输效率
- keepalive_timeout 控制长连接超时时间,默认 75 秒,高并发场景可适当调低(如 30)
- gzip on; 开启 Gzip 压缩,配合 gzip_types 指定压缩的 MIME 类型(如 text/css, application/json)
server 块:定义一个虚拟主机(站点)
位于 http 块内,每个 server 对应一个监听地址+端口+域名组合。Nginx 通过 server_name 和 listen 指令匹配请求。
-
listen 必须明确指定端口,如
listen 80;或listen 443 ssl http2;;HTTPS 需额外配置证书路径 -
server_name 支持精确匹配、通配符(
*.example.com)和正则(~^www\d+\.example\.com$),注意优先级规则 - root /var/www/html; 设定该站点根目录;location 中可用 alias 替代,二者行为不同(alias 不拼接路径)
- location /api/ { proxy_pass http://backend; } 是反向代理典型写法,注意 proxy_pass 末尾斜杠对路径重写的决定性影响
location 块:精细化 URL 路由控制
嵌套在 server 或其他 location 中,按匹配顺序和优先级(=、^~、~、~*、/)决定执行哪个块。匹配成功即停止搜索(除非使用 last 或 break)。
- = / 表示精确匹配根路径,优先级最高,适合快速响应首页
- ^~ /static/ 表示前缀匹配且非正则,匹配成功后不再检查正则 location,适合静态资源加速
- ~ \.(js|css|png)$ 正则匹配,区分大小写;用 ~* 可忽略大小写
- try_files $uri $uri/ /index.html; 常用于 SPA 应用,实现前端路由 fallback
修改 nginx.conf 后务必执行 nginx -t 检查语法,确认无误再 nginx -s reload 生效。配置变更不重启主进程,但会平滑切换 worker。多实例部署时注意各 server 的 listen 端口和 server_name 不冲突。

















