Nginx 从入门到精通:高性能 Web 服务器与反向代理实战教程
一、Nginx 是什么
Nginx(Engine X)是一款高性能的 HTTP 和反向代理服务器,同时也可作为 负载均衡器、缓存服务器、邮件代理服务器 使用。
它以轻量级、高并发、低内存占用著称,是现代互联网架构中最常见的 Web 服务器之一。
一句话概括:
Nginx = 高性能 Web 服务器 + 反向代理 + 负载均衡 + 缓存。
二、Nginx 的核心特性
| 功能 | 描述 |
|---|---|
| 高并发性能 | 采用事件驱动模型,可支撑百万级连接 |
| 反向代理 | 转发请求到后端服务器 |
| 负载均衡 | 提高系统可用性与吞吐量 |
| 静态资源服务 | 高效处理静态文件请求 |
| 缓存功能 | 缓存反向代理结果或静态文件 |
| 安全与访问控制 | IP 限制、请求过滤、WAF 模式 |
| 模块化架构 | 可扩展第三方模块(如 Lua、RTMP) |
三、Nginx 安装与启动
1. 安装(Ubuntu)
sudo apt update sudo apt install nginx -y
2. 启动与验证
sudo systemctl start nginx sudo systemctl enable nginx
浏览器访问:
http://localhost
显示 “Welcome to Nginx!” 即表示安装成功。
四、Nginx 目录结构
| 目录 / 文件 | 作用 |
|---|---|
/etc/nginx/nginx.conf | 主配置文件 |
/etc/nginx/sites-available/ | 站点配置存放目录 |
/etc/nginx/sites-enabled/ | 启用的站点配置 |
/var/www/html/ | 默认网页根目录 |
/var/log/nginx/access.log | 访问日志 |
/var/log/nginx/error.log | 错误日志 |
五、Nginx 配置文件结构
/etc/nginx/nginx.conf 示例:
user www-data; worker_processes auto; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; include /etc/nginx/sites-enabled/*; }
六、静态网站配置
创建 /etc/nginx/sites-available/myapp:
server { listen 80; server_name myapp.local; root /var/www/myapp; index index.html index.htm; location / { try_files $uri $uri/ =404; } }
启用站点:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ sudo systemctl reload nginx
七、反向代理配置
反向代理是 Nginx 最强大的功能之一,用于将请求转发至后端服务。
示例:
server { listen 80; server_name api.local; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
请求 http://api.local 会被转发至本地 Flask 或 Node.js 服务。
八、负载均衡配置
多台后端服务器时,可使用 upstream 实现负载均衡。
upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; } server { listen 80; location / { proxy_pass http://backend; } }
负载均衡策略
| 策略 | 说明 |
|---|---|
| round-robin | 默认轮询 |
| ip_hash | 根据客户端 IP 分配 |
| least_conn | 分配给连接最少的服务器 |
| weight | 按权重分配流量 |
示例:
upstream backend { server 192.168.1.10 weight=3; server 192.168.1.11 weight=1; }
参考案例:www.oicsi.cn
九、动静分离配置
server { listen 80; server_name site.local; location /static/ { root /var/www/html; } location / { proxy_pass http://127.0.0.1:8080; } }
静态文件由 Nginx 直接返回,动态请求交给后端处理。
十、Gzip 压缩
gzip on; gzip_min_length 1k; gzip_comp_level 5; gzip_types text/plain text/css application/javascript application/json;
Gzip 可大幅减少传输内容大小,提高响应速度。
十一、缓存配置
浏览器缓存
location ~* .(jpg|png|gif|css|js)$ { expires 30d; add_header Cache-Control "public"; }
反向代理缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=1g; server { location / { proxy_cache mycache; proxy_pass http://backend; } }
十二、访问控制
允许 / 拒绝访问:
location /admin { allow 192.168.1.0/24; deny all; }
限制请求速率:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; location /api/ { limit_req zone=one burst=20; }
十三、Rewrite 与重定向
永久重定向
server { listen 80; server_name old.example.com; return 301 http://new.example.com$request_uri; }
URL 重写
location /blog { rewrite ^/blog/(.*)$ /articles/$1 last; }
十四、HTTPS 配置
生成自签名证书:
sudo openssl req -new -x509 -days 365 -nodes -out /etc/nginx/nginx.crt -keyout /etc/nginx/nginx.key
配置:
server { listen 443 ssl; ssl_certificate /etc/nginx/nginx.crt; ssl_certificate_key /etc/nginx/nginx.key; server_name secure.local; location / { root /var/www/html; index index.html; } }
十五、反向代理 WebSocket
location /ws/ { proxy_pass http://127.0.0.1:9000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }
用于实时通讯、聊天应用、监控系统等。
十六、日志与调试
查看访问日志:
sudo tail -f /var/log/nginx/access.log
查看错误日志:
sudo tail -f /var/log/nginx/error.log
调试配置语法:
sudo nginx -t
重新加载配置:
sudo systemctl reload nginx
十七、性能优化
-
启用
worker_processes auto自动匹配 CPU 核心 -
开启连接复用与长连接
-
合理配置
keepalive_timeout(建议 30–65 秒) -
使用 Gzip + 缓存 + HTTP/2
-
静态文件独立托管
-
开启 epoll 模式(Linux)
-
限制日志写入量以减轻 IO 压力
十八、反向代理安全加固
-
隐藏版本号:
server_tokens off; -
禁止访问敏感路径:
location ~ /.git { deny all; } -
启用 HTTPS 强制跳转:
return 301 https://$host$request_uri; -
启用防盗链:
valid_referers none blocked *.yourdomain.com; if ($invalid_referer) { return 403; }
十九、Nginx + Docker 部署
Dockerfile:
FROM nginx:latest COPY ./conf.d /etc/nginx/conf.d COPY ./html /usr/share/nginx/html
docker-compose.yml:
version: "3.8" services: nginx: build: . ports: - "80:80" volumes: - ./conf.d:/etc/nginx/conf.d - ./html:/usr/share/nginx/html
运行:
docker-compose up -d
二十、企业级实战场景
| 场景 | 实践方案 |
|---|---|
| 负载均衡网关 | Nginx + upstream 实现流量分发 |
| 微服务反向代理 | 各服务通过子路径映射 |
| 静态资源加速 | Nginx 处理图片、CSS、JS 文件 |
| API 网关 | 结合 JWT 验证、限流、日志收集 |
| HTTPS 全站加密 | 配合证书自动更新工具(如 Certbot) |
| 容器化集群 | Nginx + Docker + Compose 自动部署 |
| 监控与告警 | 结合 Prometheus + Grafana 可视化监控 |









