Nginx(发音同 “engine x”)是一款轻量级、高性能的 HTTP 和反向代理服务器,同时也是 IMAP/POP3/SMTP 代理服务器。凭借高并发、低内存占用、配置灵活等特性,Nginx 已成为互联网架构中不可或缺的核心组件 —— 无论是静态资源托管、反向代理、负载均衡,还是前后端分离项目部署,Nginx 都能轻松胜任。本文将从基础概念到实战配置,带你全面掌握 Nginx 的核心用法。
一、Nginx 核心优势:为什么选择它?
在学习配置前,先明确 Nginx 的核心价值,理解它为何能取代 Apache 成为主流:
高性能:采用异步非阻塞的事件驱动模型(epoll/kqueue),单机可轻松支撑 10 万 + 并发连接,内存占用仅为 Apache 的 1/5;
轻量灵活:核心代码仅几万行,配置文件简洁易懂,支持模块化扩展(如 SSL、缓存、限流等);
功能全面:集静态资源服务、反向代理、负载均衡、URL 重写、缓存、限流、HTTPS 等功能于一体;
高可用:支持热部署(修改配置后无需重启即可生效),可配合 Keepalived 实现主从切换,避免单点故障;
跨平台:兼容 Linux、Windows、FreeBSD 等系统,且开源免费,企业级应用无版权成本。
二、Nginx 快速安装(Linux CentOS/Ubuntu)
1. CentOS 系统安装
# 安装EPEL源(CentOS默认仓库无Nginx)
sudo yum install -y epel-release
# 安装Nginx
sudo yum install -y nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证安装
nginx -v
2. Ubuntu 系统安装
# 更新软件源
sudo apt update
# 安装Nginx
sudo apt install -y nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证安装
nginx -v
安装完成后,访问服务器 IP(如http://192.168.1.100),若看到 Nginx 默认欢迎页,说明安装成功。
三、Nginx 核心配置解析
Nginx 的配置文件默认位于/etc/nginx/nginx.conf(主配置)和/etc/nginx/conf.d/(站点配置),核心结构分为 3 层:
# 1. 全局块:配置影响Nginx全局的参数
user nginx; # 运行用户
worker_processes auto; # 工作进程数,建议等于CPU核心数
error_log /var/log/nginx/error.log warn; # 错误日志路径
pid /var/run/nginx.pid; # 进程PID文件
# 2. 事件块:配置影响Nginx服务器与用户网络连接
events {
worker_connections 10240; # 单个工作进程最大连接数
use epoll; # 事件驱动模型,Linux下推荐epoll
}
# 3. HTTP块:配置HTTP服务器的核心参数
http {
include /etc/nginx/mime.types; # 媒体类型映射
default_type application/octet-stream; # 默认媒体类型
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; # 配合sendfile提升性能
tcp_nodelay on;
keepalive_timeout 65; # 长连接超时时间
gzip on; # 开启Gzip压缩
# 包含站点配置(推荐将不同站点配置放在conf.d目录)
include /etc/nginx/conf.d/*.conf;
}
站点配置(conf.d/xxx.conf):最常用的配置层级
站点配置是日常开发中接触最多的部分,每个站点可单独编写配置文件(如my-site.conf),核心包含server块:
server {
listen 80; # 监听端口
server_name localhost 192.168.1.100; # 域名/IP
# 根目录与默认首页
root /usr/share/nginx/html;
index index.html index.htm;
# 静态资源缓存(优化加载速度)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 7d; # 缓存7天
add_header Cache-Control "public, max-age=604800";
}
# 错误页面配置
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
四、Nginx 实战场景:解决 80% 的开发需求
场景 1:托管 Vue/React 前端静态文件(解决路由刷新 404)
前后端分离项目中,前端使用history路由模式时,直接刷新页面会报 404,核心是配置try_files指令:
server {
listen 80;
server_name frontend.example.com;
# 前端打包后的静态文件目录
root /data/frontend/dist;
index index.html;
# 核心:解决history模式刷新404
location / {
try_files $uri $uri/ /index.html;
}
# 反向代理后端接口(避免跨域)
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;
}
}
场景 2:反向代理与负载均衡(分布式系统必备)
当后端服务部署多实例时,可通过 Nginx 实现负载均衡,提升系统并发能力:
# 定义后端服务器集群
upstream backend_cluster {
server 192.168.1.101:8080 weight=1; # weight越大,权重越高
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 backup; # 备用节点(主节点故障时启用)
}
server {
listen 80;
server_name api.example.com;
# 反向代理到后端集群
location / {
proxy_pass http://backend_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 超时配置(避免请求卡顿)
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 60s;
}
}
负载均衡策略说明:
weight:权重策略(默认轮询);ip_hash:按客户端 IP 哈希,保证同一 IP 始终访问同一节点(解决会话保持);least_conn:最少连接数优先;url_hash:按 URL 哈希(需第三方模块)。
场景 3:配置 HTTPS(HTTPS 时代必备)
通过 Let's Encrypt 免费申请 SSL 证书后,配置 HTTPS:
server {
listen 443 ssl http2; # 开启HTTP2
server_name example.com;
# SSL证书路径
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# SSL优化配置
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3; # 禁用低版本协议
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
# 强制HTTP跳转HTTPS
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
# 业务配置
root /data/frontend/dist;
index index.html;
}
# HTTP跳转HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
场景 4:接口限流(防止恶意请求压垮服务器)
通过limit_req_zone实现接口限流,保护后端服务:
# 定义限流规则:基于IP限流,速率10r/s(每秒10个请求)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
listen 80;
server_name api.example.com;
# 对/api路径限流
location /api/ {
limit_req zone=api_limit burst=20 nodelay; # burst为突发请求数
proxy_pass http://127.0.0.1:8080/;
}
}
五、Nginx 常用运维命令
日常运维中,这些命令是高频操作,务必掌握:
# 检查配置文件语法(修改配置后必做)
nginx -t
# 重新加载配置(热部署,不中断服务)
nginx -s reload
# 停止Nginx(优雅停止)
nginx -s stop
# 强制停止
pkill nginx
# 查看Nginx进程
ps -ef | grep nginx
# 查看访问日志(实时)
tail -f /var/log/nginx/access.log
# 查看错误日志(排查问题)
tail -f /var/log/nginx/error.log
六、常见问题排查
1. 403 Forbidden(权限拒绝)
检查 Nginx 运行用户(如
nginx)是否有访问网站目录的权限;关闭 SELinux(临时:
setenforce 0,永久:修改/etc/selinux/config为SELINUX=disabled)。
2. 502 Bad Gateway(反向代理失败)
检查后端服务是否正常运行;
检查
proxy_pass地址是否正确(结尾是否带/需与后端接口匹配);检查后端服务是否监听
0.0.0.0(而非仅127.0.0.1)。
3. 配置修改后不生效
先执行
nginx -t检查语法错误;执行
nginx -s reload重新加载配置;确认配置文件路径正确(主配置是否包含站点配置)。
七、总结
Nginx 的核心优势是高性能、轻量、功能全面,是静态资源托管、反向代理、负载均衡的首选工具;
配置文件核心分为全局块、事件块、HTTP 块、server 块、location 块,其中
server和location是日常配置的重点;实战中需掌握四大核心场景:前端静态资源托管、反向代理、负载均衡、HTTPS 配置,可解决 80% 的开发部署需求;
修改配置后务必先执行
nginx -t检查语法,再用nginx -s reload热加载,避免服务中断。
Nginx 的学习门槛低,核心是理解配置逻辑并结合实际场景练习。掌握本文的内容,足以应对中小型项目的 Nginx 部署与运维需求。