在docker的nginx里配置https

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 updateapt-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的端口

你可能感兴趣的:(服务器,nginx,docker,https)