源本科技 | 码上会

Nginx 配置

2026/05/19
1
0

引言

Nginx 的核心配置文件 nginx.conf 决定了服务的全局行为、连接处理、HTTP 服务、路由转发、负载均衡等所有核心功能。配置文件采用分层指令块结构,语法简洁且扩展性极强

整体结构

Nginx 配置采用层级嵌套结构,指令以分号 ; 结尾,指令块用 {} 包裹,遵循全局生效 > 局部覆盖的规则。核心层级从外到内依次为:

  • 全局块:全局生效,配置 Nginx 进程、用户、日志等基础参数

  • events 块:配置网络连接、事件模型,影响并发性能

  • http 块:HTTP 服务核心配置,可包含多个 server、upstream 块

  • upstream 块:定义后端服务器集群,实现负载均衡

  • server 块:定义虚拟主机,对应一个域名 / 端口服务

  • location 块:匹配请求 URL,定义路由处理规则


全局块

全局块位于配置文件最顶部,配置对整个 Nginx 实例生效的参数,无嵌套指令块。

核心配置

# 运行 Nginx 的用户/用户组
user nginx;
# 工作进程数,auto 表示自动匹配 CPU 核心数(最优配置)
worker_processes auto;
# 错误日志路径 + 日志级别(debug/info/warn/error/crit)
error_log /var/log/nginx/error.log info;
# Nginx 主进程 PID 文件存放路径
pid /var/run/nginx.pid;
# 单个进程最大打开文件数(高并发必备)
worker_rlimit_nofile 65535;

指令说明

  • user:指定 Nginx 运行权限,避免使用 root 用户提升安全性

  • worker_processes auto:官方推荐配置,性能最优

  • worker_rlimit_nofile:解决高并发下「too many open files」报错


events

events 块专门配置网络连接处理机制,是 Nginx 高并发的核心配置,仅能存在一个。

核心配置

events {
    # 单个 worker 进程支持的最大并发连接数
    worker_connections 10240;
    # 使用 epoll 事件驱动模型(Linux 高并发最优选择)
    use epoll;
    # 单个 worker 进程一次性接收所有新连接
    multi_accept on;
    # 关闭连接互斥锁(多核 CPU 建议关闭,提升性能)
    accept_mutex off;
}

指令说明

  • worker_connections:理论最大并发数 = worker 进程数 × 该值

  • use epoll:Linux 系统默认最优模型,无需手动修改

  • multi_accept on:单进程批量接受连接


http

http 是 Nginx 最核心的配置块,所有 Web 服务、代理、缓存、日志相关配置都在此定义,内部可嵌套多个 serverupstream

核心配置

http {
    # 引入 MIME 类型配置文件
    include       mime.types;
    # 默认文件类型
    default_type  application/octet-stream;
    # 自定义访问日志格式
    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;

    # 开启零拷贝技术,提升静态资源传输效率
    sendfile        on;
    # 网络数据包优化
    tcp_nopush      on;
    tcp_nodelay     on;
    # 长连接超时时间(秒)
    keepalive_timeout  65;
    # sendfile 单次传输最大数据块
    sendfile_max_chunk 100k;

    # 上游服务器集群(负载均衡)
    upstream backend_server {
        server 192.168.60.139:8080;
        server 192.168.60.139:8081 backup;
    }

    # 虚拟主机配置
    server {
        # 监听端口
        listen  80;
        # 绑定域名
        server_name localhost;

        # 路由匹配规则
        location / {
            proxy_pass http://backend_server;
        }
    }
}

upstream

upstream 块定义后端服务器集群,配合 proxy_pass 实现负载均衡,必须定义在 http 块内。

配置示例

upstream backend_server {
    # 负载均衡策略:默认轮询
    server 192.168.60.139:8080 weight=5;  # 权重轮询
    server 192.168.60.139:8081 backup;     # 备用服务器
    server 192.168.60.139:8082 down;       # 标记服务器下线
    # ip_hash;  # 开启 IP 哈希策略
    # least_conn; # 开启最少连接数策略
}

参数说明

  • weight:权重值,数值越大处理请求越多

  • backup:仅主服务器故障时启用

  • down:永久下线该服务器

  • 支持策略:轮询(默认)、权重轮询、IP 哈希、最少连接数


server

server 块定义虚拟主机,一个 http 块可配置多个 server,实现多域名 / 多端口独立部署。

核心配置

server {
    listen       80 default_server;  # 监听 80 端口,设为默认虚拟主机
    server_name  www.test.com test.com;  # 绑定多个域名
    charset utf-8;  # 默认字符集

    # 路由规则
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    # 自定义错误页面
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;
    }
}

location

location 块用于匹配客户端请求 URL,实现静态资源处理、请求转发、访问控制等功能,是最常用的路由配置。

匹配规则

  1. location = /url精确匹配,优先级最高

  2. location ^~ /url前缀匹配,不执行正则匹配

  3. location ~ /url区分大小写正则匹配

  4. location ~* /url不区分大小写正则匹配

  5. location /url普通前缀匹配

  6. location /通用匹配,优先级最低

配置示例

# 1. 精确匹配根目录
location = / {
    root   html;
    index  index.html index.htm;
}

# 2. 前缀匹配静态资源目录
location ^~ /static/ {
    alias /webroot/static/;  # alias:路径替换(与 root 不同)
}

# 3. 正则匹配静态文件
location ~* \.(gif|jpg|png|css|js)$ {
    root /webroot/static/;
    expires 7d;  # 静态资源缓存 7 天
}

# 4. 通用匹配,转发到后端服务 + IP 访问控制
location / {
    proxy_pass http://backend_server;
    deny 192.168.3.29;    # 禁止该 IP 访问
    allow 192.168.5.0/24; # 允许该网段访问
}

关键知识

  • root:路径拼接(请求 /static/img.png/webroot/static/static/img.png

  • alias:路径替换(请求 /static/img.png/webroot/static/img.png

  • 访问控制:先 deny 后 allow,顺序决定生效结果