《Docker》阿里云服务器docker部署nginx并配置https踩坑记录(完整)

news2025/1/6 17:16:36

前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~
来个关注吧,点个赞吧,谢谢

《Docker》阿里云服务器docker部署nginx并配置https踩坑记录(完整)

  • 一、前言
  • 二、步骤流程
  • 三、步骤详解
    • 3.1 阿里云上申请SSL证书
      • 小结
    • 3.2 服务器端口状态开启
      • 小结
    • 3.3 配置nginx参数
      • 3.3.1 部署过Nginx
      • 3.3.2 没有部署过Nginx
    • 3.4 重写http的访问至https
  • 四、小结

一、前言

今天在为阿里云服务器续期的时候发现原来阿里云上面也可以 申请免费的ssl证书,而博主平时玩耍的域名一直是http的方式访问的,于是,很自然的想搞一个证书,将http改为https
于是,有了本文这篇踩坑记录,耐心看完,你也许有所收获;
(注意:由于博主的服务器,域名均在阿里云购买,因此整个部署流程均在阿里云完成,其它服务器商不是太清楚,可能只有一定的参考价值~)

二、步骤流程

完成整个流程大致分为这么几步:

  1. 在阿里云上申请免费证书,申请成功后会得到一个包含两个文件的压缩包,这个压缩包就是ssl证书本体(注意:证书必须绑定域名,因此想要申请证书的前提是你得有一个域名,并且这个域名是认证备案过的);
  2. 确认阿里云服务器443端口状态,由于https默认的端口是443,因此,在这一步中需要确认阿里云服务器的443端口是否被手动添加,阿里云服务器默认是不会主动开放这些端口的,如果不开放,那自然443端口就会访问不了;
  3. nginx配置443端口的参数,这一步的目的配置证书,这个证书就是来自于第一步中申请的,证书一共有两个,1个 .key格式,另外一个 .pem格式
  4. 重写http的访问至https,也就是改写80端口的访问,使得http的格式访问时自动重写地址到https上;

这样,基本就完成https证书的配置,配置完成后,重启nginx,之后可以通过 https://域名 直接访问了,示例图如下:
在这里插入图片描述

三、步骤详解

3.1 阿里云上申请SSL证书

这一步的目的,就是为了 获得SSL证书的压缩包,如果已经有了证书,那么这一步可以跳过,这个压缩包包含了两个文件,一个以 .key结尾另外一个以 .pem 结尾,这两个证书后面都需要配置到Nginx的参数里,下面是具体步骤:

  1. 首先登陆阿里云官方网站,地址如下:https://www.aliyun.com/,登录账号,进入控制台界面
    在这里插入图片描述
  2. 点击右上角的菜单,选择:安全 -> 云安全 -> SSL证书(应用安全);或者直接在搜索栏搜索SSL也可;
    在这里插入图片描述
  3. 选择:SSL证书 -> 免费证书 -> 立刻购买,在这一步中我们要先购买一个服务,然后在这个服务下创建证书;
    在这里插入图片描述
  4. 选择一下购买的选项,具体可以按照自己的需求,或者可以跟随博主一样配置即可,这里面最主要的参数是 购买数量,这个决定了后面你这个服务 一共能创建多少个证书,假如有20个以上的域名是需要配置成https的,那么就不能选20~
    在这里插入图片描述
  5. 购买完成后,点击 “创建证书”,点击 “创建证书” 后会在下方列表中生成一个证书,点击右侧操作栏的 “证书申请
    在这里插入图片描述
  6. 据需表单 填写 域名信息,注意的是域名是全信息,比如:www.xxxx.com,不要简写~
    在这里插入图片描述
  7. 验证DNS,验证 需要为域名添加一条DNS记录,用来验证是否合法,注意,如果域名是在别的服务商注册的,并不是在阿里云注册的域名,那么需要根据提示操作,DNS记录如下,DNS添加完成后,点击“验证”按钮,可以得到是否通过,通过后,点击“购买”
    在这里插入图片描述在这里插入图片描述
  8. 申请很快的,一般10分钟左右即可申请完成,博主申请的时候大概用时7分钟不到,申请完成后,可以在主界面看到记录,之后,点击“下载”,可得到我们需要的 SSL证书压缩包
    在这里插入图片描述

小结

在这一步中,我们所有的操作均是在网站上完成的,并不涉及到代码,完成后,我们最终得到了一个包含 .key文件.pem文件 的压缩包,这两个文件我们需要最终配置到nginx里,另外这两个文件非常重要,非常重要,非常重要,务必保管好,请勿给别人使用~

3.2 服务器端口状态开启

在这一步中,我们需要 确认服务器的端口状态,如果确认服务器端口443已经开放,那么这一步可以跳过,直接看下一小节~
这里再简单的说一下吧,因为https默认使用的是服务器的443端口,就行http默认去访问了80端口一样,举个例子,当在浏览器中输入:www.xxx.com时,通过域名解析指向了某个服务器地址 xx.xx.xx.xx,当访问到了这个服务器地址后,会自动的去接入到服务器的80端口,因此访问xx.xx.xx.xx等同于访问xx.xx.xx.xx:80,https也同理,使用https自动会去访问xx.xx.xx.xx:443,所以,我们必须得去确认443端口是否开放,因为阿里云服务器这些端口默认都是被拦截掉的~

  1. 打开阿里云的官网,点击控制台,选择云服务器ECS,进入云服务的操作界面,点击菜单中的“安全组”选项;
    在这里插入图片描述

  2. 点击 服务器列表 中,服务器的“配置规则”按钮,进入配置规则界面;
    在这里插入图片描述

  3. 点击“手动添加”,在目的一栏中输入:443/443,点击“保存”;
    在这里插入图片描述

  4. 保存成功后,可在列表中查看到该条配置记录;
    在这里插入图片描述

小结

在这一步中,我们的所有操作也还是在阿里云网站上的(因为博主的服务器在阿里云…),我们的目的说到底,就是为了将阿里云默认关掉的443端口给开放出来,不然通过443访问不了我们的服务器~

3.3 配置nginx参数

首先远程连接到服务器,博主使用的是FinalShell,因此以下截图都是以FinalShell截的图,如果不一样或者有问题可以留个言,虽然我也不大会,可以交流交流…(PS:docker我是个半吊子…所以踩了好多坑)

3.3.1 部署过Nginx

找到nginx的配置文件,一般而言,在使用docker部署nginx的时候都会讲nginx的配置文件给映射出来,因此得找到这个配置文件

  1. 找到配置文件,由于我这个配置文件是使用的默认名字,因此文件名就叫做:default.conf
    在这里插入图片描述
  2. 使用 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;
	}
}

这里有几个参数注意一下:
第一个:server_name:就是证书绑定的域名地址,比如:www.xxxxxx.com

server_name www.xxxxxx.com;

第二个:ssl_certificatessl_certificate_key,这两个对应的文件是刚刚在第一小节里面申请下载的SSL证书,后面的参数也就是示例里面的 /etc/nginx/cert/ 这个是当初使用docker部署nginx映射出来的路径,如果不记得,或者弄不清楚,那么恭喜,干脆删掉nginx容器重新起一个吧…博主在这里纠结了好久,总是路径不对,nginx起不起来报错,找不到对应的 pem文件key文件
配置完成后,将 default.conf 文件上传,覆盖原来的文件,使用docker重新启动nginx

docker restart 容器id

重启过后,查看一下是nginx否启动成功如果启动成功,那么说明已经识别到了SSL证书,那此时https已经配置完成了,访问:https://www.xxxxxx.com,应该也是可以访问成功的;
如果重启失败,查看以下nginx的错误日志,如果是类似于:

2022/12/06 05:14:50 [emerg] 1#1: cannot load certificate “/etc/nginx/cert/8944652_www.xxxxxx.com.pem”: BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/nginx/cert/xxxxx_www.xxxxxx.com.pem’,‘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先下载下来;
接着,通过run命令,启动一个nginx的容器,具体命令有点长,如下:

docker run --name mynginx -d -p 80:80 -p 443:443 --privileged=true -v /usr/docker/mynginx/html:/usr/share/nginx/html -v /usr/docker/mynginx/conf.d:/etc/nginx/conf.d -v /usr/docker/mynginx/logs:/var/log/nginx -v /usr/docker/mynginx/conf.d/cert:/etc/nginx/cert nginx 

分段备注一下:
–name mynginx:将nginx启动后的容器名字设置成mynginx;
-d: nginx启动后保持长时间启动;
-p 80:80:映射docker的端口,将80端口与服务器的80端口绑定;
-p 443:443:映射docker的端口,将443端口与服务器的443端口绑定;
–privileged=true:开启特权模式,这个可以去掉,以防万一用的;
-v /usr/docker/mynginx/html:/usr/share/nginx/html :映射路径存储html文件夹的路径;
-v /usr/docker/mynginx/conf.d:/etc/nginx/conf.d:映射nginx配置文件的路径;
-v /usr/docker/mynginx/logs:/var/log/nginx:映射日志文件的路径;
-v /usr/docker/mynginx/conf.d/cert:/etc/nginx/cert:映射存放SSL证书的文件路径;
之后,我们可以到usr/docker下新建mynginx文件夹,按名字分别新建:html,conf.d,logs三个文件夹,再在conf.d下新建cert文件夹;
在这里插入图片描述

之后,将申请到的证书文件,也就是 .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,应该也是可以访问成功的;
如果错误,还是排查错误日志,正常情况下,不会出现证书的路径问题了;

3.4 重写http的访问至https

在上一小结其实已经写了,就是将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部署上;
故此,记录一下,以便后期需要的时候进行回顾~如果对你有帮助,点个赞吧~谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

# Docker说明、安装(Windows10家庭版)

Docker说明、安装(Windows10家庭版) Docker是什么?它是干嘛的? 开始,我就知道别人说是用来加工tar包的。tar包?又是干什么用的? tar包,个人粗俗的理解就是一个环境,里面…

CVPR2021 | VQGAN+:Taming Transformers for High-Resolution Image Synthesis

原文标题:Taming Transformers for High-Resolution Image Synthesis 主页:Taming Transformers for High-Resolution Image Synthesis 代码:https://github.com/CompVis/taming-transformers transformer比CNN缺少了归纳偏置和局部性&…

音视频编解码经典问题汇总(1)

前言: 大家好,今天给大家分享的内容是关于平时在做音频编解码会遇到的一些问题,比如说:解码播放的时候,播不出来解码播放的时候,画面有条纹编码的时候,修改分辨率大小,没有反应这三个…

【NumPy 数组副本 vs 视图、NumPy 数组形状、重塑、迭代】

🤵‍♂️ 个人主页老虎也淘气 个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏…

实验五 进程通信-管道通信

1. 函数int pipe(int fd[2])创建一个管道,管道两端可分别用描述字fd[0]以及fd[1]来描述。需要注意的是,管道的两端是固定了任务的。即一端只能用于读,由描述字fd[0]表示,称其为管道读端;另一端则只能用于写&#xff0c…

我失业了?| ChatGPT生信分析初体验

最近ChatGPT火的一塌糊涂,作为在生物医学和计算机科学领域夹缝求生的边缘摇摆人,也来蹭一波热度。ChatGPT是一个预训练的语言模型,由OpenAI训练。它可以用来生成自然语言文本,并且可以进行对话。它基于Transformer架构&#xff0c…

OAuth2.0的四种授权方式

前言 OAuth 简单理解就是一种授权机制,它是在客户端和资源所有者之间的授权层,用来分离两种不同的角色。在资源所有者同意并向客户端颁发令牌后,客户端携带令牌可以访问资源所有者的资源。 OAuth2.0 是 OAuth 协议的一个版本,有…

【计算机毕业设计】77.旅游资源网站源码

一、系统截图(需要演示视频可以私聊) 摘 要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中&#xf…

MATLB|分布式能源的选址与定容IEEE30节点实现

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清…

Jmeter(四):请求默认值元件应用,模拟http请求实战,正则表达式提取器元件讲解

Jmeter(7):jmeter请求默认值元件应用 HTTP请求默认值 在公司内部进行测试的时候,一般测试环境访问的接口地址(服务器名称 或IP)、端口、协议一般都是不变的,但http请求取样器每个请求都要求写一遍 这些信息&#xff0…

购物网站系统

视频如下 go网站前台:关于我们、联系我们、公告信息、商品类型、商品信息、商品评论管理员: 1、管理关于我们、联系我们 2、增删改查公告类型、公告信息 3增删改查商品类型、商品信息 4、查看注册用户信息 5、查看用户充值信息 6、查看回复用户咨询 7、查看下单信息 8、发货、查…

微信支付API3 APP【统一下单 APIV3】

官方参考资料 签名:签名生成-接口规则 | 微信支付商户平台文档中心 签名生成:签名生成 - WechatPay-API-v3 统一下单接口:微信支付-开发者文档 如何查看证书序列号:证书相关 - WechatPay-API-v3 私钥和证书:私钥和…

EXCEL基础:数据透视表(按年龄分组统计与统计各部门的工资情况)

【按年龄分组进行统计】: 如下为原始数据,最后就是年龄字段: 选择数据单元格,在新表里插入【数据透视表】,若数据透视表的【字段列表】没有显示,可以按照1标注那里勾选, 按照2处的列、行和统计…

Pytorch:使用官网提供数据集的相关参数设置,以CIFAR10为例进行说明

文章目录前言一、Dataset定义-组成分类二、获取数据集1.参数说明2.相关Demo前言 本文记录笔者关于Dataset的相关学习记录,以Pytorch官网文档为主进行学习 一、Dataset 定义-组成 所谓Dataset,指的是我们在学习神经网络中要接触的数据集,一…

[附源码]Python计算机毕业设计SSM基于的楼盘销售系统的设计与实现(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

关于近期虚拟化学习遇到的问题总结

一、关于Intel VT-x/EPT. 不使用虚拟化的Intel VT-x/EPT 因为需要在Linux中使用kvm做虚拟化因此需要开放宿主虚拟机的虚拟权限 但是打开报错 首先想要开启虚拟化,你的cpu是一定要支持虚拟化的 如何查看呢,可以ctrlaltdel打开任务管理器 点击性能 可以看…

电子加速器原理与应用

辐射单位 射线能量ϵ\epsilonϵ,单位eVeVeV ϵhν\epsilon h\nuϵhν,普朗克常数hhh,电磁波频率ν\nuν 电子伏特eVeVeV:一个电子(电量为1.610C)经过1VVV的电位差加速后获得的动能。 1eV1.610−19J1.610−…

计及碳捕集电厂低碳特性的含风电电力系统源–荷多时间尺度调度方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

[附源码]Python计算机毕业设计SSM基于的楼盘销售管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java基本微信小程序的适老化老人健康预警系统 springboot+vue

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…