1. 阿里云ECS服务器Docker环境准备
在阿里云ECS上部署Nginx服务前,需要先完成Docker环境的配置。我推荐使用CentOS 7或Ubuntu 20.04 LTS作为基础操作系统,这两个版本在阿里云上有长期支持且稳定性较好。
1.1 Docker安装与配置
对于CentOS系统,执行以下命令安装Docker:
bash复制# 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装必要工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker引擎
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
注意:阿里云ECS默认的yum源可能较慢,建议先配置阿里云镜像加速源。可以执行
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo替换官方源。
验证Docker安装是否成功:
bash复制sudo docker run hello-world
如果看到"Hello from Docker!"的输出,说明安装正确。
1.2 阿里云容器镜像服务配置
阿里云提供了免费的容器镜像服务,可以显著提升镜像拉取速度:
bash复制# 登录阿里云容器镜像服务
sudo docker login --username=你的阿里云账号 registry.cn-hangzhou.aliyuncs.com
# 创建镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://你的专属加速地址.mirror.aliyuncs.com"]
}
EOF
# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Nginx容器部署实战
2.1 拉取Nginx官方镜像
推荐使用官方Nginx镜像的最新稳定版:
bash复制docker pull nginx:latest
提示:生产环境建议指定版本号而非latest标签,如
nginx:1.21.6,避免因版本更新导致配置不兼容。
2.2 目录结构与配置文件准备
在宿主机上创建必要的目录结构:
bash复制mkdir -p /data/nginx/{conf,html,logs}
目录用途说明:
/data/nginx/conf:存放Nginx主配置文件/data/nginx/html:存放静态网站文件/data/nginx/logs:存放访问日志和错误日志
创建默认的Nginx配置文件/data/nginx/conf/nginx.conf:
nginx复制user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Gzip压缩配置
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
include /etc/nginx/conf.d/*.conf;
}
2.3 启动Nginx容器
使用以下命令启动容器:
bash复制docker run -d --name nginx \
-p 80:80 \
-p 443:443 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/logs:/var/log/nginx \
--restart always \
nginx:latest
参数说明:
-d:后台运行容器--name:指定容器名称-p:端口映射(宿主机端口:容器端口)-v:目录挂载(宿主机目录:容器目录)--restart always:容器退出时自动重启
2.4 验证服务运行状态
检查容器是否正常运行:
bash复制docker ps -a | grep nginx
如果状态为"Up",说明容器已启动。可以通过以下命令测试:
bash复制curl http://localhost
或者在浏览器访问ECS的公网IP地址,应该能看到Nginx的欢迎页面。
3. Nginx高级配置实战
3.1 多站点配置
在实际项目中,我们通常需要配置多个虚拟主机。在/data/nginx/conf目录下创建conf.d文件夹:
bash复制mkdir /data/nginx/conf/conf.d
创建一个示例站点配置/data/nginx/conf/conf.d/example.com.conf:
nginx复制server {
listen 80;
server_name example.com www.example.com;
access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log warn;
root /usr/share/nginx/html/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
然后在/data/nginx/html下创建对应的网站目录:
bash复制mkdir -p /data/nginx/html/example.com
echo "<h1>Welcome to example.com</h1>" > /data/nginx/html/example.com/index.html
最后重新加载Nginx配置:
bash复制docker exec nginx nginx -s reload
3.2 SSL证书配置
在阿里云SSL证书服务申请免费证书后,将证书文件上传到服务器:
bash复制mkdir -p /data/nginx/ssl/example.com
# 上传证书文件到该目录
# fullchain.pem - 证书链文件
# privkey.pem - 私钥文件
修改站点配置启用HTTPS:
nginx复制server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# 其他配置...
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
4. 性能优化与安全加固
4.1 容器资源限制
为防止单个容器占用过多资源,可以设置资源限制:
bash复制docker update nginx \
--cpus 1 \
--memory 512m \
--memory-swap 1g \
--restart always
4.2 Nginx性能调优
修改nginx.conf中的以下参数:
nginx复制worker_processes auto; # 自动设置为CPU核心数
worker_rlimit_nofile 65535; # 每个worker能打开的最大文件数
events {
worker_connections 4096; # 每个worker的最大连接数
multi_accept on; # 一次接受所有新连接
use epoll; # 使用epoll事件模型
}
http {
# 其他配置...
client_max_body_size 20m; # 上传文件大小限制
client_body_buffer_size 128k; # 请求体缓冲区大小
sendfile_max_chunk 512k; # 每次sendfile调用的最大传输量
keepalive_requests 1000; # 单个连接的最大请求数
keepalive_timeout 30s; # 连接超时时间
}
4.3 安全加固措施
- 隐藏Nginx版本信息:
nginx复制server_tokens off;
- 防止点击劫持:
nginx复制add_header X-Frame-Options "SAMEORIGIN";
- 启用XSS保护:
nginx复制add_header X-XSS-Protection "1; mode=block";
- 禁用不安全的HTTP方法:
nginx复制if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
- 限制敏感文件访问:
nginx复制location ~* /(\.git|\.svn|\.htaccess|\.env) {
deny all;
}
5. 日常维护与监控
5.1 日志管理与分析
Nginx日志默认存储在/data/nginx/logs目录。可以配置日志轮转:
bash复制docker exec nginx bash -c 'cat > /etc/logrotate.d/nginx <<EOF
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
/usr/sbin/nginx -s reload > /dev/null 2>&1 || true
endscript
}
EOF'
5.2 容器备份与恢复
备份Nginx配置和网站数据:
bash复制# 备份配置
tar czvf nginx_backup_$(date +%Y%m%d).tar.gz /data/nginx
# 备份容器
docker commit -p nginx nginx_backup
docker save -o nginx_backup.tar nginx_backup
恢复容器:
bash复制docker load -i nginx_backup.tar
docker run -d --name nginx_restored \
-p 80:80 -p 443:443 \
-v /data/nginx/conf:/etc/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/logs:/var/log/nginx \
--restart always \
nginx_backup
5.3 性能监控
使用Docker stats查看容器资源使用情况:
bash复制docker stats nginx
安装cAdvisor进行更详细的监控:
bash复制docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:v0.47.0
访问http://ECS公网IP:8080即可查看容器监控数据。
