在部署之前,请确保大家已经安装了Docker,并且有一个可用的Nginx镜像。同时,大家需要准备SSL证书(.crt
文件)和私钥(.key
文件),这些文件将用于HTTPS加密通信。
1. 创建必要的目录和文件
首先,在你的宿主机上创建用于存储Nginx配置文件和SSL证书的目录。假设我们使用以下路径:
- 配置文件目录:
/usr/local/docker/nginx/config/conf.d
- SSL证书目录:
/usr/local/docker/nginx/https
将你的SSL证书(如ssl.crt
和ssl.key
)复制到/usr/local/docker/nginx/https
目录下。
2. 编写Nginx配置文件
接下来,我们需要编写Nginx的配置文件。在/usr/local/docker/nginx/config/conf.d
目录下,创建两个文件:http.conf
和https.conf
。
http.conf
这个文件用于处理HTTP请求,并将它们重定向到HTTPS。
server {
listen 80;
listen [::]:80;
server_name 域名/IP地址;
重定向地址
return 301 https://server_namerequest_uri;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
https.conf
这个文件配置了HTTPS服务器,包括SSL证书的路径和代理设置(如果你需要将请求转发到后端服务)。
server {
listen 443 ssl;
listen [::]:443;
server_name 域名地址/IP地址;
注意文件位置
ssl_certificate /ssh/ssh.crt;
ssl_certificate_key /ssh/ssh.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
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;
proxy_pass http://IP或者域名:端口号;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
注意:在https.conf
中,请确保ssl_certificate
和ssl_certificate_key
的路径与你的证书文件在Docker容器中的挂载路径相匹配。由于我们稍后会将/usr/local/docker/nginx/https
目录挂载到容器的/etc/nginx/https
,因此这里使用了/etc/nginx/https/ssl.crt
和/etc/nginx/https/ssl.key
。
3. 启动Docker容器
现在,我们可以使用Docker命令来启动Nginx容器,并挂载配置文件和SSL证书目录。
#!/bin/bash
docker run -d --name nginx \
-p 80:80 -p 443:443 \
-v /usr/local/docker/nginx/config/conf.d:/etc/nginx/conf.d \
-v /usr/local/docker/nginx/https:/https \
--privileged=true \
--restart=always \
nginx
这个命令做了以下几件事:
使用nginx镜像启动一个名为nginx的容器。
将宿主机的80和443端口映射到容器的80和443端口。
将宿主机的配置文件目录和SSL证书目录挂载到容器内相应的位置。
设置容器为特权模式(通常不需要,除非你有特殊需求)。
设置容器在退出时自动重启。
4. 验证配置
启动容器后,大家可以通过访问大家的域名或IP地址来验证Nginx是否正在运行,并且HTTP请求是否被正确地重定向到HTTPS。