在阿里云或其它网站申请ssl证书,接着会给出两种验证方式来让你证明服务器是本人的,一种是dns验证,一种是文件验证,我因为申请的二级域名地址对应的是docker中nginx容器的端口,所以我就用文件验证来解决。
上图是阿里云上文件验证所需要执行的路径,通过下载验证文件,放到服务器里,然后访问验证文件来验证是否是本人的服务器。
先说我的验证思路,因为我的二级域名对应的地址是服务器ip地址加上docker中nginx的反代端口地址,也就意味着我即使将验证文件放在阿里云指定的目录下,也是无法访问到的,访问我的域名地址都会经过nginx反代,显示的就是nginx报404错;
所以第一步需要在nginx的反代配置中配置好阿里云指定的目录,当访问指定的验证目录时能够访问到文件;
但是这样还是不能访问到验证文件,因为我的nginx搭建在docker里面,所以我还需要将反代配置中指定验证的目录访问的目录共享出来,通过访问docker中nginx的目录来访问共享的服务器目录就能完成验证了。
实现步骤:
server {
listen 9192;
server_name localhost;
location ~/.well-known/pki-validation/ {
root /html;
}
}
nginx的配置中我设置成如果访问的地址是http://域名地址/.well-known/pki-validation/,则实际访问的是nginx的/html/.well-known/pki-validation/目录;
version: '3'
services:
nginx:
image: nginx:latest # 镜像`nginx:latest`
container_name: hs-nginx # 容器名为'hs-nginx'
privileged: true
restart: always # 指定容器退出后的重启策略为始终重启
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./conf/conf.d:/etc/nginx/conf.d"
- "./log:/var/log/nginx"
- "./html:/html/.well-known/pki-validation"
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
ports: # 映射端口
- "9192:9192"
- "443:443"
在docker-compose设置里,将nginx容器中的/html/.well-known/pki-validation目录共享出到服务器的html目录里(./ 表示当前路径),然后将阿里云上提供的验证文件下载下来(注意:需要将压缩包里的文件解压出来,验证文件在压缩包里),将验证文件放到服务器的./html目录里,然后就验证成功了。