NGINX工具讲解
前言
本篇文章适合纯小白,新手参考学习
Nginx(发音 "engine x")是一款高性能、轻量级的 HTTP 服务器、反向代理服务器和负载均衡器。凭借 高并发、低内存占用、稳定性强 的核心优势,它已成为互联网架构中的核心组件 ------ 无论是中小型网站的静态资源服务,还是大型分布式系统的反向代理与负载均衡,Nginx 都能轻松胜任。
本文将从基础概念、安装配置、核心功能到实战场景,带你学习 Nginx。
一、Nginx 核心优势与应用场景
1.1 为什么选择 Nginx?
相比 Apache、IIS 等传统服务器,Nginx 的核心优势集中在「性能」和「灵活性」:
- 高并发支持:单台服务器可轻松支撑 10 万 + 并发连接(Apache 通常仅能支撑数千级),核心原因是 Nginx 采用「事件驱动(epoll)」模型,而非传统的「多进程 / 多线程」模型,资源占用极低。
- 多核心功能:集静态资源服务、反向代理、负载均衡、动静分离、SSL 终结、缓存等功能于一体,无需额外部署其他组件。
- 跨平台与稳定性:支持 Linux、Windows、FreeBSD 等系统,运行时内存占用通常在几 MB 到几十 MB,7x24 小时运行故障率极低。
- 配置简单灵活:配置文件语法清晰,支持动态加载配置(无需重启服务),可快速适配不同业务场景。
1.2 典型应用场景
- 静态资源服务器:直接提供 HTML、CSS、JavaScript、图片、视频等静态文件(最常用场景,性能远超 Apache)。
- 反向代理:隐藏后端业务服务器 IP,将用户请求转发至后端服务(如 Java Spring Boot、Python Django 应用),实现请求隔离与安全防护。
- 负载均衡:将高并发请求分发至多台后端服务器,避免单台服务器过载,提升系统可用性与吞吐量。
- 动静分离:静态资源(图片、CSS)由 Nginx 直接处理,动态请求(接口调用、数据查询)转发至后端应用服务器,减少后端压力。
- SSL 终结:统一处理 HTTPS 证书解密,后端服务无需关心 SSL 协议,降低后端复杂度。
- 缓存加速:缓存后端高频访问的响应结果,下次请求直接返回缓存数据,提升响应速度。
- 限流与防盗链:限制单 IP 访问频率,防止恶意请求;禁止第三方网站盗用自身静态资源(如图片、视频)。
二、安装NGINX
nginx官方参考文档:nginx 文档
2.1方法一:yum/dnf安装
前提条件:保证仓库配置完成,可参考《学习Linux------软件管理》中仓库相关内容,使用命令dnf install -y nginx进行一键式安装。
当显示Complete时,表示完成安装,如下图所示:

Installed:后续表示安装了以下三个内容
nginx:nginx 主程序(x86_64 架构,版本 2:1.20.1-22.el9)nginx-core:nginx 的核心功能组件(和主程序版本一致)nginx-filesystem:nginx 需要的目录 / 文件权限配置(noarch 表示 "不区分架构")
2.2方法二:使用rpm进行安装(适合定制化)
安装依赖包:dnf install gcc-c++ pcre-devel zlib-devel openssl-devel -y

从官网下载地址选择自己需要的包,右键复制内容nginx: download
本篇内容使用的1.28.0:https://nginx.org/download/nginx-1.28.0.tar.gz,

使用命令:wget https://nginx.org/download/nginx-你自己的版本号.tar.gz,通过ls命令我们发现已经获取压缩包nginx-1.28.0.tar.gz
进行解压到指定目录,并开始编译配置nginx模块(自定义内容)
使用tar -zxf nginx-1.28.0.tar.gz -C /usr/local/ && cd /usr/local/nginx-1.28.0命令进行解压到指定目录,并切换到那个目录。

bash
#创建nginx用户(安全需要,可选择,如果没有下面的配置中需取消用户相关内容)
groupadd nginx # 创建 nginx 用户组
useradd -g nginx -s /sbin/nologin -M nginx # 创建 nginx 用户(-s 禁止登录,-M 不建家目录,更安全)
「最小权限隔离 + 安全防护」 ------ 简单说就是不让 Nginx 用最高权限(root)运行,避免漏洞被利用后危害整个系统,从操作者视角拆解具体作用:
- 避免 root 权限泄露(最核心安全作用)
- 若不创建专属用户,Nginx 会默认用
root用户运行(系统最高权限);- 一旦 Nginx 出现漏洞(比如被黑客通过恶意请求攻击),黑客就能获得
root权限,直接操控整个服务器(删文件、偷数据、植入病毒等);- 创建
nginx用户后,在配置文件中指定user nginx;,Nginx 进程就会以「低权限用户」运行,即使被攻破,黑客也只能操作nginx用户有权限的文件(比如网站静态资源),无法触及系统核心文件(如/etc/passwd、/usr/sbin等)。2. 控制文件访问权限(避免误操作 / 越权)
- Nginx 运行时需要读取网站文件(HTML/CSS/JS)、配置文件,写入日志文件;
- 给
nginx用户分配「仅必要权限」:比如只让它可读网站根目录(/usr/share/nginx/html)、可写日志目录(/var/log/nginx),无权修改系统其他目录;- 好处:
- 防止 Nginx 进程误删 / 篡改系统文件;
- 避免网站文件被其他用户(比如普通登录用户)随意修改(只需把网站文件的所有者设为
nginx,其他用户无写入权限)。
- 符合「最小权限原则」(运维规范)
- 服务器运维的核心安全原则:「程序只给完成工作必需的权限,不多给一分」;
- Nginx 作为 Web 服务,不需要
root权限的任何功能(比如修改系统配置、管理其他进程),用低权限的nginx用户完全能满足需求;- 生产环境中,所有服务(Nginx、MySQL、PHP 等)都应该创建专属用户运行,互不干扰,即使一个服务出问题,也不会影响其他服务。
4. 便于日志 / 进程管理(运维实用价值)
- 查看 Nginx 进程时,能快速识别:
ps -ef | grep nginx会显示进程所有者是nginx,一眼区分 Nginx 进程和其他进程;- 日志文件(
access.log、error.log)的所有者会是nginx,后续清理日志、分析日志时,不会因权限问题报错(比如普通用户无法删除root所属的日志文件);- 若多个 Web 服务共存(比如同时跑 Nginx 和 Apache),各自用专属用户,能避免日志混淆、权限冲突。
配置nginx模块
官方模块内容:nginx模块内容或者直接使用命令./configure --help
bash
#使用以下进行配置 记得删除注释
./configure \
--prefix=/usr/local/nginx \ # 指定Nginx安装根目录
--user=nginx \ # 指定Nginx运行用户为nginx(安全隔离)
--group=nginx \ # 指定Nginx运行用户组为nginx(权限统一管理)
--sbin-path=/usr/local/nginx/sbin/nginx \ # 指定Nginx启动程序存放路径
--conf-path=/etc/nginx/nginx.conf \ # 指定Nginx主配置文件路径(符合Linux配置规范)
--pid-path=/run/nginx.pid \ # 指定PID文件路径(记录主进程ID,用于进程管理)
--error-log-path=/usr/local/nginx/logs/error.log \ # 指定错误日志路径(排查运行异常)
--http-log-path=/usr/local/nginx/logs/access.log \ # 指定访问日志路径(记录用户访问记录)
--with-http_ssl_module \ # 启用HTTPS支持模块(实现https加密访问)
--with-http_v2_module \ # 启用HTTP/2协议模块(提升网站加载速度)
--with-http_realip_module \ # 启用获取客户端真实IP模块(穿透代理/CDN)
--with-http_sub_module \ # 启用HTTP内容替换模块(无需改源码替换网页内容)
--with-http_stub_status_module \ # 启用Nginx状态监控模块(查看连接数、请求数等)
--with-http_gzip_static_module \ # 启用静态文件Gzip压缩模块(减小文件体积、省带宽)
--with-threads \ # 启用线程支持(多线程模式,提升并发处理效率)
--with-file-aio \ # 启用异步I/O支持(优化大文件处理性能,避免阻塞)
--with-pcre \ # 使用系统自带PCRE正则库(支持URL匹配、Rewrite规则)
--with-stream \ # 启用TCP/UDP代理模块(可代理MySQL、Redis等非HTTP服务)

编译并安装:make && make install
编译完成后使用nginx可执行路径 -v/-V进行验证
如果忘记可执行路径可使用whereis nginx进行查询
bash
[root@nginx nginx-1.28.0]# whereis nginx
nginx: /etc/nginx /usr/local/nginx

创建服务文件(我们这种安装方式还没有服务文件,所以需要手写配置)
bash
cat > /usr/lib/systemd/system/nginx.service <<EOF
[Unit]
Description=The nginx HTTP and reverse proxy server
Documentation=http: nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
至此,所有安装步骤完成
2.3基础配置
使用nginx -h命令查看nginx命令帮助:

上图内容的精简解读:
- 版本 / 帮助(查信息)
nginx -v:显示 nginx 版本nginx -V:显示版本 + 编译配置nginx -h/nginx -?:显示帮助文档
- 配置验证(改配置后必用)
nginx -t:测试配置文件是否合法nginx -T:测试配置 + 打印配置内容nginx -t -q:测试仅输出错误信息(静默模式)
- 进程控制(日常管理)
nginx -s stop:强制停止 nginx(不推荐)nginx -s quit:优雅停止(处理完当前请求再停,推荐)nginx -s reload:重载配置文件(改配置后用,无需停服务)nginx -s reopen:重新打开日志文件(日志切割后用)
- 自定义配置(进阶)
nginx -p [路径]:指定 nginx 工作目录(默认 /usr/share/nginx)nginx -e [文件路径]:指定错误日志路径(默认 /var/log/nginx/error.log)nginx -c [文件路径]:指定配置文件路径(默认 /etc/nginx/nginx.conf)nginx -g "指令":临时添加全局配置(如nginx -g "gzip on;")
2.4核心目录结构(nginx架构)
我们假设所有的NGINX文件全在一个目录/usr/local/nginx中,下表则是他们的结构
plaintext
/usr/local/nginx/
├── conf/ # 配置文件目录(核心!)
│ ├── nginx.conf # 主配置文件(全局配置入口)
│ ├── mime.types # 文件类型映射表(识别 .html/.css 等)
│ └── extra/ # 自定义配置文件目录(推荐分文件管理)
├── html/ # 默认静态资源目录
│ ├── index.html # 默认首页(访问 80 端口时默认显示)
│ └── 50x.html # 错误页面(500/502 等错误时显示)
├── logs/ # 日志目录
│ ├── access.log # 访问日志(记录所有用户请求)
│ ├── error.log # 错误日志(记录 Nginx 运行错误)
│ └── nginx.pid # PID 文件(记录 Nginx 主进程 ID)
└── sbin/ # 可执行程序目录
└── nginx # Nginx 核心命令(启动、停止、重启等)
三、通过小实验了解Nginx
我们可以把NGINX这个工具理解为一个管理互联网的小卖部,主配置文件就是管理规则、html等文件就是商品、log等日志就是记录、sbin就是执行小卖部的一些决策
配置nginx.conf文件(主配置文件):确定以下规则
讲解之前先带大家做一个最简单小实验让大家感受乐趣
首先编写conf文件配置一个8080端口的服务,在物理机中访问虚拟机中的一个html文件:
bash
#更改配置文件
[root@nginx ~]# vim /etc/nginx/nginx.conf
[root@nginx ~]# vim /etc/nginx/nginx.conf
worker_processes 1;# 对应使用CPU核心数 → 招1个员工
events {
worker_connections 1024;# 每个CPU服务数 → 这个员工最多同时接待1024个顾客(并发连接上限)
}
http {
include mime.types;# 识别"商品类型" → 知道HTML是"说明书"、图片是"海报",不搞混文件格式
default_type application/octet-stream;# 不认识的文件 → 按"原始包裹"处理,不瞎折腾
sendfile on;# 开启"快速取货" → 员工直接从货架递货,不用先放自己手里,省时间
keepalive_timeout 65;# 顾客逗留时限 → 买完没动静65秒后送离,避免占位置
server {
listen 8080;# 监听8080端口 → 开放8080号窗口,顾客只能从这个窗口下单
server_name localhost;# 服务主机(127.0.0.1)→ 只接待本地熟客(本机访问),外地顾客暂不接
location / {
root /usr/local/nginx/html/;# 指定商品货架 → 所有货(HTML、图片等)都放这个目录
index a.html;# 默认推荐商品 → 顾客一开窗先给"爆款a.html",想换别的输文件名就行
}
error_page 500 502 503 504 /50x.html;# 服务故障时 → 货架倒了/员工忙不过来(500类错误),给顾客看致歉信
location = /50x.html {# 致歉信配置
root html;# 用默认小货架 → 致歉信是开业自带的,放Nginx默认html目录里
}
}
}
编写html文件:商品内容
bash
[root@nginx html]# echo '<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Nginx 测试页面</title>
<style>
body { width: 90%; margin: 0 auto; padding: 20px; font-family: Arial, sans-serif; text-align: center; }
h1 { color: #2c3e50; margin-top: 50px; }
p { color: #34495e; font-size: 18px; }
.tip { color: #27ae60; font-weight: bold; margin-top: 30px; }
</style>
</head>
<body>
<h1>🎉 Nginx 服务运行正常!</h1>
<p>这是通过 echo 命令生成的测试页面</p>
<p class="tip">服务器 IP: 请替换为你的服务器公网/内网 IP</p>
<p>当前时间: '$(date +"%Y-%m-%d %H:%M:%S")'</p>
</body>
</html>' > /usr/local/nginx/html/a.html
启动服务验证结果
bash
#打开防火墙端口 拿到营业许可证
[root@nginx html]# firewall-cmd --permanent --add-port=8080/tcp
success
[root@nginx html]# firewall-cmd --reload
success
[root@nginx html]# firewall-cmd --list-ports
8080/tcp
#启动服务 开店了
[root@nginx html]# systemctl start nginx
虚拟机访问crullocalhost:8080
物理机访问 虚拟机ip:8080

四、Nginx 配置文件深度解析
Nginx 的配置核心是 conf/nginx.conf,其语法遵循「层级嵌套」规则,核心结构分为 4 层:全局块 → Events 块 → HTTP 块 → Server 块 → Location 块。
官方文档:[HTTP 负载均衡 |NGINX 文档](
4.1 配置文件基本语法规则
在开始解析前,先明确 3 个基础语法(避免配置报错):
- 配置项格式:
关键字 值;(值与分号之间需空格,分号不可省略); - 层级嵌套:子块(如 Events、Server)需放在父块(如全局、HTTP)的大括号
{}内; - 注释:
# 注释内容(单行注释,无多行注释); - 空格与换行:配置文件对空格、换行不敏感,可通过缩进优化可读性。
4.2 全局块(Global):Nginx 整体配置
全局块是配置文件的最外层,配置项对整个 Nginx 服务生效,主要设置进程、日志等核心参数。
nginx
# 1. 工作进程数:建议设为 CPU 核心数(如 4 核 CPU 设为 4),或 auto 自动识别
worker_processes auto;
# 2. 错误日志:指定日志路径与日志级别(debug > info > notice > warn > error > crit)
# 生产环境建议设为 warn 或 error,避免日志过大
error_log logs/error.log warn;
# 3. PID 文件:存储 Nginx 主进程 ID,用于进程管理(如停止、重启)
pid logs/nginx.pid;
# 4. 工作进程优先级:数值越小优先级越高(-20 ~ 19),默认 0
worker_priority 0;
4.3 Events 块:网络连接配置
Events 块用于配置 Nginx 的网络连接模型,直接影响并发性能,核心参数如下:
nginx
events {
# 1. 每个工作进程的最大连接数(默认 1024)
# 注意:此值不能超过系统的最大文件描述符限制(可通过 ulimit -n 查看)
worker_connections 10240;
# 2. 事件驱动模型:Linux 系统推荐用 epoll(性能最优),FreeBSD 用 kqueue
use epoll;
# 3. 允许多个连接同时被一个工作进程接收(提升并发处理效率)
multi_accept on;
# 4. 禁用 Nagle 算法:减少网络延迟,适合小数据包传输(如接口请求)
tcp_nodelay on;
}
4.4 HTTP 块:Web 服务核心配置
HTTP 块是配置 Web 服务的核心,包含所有与 HTTP/HTTPS 相关的全局配置,同时可嵌套多个 Server 块(虚拟主机)。
nginx
http {
# 1. 引入文件类型映射表:让 Nginx 识别不同后缀的文件(如 .html 是文本类型)
include mime.types;
# 2. 未知文件类型默认处理方式:按二进制流传输
default_type application/octet-stream;
# 3. 日志格式配置:定义访问日志的记录格式(可自定义字段)
log_format main '$remote_addr [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 启用访问日志,按 main 格式记录到 logs/access.log
access_log logs/access.log main;
# 4. 性能优化参数
sendfile on; # 启用零拷贝技术(加速文件传输,减少 CPU 占用)
tcp_nopush on; # 配合 sendfile 使用,提升网络传输效率
keepalive_timeout 65; # TCP 连接超时时间(秒):用户连接后无操作 65 秒断开
client_max_body_size 10m; # 限制客户端上传文件最大大小(默认 1m,根据业务调整)
# 5. Gzip 压缩配置:减小响应文件体积,提升页面加载速度
gzip on; # 启用 Gzip 压缩
gzip_comp_level 6; # 压缩级别(1-9,6 是平衡值:压缩比与性能兼顾)
gzip_min_length 1k; # 仅压缩大于 1KB 的文件(小文件无需压缩)
gzip_buffers 16 8k; # 压缩缓冲区大小
gzip_http_version 1.1; # 支持的 HTTP 协议版本
# 需压缩的文件类型(文本类文件优先压缩,图片/视频无需压缩)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on; # 向客户端返回压缩标识,避免兼容问题
# 6. 虚拟主机配置(核心!一个 Server 块对应一个虚拟主机)
include conf/extra/*.conf; # 推荐将虚拟主机配置拆分到 extra 目录,便于管理
}
4.5 Server 块:虚拟主机配置
Server 块对应「虚拟主机」,一个 Nginx 可配置多个 Server 块,实现「一个端口多个域名」或「多个端口多个服务」的隔离。
核心参数说明:
listen:监听的端口(如 80 对应 HTTP,443 对应 HTTPS);server_name:监听的域名(可配置多个,用空格分隔,支持通配符*);root:该虚拟主机的静态资源根目录;index:默认首页文件(多个文件按优先级排序)。
示例 1:配置 80 端口静态资源服务(基础场景)
nginx
# 保存为 conf/extra/static_80.conf,通过 HTTP 块的 include 引入
server {
listen 80; # 监听 80 端口(HTTP 默认端口)
server_name localhost www.mystatic.com; # 监听的域名(本机+自定义域名)
root /usr/local/nginx/html; # 静态资源根目录
index index.html index.htm; # 默认首页文件(访问 / 时优先找 index.html)
# 字符编码设置:避免中文乱码
charset utf-8;
# 访问日志:单独记录该虚拟主机的访问日志(便于排查问题)
access_log logs/static_80_access.log main;
# 错误页面配置:404 错误返回自定义页面
error_page 404 /404.html;
location = /404.html {
root /usr/local/nginx/html;
internal; # 仅允许内部跳转,禁止用户直接访问 /404.html
}
# 静态资源缓存优化:图片、CSS、JS 缓存 7 天,减少重复请求
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg)$ {
expires 7d; # 缓存 7 天
add_header Cache-Control "public, max-age=604800"; # 缓存控制头
add_header ETag ""; # 禁用 ETag 校验,提升缓存效率
}
}
示例 2:配置 443 端口 HTTPS 服务(生产环境必备)
HTTPS 需先申请 SSL 证书(可从 Let's Encrypt 免费申请),配置如下:
nginx
# 保存为 conf/extra/https_443.conf
server {
listen 443 ssl; # 监听 443 端口(HTTPS 默认端口)
server_name www.mydomain.com; # 绑定的域名(需与证书匹配)
# SSL 证书配置
ssl_certificate /usr/local/nginx/conf/cert/www.mydomain.com.pem; # 证书公钥路径
ssl_certificate_key /usr/local/nginx/conf/cert/www.mydomain.com.key; # 证书私钥路径
# SSL 安全优化参数
ssl_protocols TLSv1.2 TLSv1.3; # 仅支持安全的 TLS 版本(禁用 SSLv3、TLSv1.0/1.1)
ssl_prefer_server_ciphers on; # 优先使用服务器端加密套件
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; # 加密套件
ssl_session_timeout 10m; # SSL 会话超时时间
ssl_session_cache shared:SSL:10m; # SSL 会话缓存
root /usr/local/nginx/html;
index index.html;
access_log logs/https_443_access.log main;
}
# 可选:将 80 端口请求重定向到 443(强制 HTTPS)
server {
listen 80;
server_name www.mydomain.com;
return 301 https://$host$request_uri; # 301 永久重定向到 HTTPS
}
4.6 Location 块:请求路径匹配与处理
Location 块嵌套在 Server 块内,用于「匹配用户请求的路径」,并执行对应的处理逻辑(如返回静态文件、转发请求、缓存等)。
4.6.1 Location 匹配规则(核心!)
Location 支持多种匹配模式,优先级从高到低如下:
| 匹配模式 | 语法示例 | 说明 | 优先级 |
|---|---|---|---|
| 精确匹配 | location = /path |
仅匹配 /path 路径(完全一致) |
最高 |
| 前缀匹配(^~) | location ^~ /static/ |
匹配以 /static/ 开头的路径,不继续匹配正则 |
次高 |
| 正则匹配(~) | location ~ \.html$ |
区分大小写的正则匹配(如 .html 结尾) |
中 |
| 正则匹配(~*) | location ~* \.jpg$ |
不区分大小写的正则匹配(如 .jpg/.JPG) |
中 |
| 普通前缀匹配 | location /path |
匹配以 /path 开头的路径,会继续匹配正则 |
最低 |
4.6.2 常用 Location 配置示例
nginx
server {
listen 80;
server_name localhost;
root /usr/local/nginx/html;
index index.html;
# 1. 精确匹配:访问 / 时返回 index.html
location = / {
index index.html;
}
# 2. 前缀匹配:访问 /static/ 开头的路径(如 /static/css/style.css),缓存 30 天
location ^~ /static/ {
expires 30d;
add_header Cache-Control "public";
}
# 3. 正则匹配:访问 .html 结尾的路径,禁用缓存(实时更新页面)
location ~* \.html$ {
expires -1; # 禁用缓存
add_header Cache-Control "no-store, no-cache, must-revalidate";
}
# 4. 反向代理:访问 /api/ 开头的路径,转发至后端 Java 服务
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; # 传递代理链 IP
}
# 5. 防盗链:仅允许自家域名(www.mydomain.com)引用图片资源
location ~* \.(jpg|png|gif|jpeg)$ {
valid_referers none blocked www.mydomain.com; # 允许的引用域名
if ($invalid_referer) {
return 403; # 非法引用返回 403 禁止访问
}
}
}
五、总结及常见问题
5.1 配置文件修改后不生效
- 原因 1:配置文件有语法错误(未通过
nginx -t检查); - 原因 2:未执行
nginx -s reload重新加载配置; - 原因 3:配置项放错层级(如 Location 块放在 Server 块外);
- 解决方案:先执行
nginx -t检查语法,再执行nginx -s reload。
5.2 访问 Nginx 报 403 Forbidden
-
原因 1:
root目录或文件权限不足(Nginx 工作进程无读取权限);解决方案:修改目录权限:
bashhmod -R 755 /usr/local/nginx/html -
原因 2:
root目录下无index配置的首页文件(如 index.html);解决方案:添加首页文件,或修改
index配置; -
原因 3:Location 块配置了
deny all,禁止了访问;解决方案:删除
deny all,或添加allow允许指定 IP。
5.3 访问 Nginx 报 502 Bad Gateway
-
原因 1:反向代理的后端服务未启动(如 8080 端口无服务);
解决方案:启动后端服务,或检查
proxy_pass地址是否正确; -
原因 2:后端服务端口被防火墙拦截;
解决方案:开放后端端口
bashfirewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload -
原因 3:Nginx 无法连接后端服务(网络不通或后端服务故障);
解决方案:在 Nginx 服务器上执行
curl http://127.0.0.1:8080,验证是否能访问后端服务。
5.4 访问 Nginx 报 504 Gateway Timeout
-
原因:后端服务响应超时(Nginx 等待后端响应超过
proxy_read_timeout配置); -
解决方案:
- 优化后端服务性能(根本解决);
- 增加 Nginx 代理超时配置:
nginxlocation /api/ { proxy_pass http://127.0.0.1:8080; proxy_read_timeout 120s; # 延长读取超时时间至 120 秒 }
5.5 启动NGINX服务时端口占用
-
原因:httpd默认80端口和NGINX默认80端口冲突;
-
解决方案:
-
关停httpd服务(根本解决)
bash;systemctl stop httpd.service -
更改 Nginx 端口配置:
nginxserver { .......... listen 8080;#除80其他端口 .......... } -
:在 Nginx 服务器上执行curl http://127.0.0.1:8080
,验证是否能访问后端服务。
5.4 访问 Nginx 报 504 Gateway Timeout
-
原因:后端服务响应超时(Nginx 等待后端响应超过
proxy_read_timeout配置); -
解决方案:
- 优化后端服务性能(根本解决);
- 增加 Nginx 代理超时配置:
nginxlocation /api/ { proxy_pass http://127.0.0.1:8080; proxy_read_timeout 120s; # 延长读取超时时间至 120 秒 }
5.5 启动NGINX服务时端口占用
-
原因:httpd默认80端口和NGINX默认80端口冲突;
-
解决方案:
-
关停httpd服务(根本解决)
bash;systemctl stop httpd.service -
更改 Nginx 端口配置:
nginxserver { .......... listen 8080;#除80其他端口 .......... } -