Nginx详细使用说明

适配:CentOS / Ubuntu 生产环境,前端反向代理、后端接口转发、静态资源、负载均衡全覆盖。

特点:每一行配置都带详细字段解释,零基础也能看懂

[TOC]

一、Nginx 整体结构说明

Nginx 配置文件分为 4 大核心模块:

  1. 全局块(main):全局生效,进程、日志、连接数

  2. events 块:网络连接模型配置

  3. http 块:HTTP 服务全局配置(最核心)

  4. server 块:虚拟主机,一个域名一个 server

  5. location 块:匹配路由、转发、静态资源


二、完整可直接运行 Nginx 配置(带全字段注释)

# ====================== 1. 全局配置块 ======================
# 指定 Nginx 运行用户,默认 nginx / root
user  nginx;

# worker 进程数,一般设置为 CPU核心数
# auto 自动识别CPU核心数
worker_processes  auto;

# 错误日志路径 + 日志级别
# 级别:debug|info|notice|warn|error|crit
error_log  /var/log/nginx/error.log warn;

# PID 进程号文件存放路径
pid        /var/run/nginx.pid;

# ====================== 2. 事件模块 ======================
events {
    # 单个worker最大连接数
    worker_connections  1024;
    # 开启多路复用,提升并发性能
    use epoll;
    # 允许同时接受多个连接
    multi_accept on;
}

# ====================== 3. HTTP 全局模块 ======================
http {
    # 引入MIME类型文件,识别静态文件格式
    include       /etc/nginx/mime.types;

    # 默认文件类型
    default_type  application/octet-stream;

    # 开启高效文件传输模式
    sendfile        on;

    # 减少网络报文段数量,提升传输效率
    tcp_nopush     on;

    # 长连接超时时间,客户端多久不操作断开
    keepalive_timeout  65;

    # 开启gzip压缩,减少带宽占用
    gzip  on;
    gzip_min_length 1k;
    gzip_types text/plain text/css application/json application/javascript;

    # 日志格式定义
    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;

    # ====================== 4. 虚拟主机 Server ======================
    server {
        # 监听端口
        listen       80;

        # 绑定域名,多个域名空格隔开
        server_name  localhost 127.0.0.1;

        # 网站根目录
        root   /usr/share/nginx/html;

        # 默认首页文件
        index  index.html index.htm;

        # 开启目录浏览(可选)
        autoindex off;

        # ====================== 5. 路由匹配 Location ======================
        # 根路径匹配
        location / {
            # 优先尝试文件,再尝试目录,否则返回404
            try_files $uri $uri/ /index.html;
        }

        # 静态资源缓存配置
        location ~* \.(jpg|png|gif|js|css|ico)$ {
            # 缓存过期时间
            expires 7d;
            add_header Cache-Control "public";
        }

        # 接口反向代理示例
        location /api/ {
            # 转发后端真实接口地址
            proxy_pass http://127.0.0.1:8080/;

            # 以下为代理必须头部配置
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        # 错误页面定制
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}


三、逐模块详细字段解释(重点)

1、全局块字段解释

  • user nginx:指定运行Nginx的系统用户,权限隔离,生产不建议root

  • worker_processes auto:工作进程数,auto自动匹配CPU核心,核心越多并发越强

  • error_log 路径 级别:错误日志存储位置,warn级别只记录警告和错误

  • pid:记录Nginx主进程ID的文件,用于启停、重启

2、events 模块字段解释

  • worker_connections 1024:单个进程最大支持1024个并发连接

  • use epoll:使用Linux最高效IO多路复用模型,高并发必备

  • multi_accept on:一次性接收所有就绪连接,提升吞吐量

3、http 全局字段解释

  • include mime.types:引入文件类型对照表,让浏览器识别css/js/png等文件

  • default_type:未知文件默认当做二进制流下载

  • sendfile on:开启零拷贝文件传输,静态资源速度大幅提升

  • tcp_nopush on:攒够数据包再发送,减少网络开销

  • keepalive_timeout 65:长连接保持65秒,避免频繁握手

  • gzip on:开启压缩,文本类资源压缩60%以上

  • log_format main:定义访问日志的输出格式、字段

  • access_log:指定正常访问日志保存路径

  • include *.conf:加载conf.d下所有子配置,方便多站点管理

4、server 虚拟主机字段解释

  • listen 80:当前站点监听80端口

  • server_name:绑定域名,请求域名匹配谁就执行谁的server

  • root:网站静态资源根目录绝对路径

  • index:默认访问主页,按顺序匹配

  • autoindex:是否开启文件夹目录浏览(线上必须关闭)

  • error_page:指定错误码跳转页面

5、location 核心匹配规则 + 字段解释

5.1 location 匹配优先级(从高到低)

  1. = 精确匹配

  2. ^~ 前缀匹配

  3. ~ 正则区分大小写

  4. ~* 正则不区分大小写

  5. / 通用匹配

5.2 常用字段详解

  • try_files $uri $uri/ /index.html:解决Vue/React前端刷新404问题

  • expires 7d:静态文件浏览器缓存7天,减少重复请求

  • proxy_pass:反向代理核心,将请求转发到后端服务地址

5.3 代理头部字段逐行解释(面试必问)

  • proxy_set_header Host $host:把用户请求的域名传给后端

  • proxy_set_header X-Real-IP $remote_addr:传递真实客户端IP

  • proxy_set_header X-Forwarded-For:传递经过的所有代理IP

  • proxy_set_header X-Forwarded-Proto:传递http/https协议类型


四、Nginx 内置常用变量(工作高频)

  • $remote_addr:客户端真实IP

  • $host:当前访问域名

  • $uri:当前请求路由地址

  • $request:完整请求信息

  • $status:HTTP响应状态码 200/404/500

  • $http_user_agent:客户端浏览器/设备信息

  • $http_referer:请求来源地址


五、Nginx 常用命令(运维必备)

# 检查配置是否有误(修改配置必执行)
nginx -t

# 平滑重启(不中断业务)
nginx -s reload

# 停止 Nginx
nginx -s stop

# 查看 Nginx 版本
nginx -v

# 查看详细编译参数
nginx -V


六、常见业务场景模板

6.1 前端Vue项目部署配置

server {
    listen 80;
    server_name web.xxx.com;
    root /opt/web/dist;
    index index.html;

    # 解决刷新404
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 静态缓存
    location ~* \.(js|css|png|jpg|svg|ico)$ {
        expires 7d;
    }
}

6.2 后端接口反向代理配置

server {
    listen 80;
    server_name api.xxx.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


七、常见报错排查

  • 404:路径不对、root目录错误、try_files未配置

  • 502:后端服务没启动、端口不通、proxy_pass地址错误

  • 504:后端接口超时,可调整 proxy_timeout

  • 403:文件权限不足、目录不存在、selinux未关闭

posted @ 2026-08-20 14:46  零伍柒  阅读(1)  评论(0)    收藏  举报