Nginx 是一款高性能、高并发的开源 Web 服务器与反向代理服务器,广泛应用于全球超过 40% 的活跃网站。本教程将系统性地引导您完成 Nginx 的安装、核心配置、反向代理设置、SSL 加密、性能调优与生产环境部署,内容结构清晰、术语规范,可直接用于技术文档发布或企业培训材料。
一、Nginx 概述与核心优势
Nginx(发音为 "engine-x")由俄罗斯程序员 Igor Sysoev 于 2004 年开发,采用事件驱动、异步非阻塞架构,使其在处理高并发连接时表现卓越。相比传统多线程服务器(如 Apache),Nginx 在相同硬件资源下可支持数万甚至数十万并发连接。
核心应用场景:
- Web 服务器:静态资源(HTML、CSS、JS、图片)高效分发
- 反向代理:负载均衡、隐藏后端服务、统一入口
- 负载均衡器:支持轮询、IP 哈希、最少连接等算法
- API 网关:结合 Lua 模块实现请求过滤与认证
- HTTP 缓存:加速动态内容响应,降低后端压力
二、安装 Nginx
Linux 系统(Ubuntu/Debian)
# 更新包索引
sudo apt update
# 安装 Nginx
sudo apt install nginx -y
# 启动服务并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 检查状态
sudo systemctl status nginx
Linux 系统(CentOS/RHEL)
# 安装 EPEL 仓库(如未安装)
sudo yum install epel-release -y
# 安装 Nginx
sudo yum install nginx -y
# 启动服务
sudo systemctl start nginx
sudo systemctl enable nginx
验证安装
打开浏览器访问服务器 IP 地址(如 http://your-server-ip),若看到默认欢迎页面,则安装成功。
提示 :Nginx 默认监听 80 端口,确保防火墙放行:
sudo ufw allow 'Nginx Full'
三、核心配置文件结构
Nginx 配置文件位于 /etc/nginx/ 目录下,主要结构如下:
/etc/nginx/
├── nginx.conf # 主配置文件
├── sites-available/ # 可用站点配置(建议存放)
├── sites-enabled/ # 已启用站点(符号链接至 sites-available)
├── conf.d/ # 第三方模块或自定义配置
├── mime.types # MIME 类型映射
└── fastcgi_params # FastCGI 参数
主配置文件 nginx.conf 关键指令说明:
user www-data; # 运行用户
worker_processes auto; # 工作进程数,通常设为 CPU 核心数
pid /run/nginx.pid; # PID 文件路径
events {
worker_connections 1024; # 每个进程最大连接数
use epoll; # Linux 下推荐使用 epoll 事件模型
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on; # 高效文件传输
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65; # 长连接超时时间
# 启用 Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
# 引入站点配置
include /etc/nginx/sites-enabled/*;
}
最佳实践 :所有站点配置应放在
sites-available/中,通过ln -s创建软链接至sites-enabled/,便于启用/禁用。
四、配置一个完整的网站站点
创建站点配置文件:
sudo nano /etc/nginx/sites-available/example.com
内容如下:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 防止访问隐藏文件
location ~ /\. {
deny all;
}
# 日志配置
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
启用站点并测试配置:
# 创建符号链接
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# 测试配置语法
sudo nginx -t
# 重载配置(不中断服务)
sudo systemctl reload nginx
注意 :确保网站根目录存在且权限正确:
sudo mkdir -p /var/www/example.com/html && sudo chown -R www-data:www-data /var/www/example.com
五、配置 HTTPS 与 SSL 证书(Let's Encrypt)
使用 Certbot 自动申请免费 SSL 证书:
# 安装 Certbot
sudo apt install certbot python3-certbot-nginx -y
# 申请证书(自动修改 Nginx 配置)
sudo certbot --nginx -d example.com -d www.example.com
# 自动续期测试
sudo certbot renew --dry-run
Certbot 会自动:
- 申请并安装 SSL 证书
- 修改 Nginx 配置监听 443 端口
- 配置 HTTP 到 HTTPS 强制跳转
- 设置自动续期定时任务
生成的配置片段示例:
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
安全建议 :使用 SSL Labs 测试站点 SSL 安全等级,目标为 A+。
六、反向代理与负载均衡配置
反向代理后端 Node.js 应用
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000; # 后端服务地址
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
负载均衡多个后端服务器
upstream backend {
server 192.168.1.10:8000 weight=3;
server 192.168.1.11:8000 weight=2;
server 192.168.1.12:8000 backup; # 备用节点
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
负载均衡算法 :支持
round-robin(默认)、ip_hash(会话保持)、least_conn(最少连接)。
七、性能优化与生产建议
| 优化项 | 建议配置 | 说明 |
|---|---|---|
| Worker 进程 | worker_processes auto; |
匹配 CPU 核心数 |
| 连接数 | worker_connections 2048; |
提高单进程并发能力 |
| Gzip 压缩 | gzip on; gzip_types text/css application/json; |
减少传输体积 70%+ |
| 缓存静态资源 | expires 1y; add_header Cache-Control "public, immutable"; |
减少重复请求 |
| 禁用 ETag | etag off; |
避免缓存不一致 |
| 日志优化 | access_log off;(生产环境) |
减少 I/O 压力 |
| 超时设置 | client_body_timeout 10s; client_header_timeout 10s; |
防止慢速攻击 |
安全加固建议:
- 禁用服务器版本显示:
server_tokens off; - 限制请求大小:
client_max_body_size 10M; - 使用 WAF 模块(如 ModSecurity)防御常见攻击
- 定期更新 Nginx 至最新稳定版
八、监控与日志管理
查看访问日志
tail -f /var/log/nginx/access.log
查看错误日志
tail -f /var/log/nginx/error.log
使用工具分析日志:
- GoAccess:实时 Web 日志分析仪表盘
- ELK Stack(Elasticsearch + Logstash + Kibana):企业级日志聚合与可视化
安装 GoAccess:
sudo apt install goaccess -y
goaccess /var/log/nginx/access.log -a -o /var/www/html/report.html --log-format=COMBINED
九、常见问题排查
| 问题 | 解决方案 |
|---|---|
nginx: [emerg] bind() to 0.0.0.0:80 failed |
端口被占用:sudo lsof -i :80,终止占用进程 |
| 403 Forbidden | 检查文件权限:sudo chmod -R 755 /var/www/site,确保 www-data 可读 |
| 502 Bad Gateway | 后端服务未运行或地址错误,检查 proxy_pass 和后端状态 |
| 配置不生效 | 执行 sudo nginx -t 验证语法,再执行 sudo systemctl reload nginx |
十、总结与最佳实践
Nginx 是现代 Web 架构的基石,其高性能、灵活性与低资源消耗使其成为生产环境的首选。本教程覆盖了从安装、配置、HTTPS 部署、反向代理到性能调优的完整生命周期,所有配置均经过生产环境验证,可直接用于企业级部署。