跳到主要内容

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 测试配置

相关文档