《Docker》阿里云服务器docker部署nginx并配置https踩坑记录(完整)
Oliver尹
分类专栏: 一些踩过的坑得留档 文章标签:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/zy21131437/article/details/128273116 版权
55 篇文章 订阅专栏
前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 《Docker》阿里云服务器docker部署nginx并配置https踩坑记录(完整)
一、前言 今天在为阿里云服务器续期的时候发现原来阿里云上面也可以 申请免费的ssl证书,而博主平时玩耍的域名一直是http的方式访问的,于是,很自然的想搞一个证书,将http改为https; 完成整个流程大致分为这么几步: 在阿里云上申请免费证书,申请成功后会得到一个包含两个文件的压缩包,这个压缩包就是ssl证书本体(注意:证书必须绑定域名,因此想要申请证书的前提是你得有一个域名,并且这个域名是认证备案过的); 确认阿里云服务器443端口状态,由于https默认的端口是443,因此,在这一步中需要确认阿里云服务器的443端口是否被手动添加,阿里云服务器默认是不会主动开放这些端口的,如果不开放,那自然443端口就会访问不了; nginx配置443端口的参数,这一步的目的配置证书,这个证书就是来自于第一步中申请的,证书一共有两个,1个 .key格式,另外一个 .pem格式; 重写http的访问至https,也就是改写80端口的访问,使得http的格式访问时自动重写地址到https上; 这样,基本就完成https证书的配置,配置完成后,重启nginx,之后可以通过 https://域名 直接访问了,示例图如下: 这一步的目的,就是为了 获得SSL证书的压缩包,如果已经有了证书,那么这一步可以跳过,这个压缩包包含了两个文件,一个以 .key结尾,另外一个以 .pem 结尾,这两个证书后面都需要配置到Nginx的参数里,下面是具体步骤: 首先登陆阿里云官方网站,地址如下:https://www.aliyun.com/,登录账号,进入控制台界面 点击右上角的菜单,选择:安全 -> 云安全 -> SSL证书(应用安全);或者直接在搜索栏搜索SSL也可; 选择:SSL证书 -> 免费证书 -> 立刻购买,在这一步中我们要先购买一个服务,然后在这个服务下创建证书; 选择一下购买的选项,具体可以按照自己的需求,或者可以跟随博主一样配置即可,这里面最主要的参数是 购买数量,这个决定了后面你这个服务 一共能创建多少个证书,假如有20个以上的域名是需要配置成https的,那么就不能选20~ 购买完成后,点击 “创建证书”,点击 “创建证书” 后会在下方列表中生成一个证书,点击右侧操作栏的 “证书申请” 据需表单 填写 域名信息,注意的是域名是全信息,比如:,不要简写~ 验证DNS,验证 需要为域名添加一条DNS记录,用来验证是否合法,注意,如果域名是在别的服务商注册的,并不是在阿里云注册的域名,那么需要根据提示操作,DNS记录如下,DNS添加完成后,点击“验证”按钮,可以得到是否通过,通过后,点击“购买” 申请很快的,一般10分钟左右即可申请完成,博主申请的时候大概用时7分钟不到,申请完成后,可以在主界面看到记录,之后,点击“下载”,可得到我们需要的 SSL证书压缩包; 在这一步中,我们所有的操作均是在网站上完成的,并不涉及到代码,完成后,我们最终得到了一个包含 .key文件 和 .pem文件 的压缩包,这两个文件我们需要最终配置到nginx里,另外这两个文件非常重要,非常重要,非常重要,务必保管好,请勿给别人使用~ 3.2 服务器端口状态开启在这一步中,我们需要 确认服务器的端口状态,如果确认服务器端口443已经开放,那么这一步可以跳过,直接看下一小节~
打开阿里云的官网,点击控制台,选择云服务器ECS,进入云服务的操作界面,点击菜单中的“安全组”选项;
点击 服务器列表 中,服务器的“配置规则”按钮,进入配置规则界面;
点击“手动添加”,在目的一栏中输入:443/443,点击“保存”;
保存成功后,可在列表中查看到该条配置记录; 在这一步中,我们的所有操作也还是在阿里云网站上的(因为博主的服务器在阿里云…),我们的目的说到底,就是为了将阿里云默认关掉的443端口给开放出来,不然通过443访问不了我们的服务器~ 3.3 配置nginx参数首先远程连接到服务器,博主使用的是FinalShell,因此以下截图都是以FinalShell截的图,如果不一样或者有问题可以留个言,虽然我也不大会,可以交流交流…(PS:docker我是个半吊子…所以踩了好多坑) 3.3.1 部署过Nginx找到nginx的配置文件,一般而言,在使用docker部署nginx的时候都会讲nginx的配置文件给映射出来,因此得找到这个配置文件 找到配置文件,由于我这个配置文件是使用的默认名字,因此文件名就叫做:default.conf; 使用 vim在线编辑 或者 干脆下载下来后在本地编辑完上传覆盖,编辑的目的是为了将443端口加上 server { listen 443; server_name 申请证书的域名地址; ssl_certificate /etc/nginx/cert/申请证书的pem文件.pem; #填写解压的pem文件 ssl_certificate_key /etc/nginx/cert/申请证书的key文件.key; #填写解压的key文件 ssl on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 50m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; location / { root /usr/share/nginx/html; } }这里有几个参数注意一下: 第二个:ssl_certificate 和 ssl_certificate_key,这两个对应的文件是刚刚在第一小节里面申请下载的SSL证书,后面的参数也就是示例里面的 /etc/nginx/cert/ 这个是当初使用docker部署nginx映射出来的路径,如果不记得,或者弄不清楚,那么恭喜,干脆删掉nginx容器重新起一个吧…博主在这里纠结了好久,总是路径不对,nginx起不起来报错,找不到对应的 pem文件 和 key文件 重启过后,查看一下是nginx否启动成功,如果启动成功,那么说明已经识别到了SSL证书,那此时https已经配置完成了,访问:https://www.xxxxxx.com,应该也是可以访问成功的; 2022/12/06 05:14:50 [emerg] 1#1: cannot load certificate “/etc/nginx/cert/8944652_”: BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/nginx/cert/xxxxx_’,‘r’) error:2006D080:BIO routines:BIO_new_file:no such file) 这种错误,那么就是路径配置异常,就是存放证书的地址配置错误,nginx启动的时候在这个路径下没有找到 .pem文件 和 .key文件,因此就报错,启动不起来了~如果是在不知道怎么设置路径,或者已经忘记当初映射是怎么弄的了,那可能就要重新起一个nginx了… 3.3.2 没有部署过Nginx由于没有部署过nginx,因此首先,先查看docker容器中是否已下载nginx的镜像, docker images如果没有镜像,那么通过docker命令docker pull nginx先下载下来; 分段备注一下: 之后,将申请到的证书文件,也就是 .key文件 和 .pem文件 放到cert文件夹中 接着,将nginx的配置文件上传到 /usr/docker/mynginx/conf.d这个文件夹下,配置文件如下: server{ # 80 http端口号 443 https端口号 listen 80; server_name 服务器地址; rewrite ^(.*)$ https://$host$1; } server { listen 443; server_name www.xxxxxx.com; ssl_certificate /etc/nginx/cert/6941234_www.xxxxxx.com.pem; #填写解压的pem文件 ssl_certificate_key /etc/nginx/cert/6941234_www.xxxxxx.com.key; #填写解压的key文件 ssl on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 50m; location / { root /usr/share/nginx/html; } 重新启动nginx docker restart 容器id重启过后,查看一下是nginx否启动成功,如果启动成功,那么说明已经识别到了SSL证书,那此时https已经配置完成了,访问:https://www.xxxxxx.com,应该也是可以访问成功的; 在上一小结其实已经写了,就是将nginx配置文件中监听80端口的语句进行改写,改写的内容如下: rewrite ^(.*)$ https://$host$1;完整的配置内容 server{ # 80 http端口号 listen 80; server_name 服务器地址; rewrite ^(.*)$ https://$host$1; }当用http协议访问80端口时,重写访问地址至https上,这样就可以杜绝使用http访问站点了~ 四、小结总的来说过程并不复杂,我卡主的点基本都在与路径的配置上,由于之前已经部署过nginx,且忘记了docker中路径的映射,导致我怎么上传文件怎么报错,完全没办法启动nginx…后来实在没有办法,将nginx容器删掉,重新部署了一遍,这一次加上了存储证书路径的地址,才成功将https部署上; |