Docker 部署 Nginx 指南
基本介绍
Nginx 是一个高性能的 HTTP 和反向代理服务器。通过 Docker 部署 Nginx 可以快速搭建 Web 服务器环境,实现静态网站托管、负载均衡等功能。
环境要求
- Docker Engine 已安装(版本 20.10.0 或更高)
- 基本的 Docker 命令使用经验
- 对 Nginx 配置有基本了解
基础部署
1. 创建项目结构
# 创建项目目录
mkdir nginx-docker
cd nginx-docker
# 创建必要的子目录
mkdir -p html conf.d
2. 准备网站文件
在 html
目录下创建一个示例 index.html
:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx on Docker!</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 40px auto;
max-width: 800px;
padding: 20px;
}
</style>
</head>
<body>
<h1>Welcome to Nginx on Docker!</h1>
<p>If you see this page, the Nginx web server is successfully installed and working.</p>
</body>
</html>
3. 创建 Nginx 配置文件
在 conf.d
目录下创建 default.conf
:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
4. 编写 Dockerfile
在项目根目录创建 Dockerfile
:
# 使用官方 Nginx 镜像作为基础镜像
FROM nginx:alpine
# 将自定义的 Nginx 配置文件复制到容器中
COPY conf.d/default.conf /etc/nginx/conf.d/default.conf
# 将网站文件复制到容器中
COPY html /usr/share/nginx/html
# 暴露 80 端口
EXPOSE 80
# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
5. 构建镜像
# 构建 Docker 镜像
docker build -t my-nginx .
6. 运行容器
# 运行 Nginx 容器
docker run -d -p 80:80 --name nginx-server my-nginx
现在可以通过访问 http://localhost
来查看网站。
高级配置
1. 使用数据卷
为了方便管理配置文件和网站内容,可以使用数据卷:
# 使用数据卷运行容器
docker run -d \
-p 80:80 \
-v $(pwd)/html:/usr/share/nginx/html \
-v $(pwd)/conf.d:/etc/nginx/conf.d \
--name nginx-server \
my-nginx
2. 配置 HTTPS
在 conf.d
目录下创建 ssl.conf
:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
修改 Dockerfile 添加 SSL 支持:
FROM nginx:alpine
# 创建存放证书的目录
RUN mkdir -p /etc/nginx/ssl
# 复制 SSL 证书
COPY ssl/nginx.crt /etc/nginx/ssl/
COPY ssl/nginx.key /etc/nginx/ssl/
COPY conf.d /etc/nginx/conf.d
COPY html /usr/share/nginx/html
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
3. 配置反向代理
在 conf.d
目录下创建 proxy.conf
:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend-service;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
upstream backend-service {
server backend1:8080;
server backend2:8080;
}
常见问题处理
1. 容器无法启动
- 检查端口是否被占用
- 确认配置文件语法正确
- 查看容器日志:
docker logs nginx-server
2. 访问网站 404
- 确认网站文件已正确复制到容器中
- 检查 Nginx 配置中的 root 路径
- 确认文件权限正确
3. 性能优化
可以通过修改 Nginx 配置来优化性能:
# 在 nginx.conf 中添加
worker_processes auto;
events {
worker_connections 1024;
}
http {
keepalive_timeout 65;
client_max_body_size 10M;
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
最佳实践
安全性考虑
- 使用非 root 用户运行 Nginx
- 定期更新基础镜像
- 配置适当的访问控制
日志管理
- 配置日志轮转
- 使用数据卷持久化日志
- 考虑使用日志聚合系统
监控
- 配置健康检查
- 使用 Docker 的监控工具
- 设置告警机制