docker 安装最新nginx并实现https,并解决微信小程序文件校验

原创
2023/02/03 21:06
阅读数 48
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

最近自己研究微信小程序的实现,但是当买了服务器,买了域名并备案,才发现微信小程序服务端接口尽然要求我是https的。并发现了云服务中有一键HTTPS,但是要钱而且对于我来说他还真不便宜,毕竟只是一个学习项目。于是自己摸索的前进完成相关任务。

环境及其配置

首先我的所有花钱和不花钱的都是用的腾讯的,建议大家最好选择同一个服务商,不然你域名、证书、服务器都不在一个运营商的话有很多麻烦。

选择腾讯轻量级服务器(小配置玩玩),选择Docker应用镜像,操作系统CentOS 7.6 64bit 、Docker 19.03.9

安装Docker

因为服务器自带了docker,就不在安装docker了。如果没安装安如下流程安装

移除老的docker相关文件

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 

安装yum相关工具,配置docker源地址

sudo yum install -y yum-utils

sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker(我的版本是1.23.3)

sudo yum install -y docker-ce docker-ce-cli containerd.io

安装Nginx

下载nginx

# 安装
docker pull nginx

# 安装后查看docker镜像
docker images

了解docker的都知道,docker容器启动后,容器内部有自己的文件系统,配置文件也在里面。
因此我们需要把配置文件挂载到外部,就是我们的linux服务器上。
这样我们每次需要修改nginx的配置文件的时候,只要修改挂载到外部的文件,容器内的文件也会相应改变,能省很多功夫。
强烈建议挂载文件!!!不然的话会有很多坑,自身的血泪说出这句话。
要挂载文件,首先需要启动nginx,进去容器内部查看配置文件在哪里,并将其复制出来:

# 启动nginx
docker run --name nginx -p 80:80 -d nginx

# 进入docker的nginx容器
docker exec -it nginx bash

确定进入容器内部后,用下面两个命令查找nginx的配置文件在哪:

# 查找nginx配置文件default.conf 
# 这个在/etc/nginx/conf.d/default.conf
find / -name "default.conf"

# 查找nginx配置文件nginx.conf 
# 这个在/etc/nginx/nginx.conf
find / -name "nginx.conf"
# 注:两者不在同一目录下。

我把文件拷出来后运行,发现报错,mine.type等等,主要的配置文件又都在/etc/nginx/下面所以...粗暴一点点把这都copy出来,也为了配置静态页面,和查看log所以下面我就一步到位:  是要敲黑板的

docker run -d --name ng -p 81:80 nginx && \
mkdir -p /opt/nginx &&  \
docker cp ng:/etc/nginx/  /opt/nginx/conf && \
docker cp ng:/usr/share/nginx/html  /opt/nginx/html && \
docker cp ng:/var/log/nginx  /opt/nginx/log  && \
docker rm -f ng && \
docker run -d \
--name nginx  \
--privileged=true \
--restart always \
-v /opt/nginx/html:/usr/share/nginx/html \
-v /opt/nginx/log:/var/log/nginx \
-v /opt/nginx/conf:/etc/nginx  \
-p 80:80 -p 443:443 \
nginx

# 简单粗暴一步搞定,当然你也可以分开执行,至于copy的目录,可以自定义

-p命令表示容器内部和外部监听的端口,这部分不细说。
-v表示挂载的文件,-v [该文件在容器外部的位置]:[该文件在容器内部的位置]
使用下面的命令查看是否启动成功:

# 查看正在运行的容器
docker ps

# 查看全部容器,包括没有启动的容器
# 如果上面的命令出现的列表没有nginx,使用这个命令
docker ps -a

# 如果确定启动失败了,查看日志定位失败的原因
docker logs nginx

当nginx启动成功后,我们只需要修改配置文件,就可以实现多个域名和https访问的需求啦。nginx的配置文件有两个,nginx.confdefault.conf
点开看nginx.conf的话,会发现里面引入了default.conf的内容,也就是说这是一个文件分成两个文件来写。
我们只需要修改default.conf的内容即可达到我们的目的。
这里粘一下linux编辑文本的命令:

# 打开文件
vim 文件名

# 进入默认不可编辑,需要按下i后才可以编辑

# 编辑完成后,需要按esc退出编辑状态

# 退出并保存
:wq

# 退出不保存
:q!

创建证书和微信小程序校验文件的目录

# 相当于在nginx的容器中的/etc/nginx/下面创建了2个目录
# file 存一些静态文件
mkdir /opt/nginx/conf/file -p
# 存放证书文件
mkdir /opt/nginx/conf/cert -p

接下来就是修改default.conf的内容为如下,需根据你的情况做出改变

server {
    listen 80; #侦听80端口
    listen 443 ssl; #侦听443端口,用于SSL
    server_name 你的域名.com www.你的域名.com;  # 自己的域名
    # 注意证书文件名字和位置,是从/etc/nginx/下开始算起的
    ssl_certificate cert/你的域名.com_bundle.crt;
    ssl_certificate_key cert/你的域名.com.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;

    client_max_body_size 1024m;

    location / {
		# 指定你跳转的地址
        proxy_pass http://*.*.*.*:8090;
    }
	
	error_page   500 502 503 504  /50x.html;
	location = /50x.html {
        root   /usr/share/nginx/html;
    }
	
	# 这个AZ2UnJT5vX.txt就是微信小程序的校验文件,通过后就能把服务器域名添加成功
	location = /AZ2UnJT5vX.txt {
		# 地址写法必须以容器内部的写法
        root   /etc/nginx/file/;
    }
}

配置完毕后,保存、停止容器再重启

# 停止nginx
docker stop nginx

# 启动容器
docker start nginx

# 查看是否启动成功
docker ps

最后是看微信小程序文件是否能访问了

最后收工,又节约了不少钱钱。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部