Nginx 配置文件结构

Nginx 的配置是层级化(块嵌套)的文本:外层块定义全局行为,越往内层作用域越小。理解"指令 + 上下文"是看懂一切 Nginx 配置的前提。

配置文件的默认位置

发行版主配置站点/模块目录
Debian/Ubuntu/etc/nginx/nginx.conf/etc/nginx/conf.d/ 与 sites-available/ + sites-enabled/
CentOS/RHEL/etc/nginx/nginx.conf/etc/nginx/conf.d/

主配置里通常有一行 include,把 conf.d/ 下的 *.conf 合并进来,实现"一站点一文件"。

从外到内的四级块

Nginx 配置四级块结构 一个典型的 nginx.conf 自上而下是 main(全局)→ events → http → server → location:

worker_processes auto;              # main 级:worker 进程数

events {
    worker_connections 1024;        # events 级:单个 worker 的最大连接数
}

http {
    include       mime.types;       # 引入 MIME 类型映射文件
    default_type  application/octet-stream;
    sendfile      on;
    keepalive_timeout 65;

    server {                        # http 级:一个站点(虚拟主机)
        listen       80;
        server_name  example.com;
        location / {                # server 级:按 URI 分流的配置块
            root   /var/www/html;
            index  index.html;
        }
    }
}

指令上下文的概念

每个指令都只能在特定层级使用,放错层级 nginx -t 会直接报错。常见指令的合法上下文:

指令允许出现的块
worker_processesmain(主配置顶层)
worker_connectionsevents
upstream、gzip、proxy_cache_pathhttp
listen、server_name、rootserver(root 也允许 location)
proxy_pass、rewrite、try_fileslocation(部分也允许 server)

规律:指令能写在哪取决于它对谁生效——针对连接的写 events,针对站点的写 server,针对具体路径的写 location。

目录约定:conf.d 与 sites-enabled

Debian 系同时提供两种组织方式:

  • conf.d/*.conf:任何以 .conf 结尾的文件都会被主配置 include;
  • sites-available/ 存全部站点配置,sites-enabled/ 里放指向前者配置的软链接——启停站点就是增删软链接:
sudo ln -s /etc/nginx/sites-available/myblog /etc/nginx/sites-enabled/myblog
sudo nginx -t && sudo systemctl reload nginx

nginx -T:查看合并后的完整配置

include 层层展开后实际生效的配置长什么样?-T 会把整棵配置树打印到终端,排查"我改了怎么没生效"非常有用:

sudo nginx -T | less
# 输出:包含所有 include 进来的指令的完整配置

小结:Nginx 配置是"全局 → http → server → location"的嵌套结构;查配置按 nginx.conf → conf.d 的顺序,验证语法用 nginx -t,查看合并结果用 nginx -T。

笔记加载中…