nginx 配置文件初识全局块、events、http、server、location 的层级关系

Nginx 配置其实只有两类指令:

  1. 放在"某个块"里的块级指令;
  2. 直接写在顶层的全局指令。
    把全部配置想象成一个树形结构,根节点叫 main,往下依次分叉即可。下面用 1 张 ASCII 树 + 1 张极简示例,30 秒就能看懂层级关系。
  1. 层级树

main (全局)

├─ events { ... } ← 连接处理模型

└─ http { ... } ← HTTP 协议相关

├─ upstream { ... } ← 负载均衡池(可选)

├─ server { ... } ← 虚拟主机

│ ├─ location / { ... } ← URL 路由

│ ├─ location /api { ... }

│ └─ location ~ .php$ { ... }

└─ server { ... } ← 第二个虚拟主机

  1. 最小可运行示例
powershell 复制代码
# 1) 全局块 ------ 影响整个 Nginx 进程
user  nginx;            # 工作进程的运行用户
worker_processes auto;  # 自动按 CPU 核数启动进程
error_log  /var/log/nginx/error.log warn;
pid        /run/nginx.pid;

# 2) events 块 ------ 连接调度策略
events {
    worker_connections 1024;   # 每个 worker 最大并发连接
    use epoll;                 # Linux 下高效事件模型
}

# 3) http 块 ------ 所有 HTTP/HTTPS 服务共享的公共配置
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # 日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer"';
    access_log  /var/log/nginx/access.log  main;

    # 传输优化
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 65;

    # 4) server 块 ------ 一个虚拟主机
    server {
        listen       80;
        server_name  example.com;

        # 5) location 块 ------ URL 路由
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        location /api {
            proxy_pass http://127.0.0.1:8080;
        }
    }
}
  1. 牢记 3 句话

• 全局块、events、http 是"顶层文件"三大件;

• 一个 http 内可放 N 个 server,一个 server 内可放 N 个 location;

• 子块继承父块,子块同名指令覆盖父块。