Nginx 基础配置
Nginx 是高性能的 HTTP 和反向代理服务器。
这页最适合当作“从 0 到 1 配出可用 Nginx”的起点。很多人第一次接触 Nginx 时最容易混淆的不是语法,而是它到底在当前架构里扮演什么角色。
Nginx 常见用途
- 托管静态文件
- 反向代理到应用服务
- 统一 HTTPS 和域名入口
- 缓存静态资源
- 为多个站点做虚拟主机分流
推荐的上手顺序
- 先跑一个最简单的静态站点
- 再学会把请求反代到
localhost:3000之类的应用服务 - 然后补 HTTPS 和 80 → 443 重定向
- 最后再做 gzip、缓存、上传大小等优化
先建立“入口代理”的认知,会比直接背配置块更容易。
通过 Docker 运行
docker run -d -p 80:80 --name nginx nginx
Docker 适合快速试验和本地验证;正式环境还要补卷挂载、配置文件管理、日志和证书目录。
静态站点配置
server {
listen 80;
server_name example.com;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# 缓存静态资源
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
这是最常见的 SPA / 静态文档站配置思路,try_files 能避免刷新子路由时报 404。
反向代理
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000;
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;
}
}
绝大多数 Node、Python、Go Web 服务部署到公网时,都会在前面放一层这样的 Nginx。
HTTPS 配置(Let's Encrypt)
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
证书配置不是“部署完成后再想”的附加项,公网服务建议一开始就纳入部署流程。
进阶:性能优化
# 在 http 块中添加
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml;
# 连接优化
keepalive_timeout 65;
client_max_body_size 50m;
不要盲目复制网上大段“性能优化模板”。对小站点来说,先保证配置可读、可维护,比堆很多指令更重要。
常用命令
nginx -t # 测试配置
nginx -s reload # 重载配置
nginx # 启动
nginx -s stop # 停止
常见问题
配置改了不生效
- 先执行
nginx -t看是否有语法错误 - 再确认你修改的是实际加载的配置文件
- 最后执行
reload而不是只改文件不重载
访问域名返回 502
大多数时候是后端服务没启动、端口写错,或 Nginx 根本连不到上游服务。先排查应用本身,再看代理配置。
刷新前端路由 404
通常是静态站点没加 try_files $uri $uri/ /index.html;。
推荐联动阅读
- 先看 Nginx 基础配置
- 再看 HTTPS / SSL 自动化
- 最后结合具体应用(Nuxt、Node API、Docker 服务)做项目化落地
参考链接
- Nginx 官网 — 下载与文档
- Nginx GitHub — 源码
- Let's Encrypt — 免费 SSL 证书
- Certbot — 自动化证书管理
- Nginx 配置生成器 — DigitalOcean 工具
- Certbot / SSL 配置 — 证书自动化与续期更细节的说明