Nginx 入门与进阶玩法指南
一、什么是 Nginx?
Nginx(Engine X)是一个高性能的 HTTP 和反向代理服务器,同时也可以作为 IMAP/POP3/SMTP 邮件代理服务器。它最初由俄罗斯程序员 Igor Sysoev 开发,用于解决高并发下 Apache 性能瓶颈问题。如今,它已成为 Web 服务中最主流的服务器之一。
核心特点:
- 异步事件驱动架构,适合处理大量并发连接。
- 内存占用小,稳定性高。
- 支持热部署、热加载配置。
- 模块化设计,便于扩展。
二、Nginx 能做什么?
- 静态资源服务器:用于服务 HTML、CSS、JS、图片、音视频等文件。
- 反向代理服务器:将请求转发给后端应用服务,比如 Node.js、Java、Python 程序。
- 负载均衡器:支持多种策略(轮询、IP 哈希、最少连接等)。
- 缓存服务器:作为前端缓存层,大大减轻后端压力。
- HTTPS 网关:用作 TLS 终端代理,配合 Let’s Encrypt 实现免费证书自动续期。
- API 网关/限流器:结合 Lua、OpenResty 实现接口限流、鉴权等功能。
- WebSocket 代理:支持持久连接转发,适用于实时通信场景。
三、如何快速开始使用 Nginx?
1. 安装
Ubuntu:
sudo apt update
sudo apt install nginx
macOS(通过 Homebrew):
brew install nginx
2. 启动与基本命令
# 启动 Nginx
sudo nginx
# 重载配置(热更新)
sudo nginx -s reload
# 停止 Nginx
sudo nginx -s stop
# 检查配置文件语法
nginx -t
默认配置文件路径:
- Linux:
/etc/nginx/nginx.conf
- macOS (Homebrew):
/opt/homebrew/etc/nginx/nginx.conf
四、实用玩法案例
1. 将本地应用暴露给公网:静态站点部署
server {
listen 80;
server_name mydomain.com;
location / {
root /var/www/html;
index index.html;
}
}
2. 反向代理 Node.js 后端
server {
listen 80;
server_name mydomain.com;
location /api/ {
proxy_pass http://localhost:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 配置 HTTPS
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
location / {
proxy_pass http://localhost:8080;
}
}
可以使用 Let’s Encrypt + Certbot 自动申请和续期 HTTPS 证书。
五、进阶玩法
1. 负载均衡配置
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
支持多种策略:
round-robin
(默认)least_conn
(最少连接)ip_hash
(IP 绑定)
2. 访问控制
location /admin {
allow 192.168.1.0/24;
deny all;
}
3. 限流控制
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /api/ {
limit_req zone=one burst=5 nodelay;
}
}
}
六、结合 OpenResty 实现更强功能
Nginx + Lua(OpenResty) 提供超强的可编程能力,可用于:
- 接口限流
- 动态路由
- A/B 测试
- 用户鉴权
- 日志上报
location /api/check_token {
content_by_lua_block {
local token = ngx.var.arg_token
if not token or token ~= "123456" then
ngx.status = 403
ngx.say("Forbidden")
return
end
ngx.say("OK")
}
}
七、调试和性能优化建议
- 使用
access_log
和error_log
调试问题。 - 配置
worker_processes auto;
合理利用 CPU。 - 开启缓存、Gzip 提升性能。
- 调整
client_max_body_size
限制上传大小。
八、Nginx 玩出花的建议方向
- 本地搭建 CDN 服务(结合缓存和负载均衡)
- 构建 HTTPS 加密的 WebSocket 通信代理
- 写 Lua 插件完成防爬虫、防刷接口逻辑
- 将 Nginx 容器化部署,实现微服务网关(结合 Docker/K8s)
- Nginx + Prometheus + Grafana 实现监控面板