Nginx配置文件是分层嵌套结构,全局块最外层,events和http为其子块,http块再嵌套server、location等;配置须严格遵循层级与顺序,否则启动报错。

Nginx 配置文件的结构是分层嵌套的,全局块(main context)和主模块(即 http 块)不是并列关系,而是包含关系:全局块在最外层,events 和 http 都属于它的直接子块;而 http 块才是承载 Web 服务功能的“主模块”,它内部再嵌套 server、location 等。
配置时不能把它们混写或错放层级,否则 Nginx 启动会报错。下面按实际生效顺序说明怎么正确配置:
全局块配置要点
这是整个 nginx.conf 的顶层区域,不被任何 { } 包裹,所有指令都直接影响 Nginx 主进程行为:
指定运行用户和组
user nginx nginx;
安全起见,不要用 root;确保该用户对静态资源目录有读权限,对日志路径有写权限。设置工作进程数
worker_processes auto;
推荐用auto,Nginx 会自动识别 CPU 核心数;若需固定,可写具体数字(如2),但不宜超过物理核心数。定义错误日志与级别
error_log /var/log/nginx/error.log warn;
级别从低到高:debug>info>notice>warn>error>crit>alert>emerg;生产环境常用warn或error。指定 PID 文件路径
pid /var/run/nginx.pid;
这个文件用于nginx -s reload或系统服务管理,路径需确保 nginx 用户可写。(可选)限制单进程打开文件数
worker_rlimit_nofile 65535;
需配合系统 ulimit 设置,否则可能被内核限制。
HTTP 主模块配置要点
http 块是真正处理 HTTP 请求的核心容器,必须放在全局块之后、events 块之后(顺序不可颠倒):
引入 MIME 类型定义
include /etc/nginx/mime.types;
让 Nginx 能根据后缀自动设置Content-Type,比如.js→application/javascript。设定默认响应类型
default_type application/octet-stream;
当无法匹配 MIME 类型时兜底使用,一般不用改。启用高效文件传输
sendfile on;
利用内核 zero-copy 提升静态文件(如图片、CSS)发送性能,Linux 下建议开启。配置长连接超时
keepalive_timeout 65;
单位秒;客户端复用 TCP 连接的时间,设太短增加握手开销,太长占用 worker 连接数。-
定义日志格式与访问日志路径
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; 引入虚拟主机配置
include /etc/nginx/conf.d/*.conf;
把不同站点的 server 配置拆到独立文件里,便于维护;注意路径要存在且文件权限允许 nginx 读取。
注意事项
- 全局块中不能出现
server、location、upstream等指令,这些只允许出现在 http 或其子块中。 - events 块必须在全局块内、http 块之前,顺序错误会导致解析失败。
- 所有块结束都要用
},缩进不是语法要求但强烈建议,避免括号错位。 - 修改后务必执行
nginx -t检查语法,再nginx -s reload生效,不要直接 kill 进程。
不复杂但容易忽略。


















