
Nginx 详细使用教程:从入门到精通
前言
Nginx(发音为 “engine-x”)是一款高性能的 HTTP 和反向代理服务器,以其高并发处理能力、低内存消耗和出色的稳定性而闻名。本文档将带您从零基础开始,逐步掌握 Nginx 的核心功能与高级应用。
—
一、Nginx 核心功能
1.1 主要特性
- 高并发性能:采用事件驱动架构,单进程可处理数千并发连接
- 反向代理:将客户端请求转发到后端服务器
- 负载均衡:分配流量到多个后端服务器
- 静态资源服务:高效处理静态文件(图片、CSS、JS 等)
- HTTP 缓存:内置缓存机制提升响应速度
- SSL/TLS 终止:处理 HTTPS 加密解密
1.2 架构优势
与传统 Web 服务器相比,Nginx 采用了异步非阻塞 I/O 模型,能够以极少的资源处理海量并发连接,特别适合高流量网站和 API 网关场景。
—
二、安装与基础配置
2.1 安装方式
Linux 系统(Ubuntu/Debian)
# 更新软件源
sudo apt update
安装 Nginx
sudo apt install nginx
检查版本
nginx -v
Linux 系统(CentOS/RHEL)
# 安装 EPEL 仓库
sudo yum install epel-release
安装 Nginx
sudo yum install nginx
启动服务
sudo systemctl start nginx
sudo systemctl enable nginx
macOS(通过 Homebrew)
brew install nginx
brew services start nginx
2.2 目录结构
/etc/nginx/
├── nginx.conf # 主配置文件
├── sites-available/ # 可用站点配置
├── sites-enabled/ # 启用站点配置
├── conf.d/ # 额外配置目录
└── ssl/ # SSL 证书目录
2.3 基础配置示例
“`nginx
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;
gzip_min_length 1000;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript;
include /etc/nginx/conf.d/*.conf;
}
---
三、常用指令与管理
3.1 系统服务管理
bash
启动服务
sudo systemctl start nginx
停止服务
sudo systemctl stop nginx
重启服务
sudo systemctl restart nginx
重载配置(不中断服务)
sudo systemctl reload nginx
查看状态
sudo systemctl status nginx
3.2 Nginx 命令
bash
测试配置文件语法
sudo nginx -t
显示版本
nginx -v
显示帮助
nginx -h
指定配置文件启动
nginx -c /path/to/nginx.conf
指定配置文件重载
nginx -s reload
停止服务
nginx -s stop
优雅退出
nginx -s quit
---
四、虚拟主机配置
4.1 基于域名的虚拟主机
nginx
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
4.2 基于端口的虚拟主机
nginx
server {
listen 8080;
server_name api.example.com;
root /var/www/api;
location / {
proxy_pass http://localhost:3000;
}
}
---
五、反向代理
5.1 基础反向代理
nginx
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend_server;
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;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
5.2 WebSocket 支持
nginx
server {
listen 80;
server_name websocket.example.com;
location /ws {
proxy_pass http://websocket_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $host;
proxy_read_timeout 86400s;
}
}
5.3 静态资源代理
nginx
server {
listen 80;
server_name static.example.com;
location / {
root /var/www/static;
expires 30d;
add_header Cache-Control “public, immutable”;
}
}
---
六、负载均衡配置
6.1 负载均衡策略
nginx
upstream backend_pool {
# 轮询(默认)
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com;
# 或使用权重配置
# ip_hash;
# 或配置备用服务器
# server backend4.example.com backup;
# 最大连接数限制
# keepalive 32;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
6.2 健康检查配置
nginx
upstream api_servers {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 max_fails=3 fail_timeout=30s backup;
}
server {
listen 80;
location /api {
proxy_pass http://api_servers;
proxy_next_upstream error timeout http_502 http_503;
}
}
6.3 负载均衡算法对比
算法
描述
适用场景
轮询(round_robin)
依次分配请求
服务器性能相近
加权轮询(weight)
按权重分配请求
服务器性能不同
IP 哈希(ip_hash)
同一 IP 始终分配到同一服务器
需要会话保持
最少连接(least_conn)
分配给活跃连接最少的服务器
请求处理时长不一
---
七、高级功能配置
7.1 SSL/TLS 配置
nginx
server {
listen 443 ssl http2;
server_name secure.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
root /var/www/html;
}
}
7.2 URL 重写与重定向
nginx
永久重定向
server {
listen 80;
server_name old.example.com;
return 301 https://new.example.com$request_uri;
}
条件重写
server {
listen 80;
server_name api.example.com;
location /v1/ {
rewrite ^/v1/(.*)$ /$1 break;
proxy_pass http://backend;
}
location /v2/ {
rewrite ^/v2/(.*)$ /api/v2/$1 break;
proxy_pass http://backend;
}
}
7.3 访问控制
nginx
IP 黑白名单
server {
listen 80;
server_name admin.example.com;
allow 192.168.1.0/24;
deny all;
location / {
proxy_pass http://backend;
}
}
基本认证
server {
listen 80;
server_name secure.example.com;
location /admin {
auth_basic “Restricted Access”;
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://backend;
}
}
7.4 限流与速率限制
nginx
定义限流区域
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
listen 80;
server_name api.example.com;
location /api {
limit_req zone=api_limit burst=20 nodelay;
limit_conn conn_limit 10;
proxy_pass http://backend;
}
}
---
八、性能优化最佳实践
8.1 内核参数调优
bash
/etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
8.2 Nginx 性能优化参数
nginx
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 65535;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
client_max_body_size 10M;
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
---
九、故障排查技巧
9.1 查看日志
bash
实时查看错误日志
tail -f /var/log/nginx/error.log
查看访问日志
tail -f /var/log/nginx/access.log
分析错误频率
grep -c “error” /var/log/nginx/error.log
9.2 测试配置文件
bash
测试配置语法
sudo nginx -t
如果失败查看详细错误
sudo nginx -t 2>&1
9.3 常用诊断命令
bash
检查端口监听
sudo netstat -tulpn | grep nginx
检查进程状态
ps aux | grep nginx
查看连接数
ss -tn state established | grep :80 | wc -l
“`
—
结语
Nginx 是一款功能强大、配置灵活的 Web 服务器和反向代理工具。通过本文档的学习,您已经掌握了:
- 基础安装与配置 – 了解目录结构和核心配置项
- 虚拟主机配置 – 支持域名和端口的多站点部署
- 反向代理功能 – 将请求转发到后端服务
- 负载均衡 – 合理分配流量到多个服务器
- 高级功能 – SSL、限流、访问控制等
- 定期测试配置文件(`nginx -t`)
- 使用 `systemctl reload nginx` 而非 restart 重载配置
- 监控日志和性能指标
- 根据实际场景优化参数
实际使用中,建议:
祝您使用愉快!
—
*文档生成时间:2026 年 4 月 25 日*



















暂无评论内容