CentOS 系统 Nginx 完整部署详细文档(含原理+实战+排错)
一、文档概述
本文档适用于 CentOS 7 / CentOS 8 / CentOS 9 全系列系统,采用官方EPEL稳定源安装Nginx,无编译复杂度、生产环境零适配风险。全程包含环境准备、安装部署、命令详解、配置解析、三大核心实战场景、防火墙配置、日志排查、异常处理及卸载流程,所有配置均带详细注释和原理讲解,可直接用于测试及生产环境。
适用场景:静态网站部署、前后端分离项目部署、后端服务反向代理、HTTPS加密部署、端口转发、负载均衡基础场景。
二、环境前置说明
-
系统环境:CentOS 7(yum包管理器)、CentOS 8/9(dnf包管理器,兼容yum命令)
-
安装方式:EPEL官方扩展源安装(稳定、安全、自动适配系统依赖,优先推荐)
-
网络要求:服务器联网,可正常访问外网下载软件包
-
权限要求:全程使用root用户或拥有sudo最高权限用户操作
三、Nginx 正式安装(全系统适配)
3.1 CentOS 7 安装步骤
# 1. 安装EPEL扩展源(核心:CentOS默认官方源无Nginx,必须安装此源)
yum install epel-release -y

# 2. 刷新本地软件源缓存,确保识别最新软件包
yum makecache
# 3. 正式安装Nginx
yum install nginx -y(tip这里如果不存在这个nignx,那就换一个镜像源)
3.2 CentOS 8 / CentOS 9 安装步骤
直接启用
你的系统是 CentOS Stream 9,自带 AppStream 内置 nginx 模块,不用第三方源,直接执行下面命令:
启用 nginx 模块(任选一个版本,推荐 1.26 最新稳定版)
dnf module enable nginx:1.26 -y

安装nignx
dnf install nginx -y
四、Nginx 服务命令全集(带详细原理解释)
所有命令为生产环境标准用法,区分临时操作、永久操作、平滑重启、强制重启,规避业务中断风险。
# 1. 启动Nginx(临时启动,服务器重启后失效)
systemctl start nginx

# 2. 设置开机自启(永久生效,服务器重启自动运行Nginx)
systemctl enable nginx
# 3. 查看运行状态(查看进程是否存活、启动报错、运行日志)
systemctl status nginx
# 4. 停止Nginx服务(立即停止所有服务,断开所有连接)
systemctl stop nginx
# 5. 平滑重载配置【生产首选】 # 原理:不中断现有用户访问连接,仅加载新配置,无业务停机时间
nginx -s reload
# 6. 强制重启【禁止生产随意使用】 # 原理:强制终止所有进程、断开用户连接,重新启动服务,会造成短暂断服
systemctl restart nginx
# 7. 配置语法校验【修改配置后必执行】 # 原理:检测配置文件语法错误(缺分号、括号错位、路径错误等),精准定位报错行
nginx -t
# 8. 快速停止Nginx(强制终止进程)
nginx -s stop
# 9. 优雅停止Nginx(等待现有请求处理完毕后再关闭,温和退出)
nginx -s quit
安装验证 :启动服务后,访问服务器公网IP或本机 127.0.0.1,出现Nginx默认欢迎页面,即代表安装成功。
五、防火墙端口放行(外网访问必备)
CentOS默认开启firewalld防火墙,未放行端口时,外网无法访问网站,仅本机可访问,必须执行以下配置。
# 放行HTTP 80端口(普通网页访问端口)
firewall-cmd --add-service=http --permanent
# 放行HTTPS 443端口(加密网页访问端口,SSL证书必备)
firewall-cmd --add-service=https --permanent
# 重载防火墙规则,使配置永久生效
firewall-cmd --reload
# 查看所有已放行的服务/端口,确认配置生效
firewall-cmd --list-services
参数解释
--permanent:代表永久生效,不加此参数的配置仅临时生效,服务器重启或防火墙重载后配置失效。
六、Nginx 核心目录结构全解析
掌握目录结构是运维排错、配置管理的基础,所有核心文件作用如下:
# 1. 全局主配置文件(控制Nginx整体运行参数)
/etc/nginx/nginx.conf
# 2. 站点独立配置目录【核心推荐目录】
# 规则:该目录下所有 .conf 后缀文件会被Nginx自动加载,用于拆分多站点配置 /etc/nginx/conf.d/
# 3. 默认网站静态资源根目录(默认欢迎页存放路径)
/usr/share/nginx/html/
# 4. 全局日志目录(所有网站访问、错误日志汇总)
/var/log/nginx/ access.log
# 全局访问日志(记录所有用户访问记录)
error.log
# 全局错误日志(记录服务启动、运行报错)
# 5. Nginx可执行程序文件
/usr/sbin/nginx
# 6. 临时缓存、运行资源目录
/var/lib/nginx/
# 7. 系统服务注册文件(开机自启依赖文件)
/usr/lib/systemd/system/nginx.service
七、主配置文件 nginx.conf 逐行注释详解
路径:/etc/nginx/nginx.conf,为Nginx全局核心配置,控制所有站点通用规则,以下为默认完整带注释版本:
# 定义Nginx工作进程数,auto代表自动适配服务器CPU核心数(最优配置)
worker_processes auto;
# 全局错误日志存储路径、日志级别
error_log /var/log/nginx/error.log;
# 记录Nginx进程PID文件路径,用于进程管理
pid /run/nginx.pid;
# 加载Nginx扩展模块配置
include /usr/share/nginx/modules/*.conf;
# 事件模块:控制网络连接参数 events { # 单个工作进程最大支持连接数 worker_connections 1024; }
# HTTP全局模块:所有网站共用配置
http { # 定义日志输出格式,记录访客IP、访问时间、请求地址、状态码、浏览器信息等 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
# 全局访问日志调用上述定义的main格式
access_log /var/log/nginx/access.log main; sendfile on;
# 开启高效文件传输模式,提升静态资源访问速度
tcp_nopush on;
# 优化网络数据包传输效率
tcp_nodelay on;
# 关闭延迟发送,提升响应速度
keepalive_timeout 65;
# 长连接超时时间,65秒无请求自动断开连接
types_hash_max_size 4096;
# 拓展文件类型哈希表大小,提升解析效率
include /etc/nginx/mime.types;
# 加载文件类型映射(识别html、css、图片等资源)
default_type application/octet-stream;
# 默认文件解析类型 # 自动加载conf.d目录下所有站点配置(多站点核心)
include /etc/nginx/conf.d/*.conf; }
重要原则 :主配置文件仅修改全局参数,所有站点、业务配置全部放在 conf.d 目录,避免主配置臃肿、出错难排查。
八、实战一:静态网站部署(Vue/HTML/单页项目)
适用于纯静态页面、Vue/React打包后的dist项目,解决单页路由刷新404问题,附带静态资源缓存优化。
8.1 创建网站目录
# 创建网站资源存放目录
mkdir -p /home/www/web
将前端打包后的所有文件(dist内文件)上传至 /home/www/web 目录。
8.2 新建站点配置文件
新建配置:/etc/nginx/conf.d/web.conf
server { listen 80; # 监听80端口,HTTP默认端口
server_name 你的域名; # 填写服务器域名或公网IP
root /home/www/web; # 网站资源根目录
index index.html index.htm; # 默认访问首页文件
# 单独配置站点日志,区分全局日志,方便排查单站问题 access_log /var/log/nginx/web_access.log; error_log /var/log/nginx/web_error.log;
# 核心配置:解决Vue/React单页应用刷新404问题
location / { try_files $uri $uri/ /index.html; }
# 静态资源缓存优化,减轻服务器压力,提升访问速度 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 30d; # 资源缓存30天 add_header Cache-Control "public"; } }
8.3 生效配置
# 校验配置语法 nginx -t # 平滑重载生效 nginx -s reload
九、实战二:后端服务反向代理(Java/Node/Python)
适用于SpringBoot、Node、Python等后端项目,通过Nginx统一接收外网请求,转发至本地后端服务,隐藏后端端口、提升安全性。
9.1 新建代理配置
新建配置:/etc/nginx/conf.d/api.conf
server { listen 80;
server_name 你的API域名; # 所有请求转发至本地8080端口的后端服务
location / { proxy_pass http://127.0.0.1:8080; # 传递真实客户端信息给后端(核心,否则后端获取不到真实IP)
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; } }
9.2 配置生效
nginx -t nginx -s reload
常见问题:502 Bad Gateway 代表后端服务未启动、端口填写错误或端口被占用。
十、日志查看与问题排查方法
10.1 实时查看访问日志
tail -f /var/log/nginx/access.log
10.2 实时查看错误日志(排错核心)
tail -f /var/log/nginx/error.log
10.3 常见报错汇总及解决方案
-
外网无法访问网站:防火墙未放行80/443端口,重新执行防火墙放行命令
-
nginx -t 语法报错:配置文件缺分号、大括号不匹配、路径错误,根据提示行号修改
-
页面刷新404 :单页项目未配置
try_files规则,补充静态站点核心配置 -
502 Bad Gateway:反向代理的后端服务未启动、端口错误、服务崩溃
-
403 Forbidden:网站目录权限不足、index首页文件不存在
十一、Nginx 卸载完整流程
11.1 CentOS7 卸载
yum remove nginx -y rm -rf /etc/nginx /var/log/nginx
11.2 CentOS8/9 卸载
dnf remove nginx -y rm -rf /etc/nginx /var/log/nginx
删除残留配置和日志,确保卸载干净,无残留文件影响后续重装。
十二、生产环境核心注意事项
-
所有业务配置统一放在
conf.d目录,禁止直接修改主配置文件,便于后期维护和迁移。 -
修改配置后必须执行 nginx -t 校验,确认无报错后再重载,避免服务启动失败。
-
生产环境优先使用
nginx -s reload平滑重启,禁止随意使用restart强制重启。 -
多站点部署时,每个站点独立创建conf配置文件,互不干扰,排错更精准。
-
定期清理Nginx日志文件,避免日志过大占用服务器磁盘空间。
-
开启HTTPS后,关闭老旧不安全的SSL协议,提升网站安全等级。
