通过docker容器部署https访问的NGINX应用
▶ 应用目录准备
存储配置文件
[root@server ~]# mkdir -p nginxdir/nginx/conf.d
存储证书文件
[root@server ~]# mkdir -p nginxdir/nginx/certs
存储网站文件
[root@server ~]# mkdir -p nginxdir/app
▶ 文件准备
▷ 证书文件准备
由于属于实验性质,所以在其他的网站来做 SSL 证书的生成如:https://www.toolhelper.cn/SSL/SSLGenerate
这里使用的 IP或者域名 是 www.example.com。
这样就有了后面需要的 cert.pem 和 private.key 这两个文件,将这两个的文件后缀之前改为 www.example.com
[root@server ~]# cd nginxdir/nginx/certs/
[root@server certs]# ll
total 8
-rw-r--r--. 1 root root 1255 Oct 25 10:53 www.example.com.pem
-rw-r--r--. 1 root root 1714 Oct 25 10:53 www.example.com.key
▷ 网站文件的准备
[root@server nginx]# echo "ssl test" >> /root/nginxdir/app/index.html
[root@server nginx]# cd /root/nginxdir/app/
[root@server app]# ll
total 4
-rw-r--r--. 1 root root 9 Oct 25 11:01 index.html
▷ 配置文件的准备
容器的配置文件提取:可以使用 docker exec 选项进入容器中查看具体的配置位置。
当前 nginx 容器的配置文件的路径是:/etc/nginx/conf.d/default.conf 这是为后面的 docker cp 来做准备。
[root@server conf.d]# pwd
/root/nginxdir/nginx/conf.d
[root@server conf.d]# docker cp 7536fd2d7852:/etc/nginx/conf.d/default.conf .
Successfully copied 3.07kB to /root/nginxdir/nginx/conf.d/.
[root@server conf.d]# ll
total 4
-rw-r--r--. 1 root root 1093 Oct 25 11:04 default.conf
这样 docker host 主机的 /root/nginxdir/nginx/conf.d/ 就有 default.conf 这个文件了。
1 server {
2 listen 80;
3 listen [::]:80;
4 server_name localhost;
改为 ==>
1 server {
2 listen 80;
3 listen 443 ssl;
4 server_name www.example.com;
如果需要证书的话则需要添加两行,一行是ssl证书文件,一个是key文件。
6 #access_log /var/log/nginx/host.access.log main;
7
8 location / {
改为 ==>
6 #access_log /var/log/nginx/host.access.log main;
7 ssl_certificate /etc/nginx/certs/www.example.com.pem;
8 ssl_certificate_key /etc/nginx/certs/www.example.com.key;
9
10 location / {
这样就做好配置文件了。
[root@server nginx]# ll
total 0
drwxr-xr-x. 3 root root 57 Oct 25 10:58 certs
drwxr-xr-x. 2 root root 50 Oct 25 11:33 conf.d
[root@server nginx]# cd ..; ls
app nginx
▶ 使用 docker run 运行应用
[root@server ~]# docker run --name mynginx -d \
> -p 80:80 -p 443:443 \
> -v /root/nginxdir/nginx/conf.d/:/etc/nginx/conf.d \
> -v /root/nginxdir/nginx/certs/:/etc/nginx/certs \
> -v /root/nginxdir/app/:/usr/share/nginx/html/ \
> --restart always \
> nginx
b614a2887c7a5994b9f0f04dbbe62b3921ac66915ab5405f0cf8ee4a901b1300
[root@server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b614a2887c7a nginx "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp mynginx
▷ 访问测试
由于是之前网站生成的 SSL 证书不是 CA 机构颁发的证书,仅用于学习、测试使用(比如使用 Nginx 部署 HTTPS 网站)。
部署的 HTTPS 网站在访问时,会提示不受信任的证书。
该文档是参考流程。
▷ 从 http:// 跳转 https://
修改 nginx 中的 default.conf。
1 server {
2 listen 80;
3 listen 443 ssl;
4 server_name www.example.com;
改为 ==>
1 server {
2 listen 80;
3 server_name www.example.com;
4 return 301 https://$host$request_uri;
5 }
6
7 server {
8 listen 443 ssl;
9 server_name www.example.com;
修改后 1-5 行是新的添加的内容,之前的 server 块中的 listen 80; 被改到了新建的上面的 server 块中。

浙公网安备 33010602011771号