Nginx的核心核心在于配置文件,默认安装后的nginx.conf是服务的总控配置文件,决定了Nginx的进程运行、日志记录、网络连接、请求处理、站点映射等所有核心能力。很多新手运维人员初次接触Nginx时,面对满屏配置参数无从下手

本文将基于Rocky Linux系统默认的纯净版Nginx主配置(过滤注释、空行后的完整配置),逐行拆解每一条配置的作用、含义与生产场景意义,帮大家彻底吃透Nginx主配置文件的核心逻辑。

先附上本次解析的纯净版主配置文件

[root@rocky nginx ]# grep -Ev "#|^$" nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    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;
    keepalive_timeout   65;
    types_hash_max_size 4096;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;
        include /etc/nginx/default.d/*.conf;
    }
}
​

Nginx配置文件整体分为四大核心模块:全局配置块、events连接块、http协议块、server虚拟主机块,下面按模块逐行深度解析

一、全局配置块(全局生效,控制Nginx整体进程)

全局块配置不属于任何花括号区域,作用于整个Nginx服务,主要定义进程运行用户、进程数量、日志、PID文件、模块引入等基础全局属性。

1 user nginx;

定义Nginx 工作进程的运行用户,安装二进制程序默认使用系统自带的nginx普通用户。

[root@rocky nginx ]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8452/nginx: master
​

生产意义:Nginx禁止以root用户运行工作进程,通过普通用户降权,有效避免权限过高引发的安全风险,保障服务器安全。无需手动修改,默认配置即可满足绝大多数场景。

2. worker_processes auto;

指定Nginx的工作进程数量,auto为自适应模式,Nginx会自动识别服务器CPU核心数,匹配最优进程数(核心数=进程数)。

[root@rocky nginx ]# nproc
2
--->: /etc/nginx
[root@rocky nginx ]# grep worker_processes nginx.conf
worker_processes auto;
--->: /etc/nginx
[root@rocky nginx ]# pstree -p |grep nginx
           |-nginx(8452)-+-nginx(8453)
           |             `-nginx(8454)

生产意义:Nginx是多进程模型,主进程负责管理,工作进程负责处理实际用户请求。自适应配置可最大化利用CPU性能,避免进程过多造成资源抢占,或进程过少导致并发能力不足。

3. error_log /var/log/nginx/error.log notice;

定义Nginx错误日志的存储路径和日志级别。

  • 日志路径:/var/log/nginx/error.log,所有服务报错、异常信息都会写入该文件;

  • 日志级别:notice,属于中等日志级别,仅记录重要提示、异常、错误信息,不会记录冗余调试日志。

常用日志级别优先级(从低到高):debug > info > notice > warn > error > crit,生产环境一般使用notice或warn,兼顾排错需求和磁盘空间占用。

[root@rocky nginx ]# grep error_log nginx.conf
error_log /var/log/nginx/error.log notice;
--->: /etc/nginx
[root@rocky nginx ]# cat /var/log/nginx/error.log
2026/07/01 19:34:46 [notice] 8450#8450: using the "epoll" event method
2026/07/01 19:34:46 [notice] 8450#8450: nginx/1.26.3
2026/07/01 19:34:46 [notice] 8450#8450: OS: Linux 6.12.0-211.22.1.el10_2.x86_64
2026/07/01 19:34:46 [notice] 8450#8450: getrlimit(RLIMIT_NOFILE): 1024:524288
2026/07/01 19:34:46 [notice] 8452#8452: start worker processes
​

4. pid /run/nginx.pid;

指定Nginx主进程PID文件的存储路径。

该文件仅存储Nginx主进程的进程ID,

[root@rocky nginx ]# grep pid nginx.conf
pid /run/nginx.pid;
--->: /etc/nginx
[root@rocky nginx ]# cat /run/nginx.pid
8452
--->: /etc/nginx
[root@rocky nginx ]# pstree -p |grep nginx.conf
--->: /etc/nginx
[root@rocky nginx ]# pstree -p |grep nginx
           |-nginx(8452)-+-nginx(8453)
           |             `-nginx(8454)
​

系统通过该文件实现Nginx的启动、停止、重启、重载配置等操作,是服务进程管理的核心文件,禁止删除和修改。

5. include /usr/share/nginx/modules/*.conf;

批量引入Nginx官方扩展模块的配置文件,加载/usr/share/nginx/modules/目录下所有后缀为.conf的模块配置。

生产环境:Nginx的第三方模块、功能扩展模块配置统一存放于此,通过全局引入实现模块一键生效,无需手动写入主配置文件,保证主配置简洁易维护。

[root@rocky nginx ]# grep "include /usr/share/" nginx.conf
include /usr/share/nginx/modules/*.conf;
--->: /etc/nginx
[root@rocky nginx ]# ls /usr/share/nginx/modules/
--->: /etc/nginx
[root@rocky nginx ]#
​

二、events连接块(控制网络并发连接属性)

events块是Nginx并发能力的核心配置,专门定义客户端与服务器的网络连接规则,直接决定Nginx的最大并发承载能力。

events {
    worker_connections 1024;
}

worker_connections 1024;

定义单个Nginx工作进程支持的最大并发连接数,默认值1024。

整台服务器的最大并发数 = 工作进程数 × 单个进程最大连接数。默认配置下,多核服务器可支持数千并发连接,完全满足小型网站、测试环境、企业内部服务的使用需求。高并发生产场景可按需调大至10240等数值。

三、http协议块(核心业务配置,管控所有HTTP请求)

http块是Nginx最核心的配置区域,管控所有HTTP/HTTPS请求的处理规则,包含日志格式、文件传输、超时时间、资源类型、子配置引入、虚拟主机等所有业务配置。

1. log_format main 日志格式定义

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

自定义名为main的访问日志格式,定义每条访问日志需要记录的字段,是运维排查请求异常、统计访问量的核心依据,各参数含义如下:

  • $remote_addr:客户端真实IP地址;

  • $remote_user:客户端认证用户名(无认证则为空);

  • $time_local:服务器本地请求时间;

  • $request:客户端请求方式、请求地址、HTTP协议版本;

  • $status:请求响应状态码(200、404、500等);

  • $body_bytes_sent:响应客户端的文件字节大小;

  • $http_referer:请求来源页面(防盗链、流量统计核心参数);

  • $http_user_agent:客户端设备、浏览器标识;

  • $http_x_forwarded_for:代理转发后的真实客户端IP(反向代理场景必备)。

2. access_log /var/log/nginx/access.log main;

指定访问日志存储路径与调用格式。表示将所有客户端正常访问请求,按照上方定义的main格式,写入/var/log/nginx/access.log文件。

3. sendfile on;

开启Linux系统sendfile零拷贝传输机制。默认关闭,生产环境默认开启。

作用:跳过用户态与内核态的数据拷贝流程,直接在内核态完成文件传输,大幅提升静态文件(图片、视频、静态页面)的传输效率,降低CPU资源消耗。

4. tcp_nopush on;

开启TCP推送优化功能,需配合sendfile on使用。

作用:Nginx不会零散发送数据包,会将多个小数据包合并为一个完整数据包统一推送,减少网络IO次数,提升网络传输吞吐量,优化高并发场景下的请求响应速度。

5. keepalive_timeout 65;

定义HTTP长连接超时时间,单位秒。

含义:客户端与服务器建立连接后,65秒内无新请求则自动断开连接。长连接可避免频繁建立、断开TCP连接的资源消耗,65秒是官方最优默认值,适配绝大多数网站业务。

6. types_hash_max_size 4096;

设置MIME类型哈希表的最大存储空间,默认4096。

作用:Nginx会将文件后缀与资源类型的映射关系存入哈希表,该参数用于优化哈希查询效率,加快文件资源类型匹配速度,提升请求处理效率。

7. include /etc/nginx/mime.types;

引入MIME资源类型配置文件。该文件定义了数百种文件后缀对应的HTTP资源类型(如html、jpg、png、js、css等),让浏览器可以正确识别、解析服务器返回的文件资源。

8. default_type application/octet-stream;

定义默认资源类型。当请求的文件后缀无法匹配MIME类型时,默认以二进制流形式返回给客户端,浏览器会自动触发文件下载,避免未知文件直接乱码展示。

9. include /etc/nginx/conf.d/*.conf;

批量引入conf.d目录下所有站点配置文件,这是Nginx多站点管理的核心设计。

生产规范:主配置文件仅保留全局通用配置,所有独立站点的server虚拟主机配置,全部拆分存放于conf.d目录,实现配置解耦,便于多站点维护、迁移和排查问题。

四、server虚拟主机块(站点具体访问配置)

server块是单个网站站点的核心配置,用于定义站点的监听端口、域名、网站根目录等访问规则,当前为Nginx默认的默认站点配置。

server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /usr/share/nginx/html;
    include /etc/nginx/default.d/*.conf;
}

1. listen 80;

监听IPv4协议的80端口,80是HTTP协议默认端口,客户端通过http://IP即可直接访问站点,无需携带端口号。

2. listen [::]:80;

监听IPv6协议的80端口,开启IPv6访问支持,适配当前主流的双栈网络环境,让IPv6用户也能正常访问网站。

3. server_name _;

定义站点绑定的域名,_为默认匹配符,代表默认虚拟主机。

作用:当客户端访问的域名未匹配到服务器上任何自定义站点时,全部由该默认站点响应,通常用于拦截无效域名请求、展示默认首页。

4. root /usr/share/nginx/html;

定义网站根目录,即站点静态资源的存放路径。客户端访问网站时,Nginx会默认从该目录下读取index.html默认首页文件并返回。

5. include /etc/nginx/default.d/*.conf;

引入默认站点的扩展配置文件,该目录下的配置会作用于默认站点,用于补充默认页面的跳转、错误页面定制、缓存规则等拓展能力。

五、配置整体总结与运维建议

1. 配置层级清晰:Nginx主配置严格遵循「全局→连接→协议→站点」的层级逻辑,由宏观全局规则逐步细化到单个站点访问规则,结构清晰、各司其职;

2. 模块化设计:通过大量include指令拆分配置,避免主配置文件臃肿,符合生产运维规范化要求,便于多站点、多模块管理;

3. 默认配置适配性强:官方默认配置兼顾性能与稳定性,小型业务可直接使用,中大型业务仅需针对性优化并发数、超时时间、日志级别、缓存规则等参数;

4. 运维核心习惯:修改配置后务必执行nginx -t 校验配置语法,无误后执行 nginx -s reload 平滑重载配置,避免服务中断.

 

更多推荐