目录:
创建目录结构如下:
|-- myapp
|-- html/ # 静态资源文件
|-- index.html
|-- nginx.conf # nginx 配置文件
|-- Dockerfile # Dockerfile
html/index.html 内容如下:
<h1 style="color: red;">docker nginx demo</h1>
nginx.conf 内容如下:
server {
listen 80;
server_name localhost; # 可替换为您的域名
# 访问日志和错误日志路径,将写入挂载的logs目录
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
# 网站根目录,对应挂载的html目录
root /usr/share/nginx/html;
index index.html index.htm;
# 以下一行对于 Vue、React 等单页应用 (SPA) 的路由模式至关重要
try_files $uri $uri/ /index.html;
}
# 可选的错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Dockerfile 内容如下:
FROM nginx:alpine
# 复制 nginx 配置文件
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 复制静态资源文件
COPY html /usr/share/nginx/html
# 对外暴漏端口
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
构建镜像:
$ docker build -t my-nginx-website .
运行容器:
$ docker run -d \
--name my-website \
-p 80:80 \
my-nginx-website
运行容器后,在浏览器中访问 http://localhost 就可以看到效果了。
如果是开发环境,在运行容器时可以添加 -v 参数挂载配置文件和静态资源文件。
$ docker run -d \
--name my-website \
-p 80:80 \
-v ./nginx.conf:/etc/nginx/conf.d/default.conf \
-v ./html:/usr/share/nginx/html \
-v ./logs:/var/log/nginx \
my-nginx-website
修改 html/index.html 文件,刷新浏览器,看到页面已经更新了。
修改 nginx.conf,配置不会立即生效,其实 Nginx 容器内配置文件内容已改变,但还需要执行一条命令让配置生效。
$ docker exec <nginx-container-id> nginx -s reload
使用域名和 HTTPS 访问网站。
创建目录结构如下:
|-- myapp
|-- ssl/
|-- yourdomain.crt # 证书
|-- yourdomain.key # 私钥
|-- html/ # 静态资源文件
|-- index.html
|-- nginx.conf # nginx 配置文件
|-- Dockerfile # Dockerfile
HTTPS 需要证书,将申请好的证书和私钥放在 ssl 目录下。
html/index.html 内容如下:
<h1 style="color: red;">docker nginx https demo</h1>
nginx.conf 内容如下:
server {
listen 443 ssl;
server_name www.yourdomain.com; # 替换为您的域名
# SSL证书和私钥的路径(与Dockerfile中COPY的路径一致)
ssl_certificate /etc/nginx/ssl/yourdomain.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.key;
# 增强SSL安全性的配置
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3; # 推荐使用较新的安全协议
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
# 访问日志和错误日志路径,将写入挂载的logs目录
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
# 网站根目录,对应挂载的html目录
root /usr/share/nginx/html;
index index.html index.htm;
# 以下一行对于 Vue、React 等单页面应用 (SPA) 的路由模式至关重要
try_files $uri $uri/ /index.html;
}
# 可选的错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# 配置 HTTP 到 HTTPS 的重定向
server {
listen 80;
server_name www.yourdomain.com; # 替换为您的域名
# 将所有 HTTP 请求永久重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
Dockerfile 内容如下:
FROM nginx:alpine
# 将宿主机上的SSL证书和私钥复制到镜像内的指定目录
RUN mkdir -p /etc/nginx/ssl
COPY ssl/yourdomain.crt /etc/nginx/ssl/
COPY ssl/yourdomain.key /etc/nginx/ssl/
# 复制 nginx 配置文件
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 复制静态资源文件
COPY html /usr/share/nginx/html
# https 默认端口是 443,因此容器内需要对外暴露 443 端口
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
构建镜像:
$ docker build -t my-https-website .
运行容器:
$ docker run -d \
--name my-website \
-p 80:80 \
-p 443:443 \
my-https-website
运行容器后,在浏览器中访问 http://www.yourdomian.com 就可以看到效果了。
创建目录结构如下:
|-- myapp
|-- html/ # 静态资源文件
|-- index.html
|-- nginx.conf # nginx 配置文件
|-- docker-compose.yml
html/index.html 内容如下:
<h1 style="color: red;">docker nginx demo</h1>
nginx.conf 内容如下:
server {
listen 80;
server_name localhost; # 可替换为您的域名
# 访问日志和错误日志路径,将写入挂载的logs目录
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
# 网站根目录,对应挂载的html目录
root /usr/share/nginx/html;
index index.html index.htm;
# 以下一行对于 Vue、React 等单页应用 (SPA) 的路由模式至关重要
try_files $uri $uri/ /index.html;
}
# 可选的错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
docekr-compose.yml 文件如下:
services:
web:
image: my-nginx-website # 或直接使用 nginx:alpine,通过挂载提供所有配置
container_name: my-website
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf # 挂载配置
- ./html:/usr/share/nginx/html # 挂载网站文件
- ./logs:/var/log/nginx # 挂载日志
restart: always # 设置容器总是自动重启
使用以下命令启动和管理:
# 启动服务
$ docker-compose up -d
# 停止服务
$ docker-compose down
# 查看日志
$ docker-compose logs -f
使用域名和 HTTPS 访问网站。
创建目录结构如下:
|-- myapp
|-- ssl/
|-- yourdomain.crt # 证书
|-- yourdomain.key # 私钥
|-- html/ # 静态资源文件
|-- index.html
|-- nginx.conf # nginx 配置文件
|-- docker-compose.yml
HTTPS 需要证书,将申请好的证书和私钥放在 ssl 目录下。
html/index.html 内容如下:
<h1 style="color: red;">docker nginx https demo</h1>
nginx.conf 内容如下:
server {
listen 443 ssl;
server_name www.yourdomain.com; # 替换为您的域名
# SSL证书和私钥的路径(与Dockerfile中COPY的路径一致)
ssl_certificate /etc/nginx/ssl/yourdomain.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.key;
# 增强SSL安全性的配置
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3; # 推荐使用较新的安全协议
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
# 访问日志和错误日志路径,将写入挂载的logs目录
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
# 网站根目录,对应挂载的html目录
root /usr/share/nginx/html;
index index.html index.htm;
# 以下一行对于 Vue、React 等单页面应用 (SPA) 的路由模式至关重要
try_files $uri $uri/ /index.html;
}
# 可选的错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
# 配置 HTTP 到 HTTPS 的重定向
server {
listen 80;
server_name www.yourdomain.com; # 替换为您的域名
# 将所有 HTTP 请求永久重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
docekr-compose.yml 文件如下:
services:
web:
image: my-nginx-website # 或直接使用 nginx:alpine,通过挂载提供所有配置
container_name: my-website
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf # 挂载配置
- ./html:/usr/share/nginx/html # 挂载网站文件
- ./ssl:/etc/nginx/ssl:ro # 挂载 SSL 证书
- ./logs:/var/log/nginx # 挂载日志
restart: always # 设置容器总是自动重启
使用以下命令启动和管理:
# 启动服务
$ docker-compose up -d
# 停止服务
$ docker-compose down
# 查看日志
$ docker-compose logs -f
运行容器后,在浏览器中访问 http://www.yourdomian.com 就可以看到效果了。
↶ 返回首页 ↶