1、环境
我有一个springboot的web应用,在docker外面运行这。不会springboot的同学,可以脑补下,有一个tomcat应用程序在服务器里面跑着。web应用用的是80端口。
我现在准备使用nginx将我的http请求变成https。
我准备的ssl证书是阿里云申请的免费证书,我的域名是阿里云购买的,并且进行了备案。
我通过http://域名:80端口是可以访问我的web应用的(web应用可以运行)。
2、docker准备nginx
使用docker pull nginx:1.20.1,下载一个新鲜的nginx镜像。
因为nginx监听的端口有80与433,但是我们的80端口被我原本的web应用占用了。这里我只能将另一个端口通过nginx转成80端口。
我们使用docker run -d -p 8081:80 -p 433:433 --name mynginx nginx的id启动我们的nginx
这里我没有做外部配置文件或文件夹的映射,有兴趣可以自己尝试下,都是一样的。
3、配置nginx
进去到nginx容器中,我们先在/etc/nginx,使用mkdir ssl创建一个文件夹,等会我们将ssl证书传到这里。
我们进入到/etc/nginx/conf.d文件夹下
使用vim default.conf编辑配置文件(如果提示你没有vim命令,可以通过apt-get update与apt-get install vim两命令安装vim)
我们将default.conf中的内容全部删掉,默认的配置我们不需要
server {
listen 80;
server_name example.xyz;
server_tokens off;
return 301 https://example.xyz$request_uri;
}
server {
listen 443 ssl http2;
server_name example.xyz;
server_tokens off;
ssl_certificate /etc/nginx/ssl/example.pem;
ssl_certificate_key /etc/nginx/ssl/example.key;
location / {
proxy_pass http://服务器ip地址:80;
}
}
这里有几个位置需要改成你自己的信息
第一个是所有的example.xyz:这个是你自己的域名,加入我的域名是baidu.com,那我就写baidu.com
第二个是http://服务器ip地址:80:因为我的web应用在外部,所以直接使用localhost或者127.0.0.1是不能找到我的web应用的,所以我们之间写服务器的ip地址
第三个是/etc/nginx/ssl/example.pem,/etc/nginx/ssl/example.key。这两个分别是ssl证书内容与钥匙。注意example.pem文件结尾不同没有关系的,只要你下载的文件正确就好。
4、将ssl证书拷贝到nginx容器中
我们先把证书文件通过xftp软件上传到服务器上
然后使用docker cp 文件地址 容器id:/etc/nginx/ssl/把ssl证书与key都拷贝到容器中的/etc/nginx/ssl文件夹中
然后重启nginx就可以了,docker restart 容器id
5、测试
这一步很简单,直接在浏览器中输入,http://域名:8081,或者https://域名就可以了
注意这个8081是进入我docker中nginx的端口
sudo docker run -d -p 8081:80 -p 443:443 -v /opt/picture/picture/ssl:/etc/nginx/ssl --name mynginx nginx