Nginx 的配置文件结构非常清晰,采用**分层、块状(Block)**的结构

Nginx 的配置文件结构非常清晰,采用**分层、块状(Block)**的结构

通常主配置文件位于 /etc/nginx/nginx.conf,而具体的站点配置位于 /etc/nginx/conf.d//etc/nginx/sites-enabled/

我们将 Nginx 配置分为 五个核心层级 来详解:


一、 核心层级结构

# 1. 全局块 (Global)  
user  nginx;  
worker_processes  auto;  
  
events {  
    # 2. events块 (网络连接设置)  
    worker_connections  1024;  
}  
  
http {  
    # 3. http块 (全局Web参数)  
    include       mime.types;  
    default_type  application/octet-stream;  
  
    upstream myserver {  
        # 4. upstream块 (负载均衡配置)  
        server 127.0.0.1:8080;  
    }  
  
    server {  
        # 5. server块 (虚拟主机配置)  
        listen       80;  
        server_name  localhost;  
  
        location / {  
            # location块 (路由匹配)  
            root   html;  
            index  index.html;  
        }  
    }  
}  

二、 详细指令详解

1. 全局块 (Main)

主要设置影响 Nginx 服务器整体运行的配置。

  • user: 运行 Nginx 的用户(建议非 root 以保证安全)。
  • worker_processes: 工作进程数。通常设置为 CPU 核心数,或 auto
  • error_log: 全局错误日志路径。

2. events 块

影响 Nginx 与用户的网络连接。

  • worker_connections: 每个进程允许的最大并发连接数(总并发 = 进程数 × 此值)。

3. http 块 (核心部分)

处理 HTTP 请求的主要配置,支持嵌套多个 server

  • include: 引入其他配置文件(如 mime.types 告诉浏览器文件类型)。
  • sendfile on: 开启高效文件传输模式,显著提升静态资源读取速度。
  • keepalive_timeout: 连接超时时间。
  • gzip on: 开启 Gzip 压缩,减少网络带宽消耗。

4. server 块 (虚拟主机)

一个 server 块代表一个网站。

  • listen 80: 监听的端口。
  • server_name: 域名(如 www.example.com)。
  • ssl_certificate / ssl_certificate_key: 配置 HTTPS 证书路径。

5. location 块 (路由规则)

这是 Nginx 最灵活的地方,用于匹配特定的 URL。

  • 匹配优先级
    1. = /path:精确匹配。
    2. ^~ /path:前缀匹配,匹配后不再搜索正则。
    3. ~~*:正则匹配(区分/不区分大小写)。
    4. /:通用前缀匹配(最后保底)。

三、 常用功能配置示例

1. 反向代理 (最常用)

将请求转发到后端的应用服务器(如 Go、Java、Node.js)。

location /api/ {  
    proxy_pass http://127.0.0.1:8080; # 转发请求  
    proxy_set_header Host $host;      # 传递真实主机名  
    proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
}  

2. 负载均衡 (Load Balancing)

upstream backend_cluster {  
    server 192.168.1.10:80 weight=3; # 权重分配  
    server 192.168.1.11:80;  
    server 192.168.1.12:80 backup;   # 备用机  
}  
  
server {  
    location / {  
        proxy_pass http://backend_cluster;  
    }  
}  

3. 动静分离 (提高性能)

静态资源由 Nginx 直接处理,动态请求转发后端。

# 静态资源交给 Nginx  
location /static/ {  
    root /var/www/my_app;  
    expires 30d; # 设置缓存时间  
}  
  
# 动态请求交给后端  
location / {  
    proxy_pass http://localhost:5000;  
}  

4. HTTPS (SSL) 配置

server {  
    listen 443 ssl;  
    server_name example.com;  
  
    ssl_certificate /path/to/cert.pem;  
    ssl_certificate_key /path/to/key.pem;  
  
    # 强制 HTTP 跳转 HTTPS  
    error_page 497  https://$host$request_uri;  
}  

四、 常用管理命令

配置完成后,必须执行以下命令:

  1. 检查语法是否正确

    nginx -t  
    

    (非常重要!修改配置后必做,防止语法错误导致服务宕机)

  2. 平滑重载配置

    nginx -s reload  
    

    (不会中断当前已连接的用户,直接应用新配置)

  3. 查看状态(Linux 系统):

    systemctl status nginx  
    

五、 进阶优化建议

  1. 安全限制:使用 limit_connlimit_req 指令防止 DDoS 攻击和爬虫。
  2. 多配置文件:不要把所有网站写在 nginx.conf 里,利用 include /etc/nginx/conf.d/*.conf; 让每个站点拥有独立的配置文件。
  3. 日志分割:为每个虚拟主机配置独立的 access_log,方便后续排查问题。