Docker 部署 Nginx
Nginx 是高性能的 Web 服务器,常用于反向代理、负载均衡、静态文件服务。
快速开始
基础部署
docker run -d \
--name nginx \
-p 80:80 \
-v nginx-html:/usr/share/nginx/html \
nginx:alpine
使用配置文件
1. 创建目录结构
mkdir -p /etc/nginx/{conf,html,logs}
2. 创建配置文件
cat > /etc/nginx/conf/default.conf << EOF
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://api:5000;
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;
}
}
EOF
3. 启动容器
docker run -d \
--name nginx \
-p 80:80 \
-v /etc/nginx/conf:/etc/nginx/conf.d \
-v nginx-html:/usr/share/nginx/html \
-v nginx-logs:/var/log/nginx \
nginx:alpine
高级配置
反向代理
# /etc/nginx/conf/proxy.conf
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://api:5000;
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;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
负载均衡
# /etc/nginx/conf/loadbalance.conf
upstream api_servers {
server api1:5000;
server api2:5000;
server api3:5000;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://api_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
HTTPS 配置
# /etc/nginx/conf/https.conf
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
root /usr/share/nginx/html;
expires 30d;
add_header Cache-Control "public, immutable";
}
常用命令
# 测试配置
docker exec -it nginx nginx -t
# 重新加载配置
docker exec -it nginx nginx -s reload
# 查看日志
docker logs -f nginx
# 查看连接数
docker exec -it nginx nginx -V
运维建议
| 建议 | 说明 |
|---|---|
| 配置备份 | 定期备份配置文件 |
| 日志轮转 | 配置日志轮转 |
| SSL 证书 | 定期更新 SSL 证书 |
| 监控 | 监控连接数、请求量 |
故障排查
| 问题 | 解决方案 |
|---|---|
| 502 Bad Gateway | 检查后端服务是否运行 |
| 403 Forbidden | 检查文件权限 |
| 404 Not Found | 检查文件路径 |
| 配置错误 | 使用 nginx -t 测试配置 |