1.免费创建本地开发环境证书mkcert官网安装跳转进入新建CA文件夹目录,终端第一步命令:mkcert-install第二步命令,最后指向的是你本地开发的ip地址:mkcertlocalhost192.168.31.233前端webpack配置https服务,devserverhttps2.域名和七牛云cname解析绑定一个域名购买后,理论上无数秒-一级/三级子域名可以分开,先用主域名添加服务器ip解析规则。但是这也涉及到Nginx在服务器443端口的设置。先不讨论证书和443端口配置的问题。首先,我在腾讯云购买了域名后,完成了域名注册。记录通过后,增加一条解析记录,绑定主域名主机记录@keep,直接解析主域名mboke.top,类型A,记录值为服务器ip地址。服务器ip地址的域名解析完成,使用主域名解析服务器ip地址。七牛云对象存储空间的域名首先来到七牛云,将域名(普通域名)绑定到你创建的存储空间,但是这个域名是你主域名的子域名,比如你可以将其创建为kodo.mboke.top。然后我们会得到一个CNAME信息,把这个CNAME信息拿到腾讯云去绑定这个子域名。解析主机记录值,填写kodo,记录类型选择CNAME,填写分配给你的记录值,这样下面的实际解析过一会儿就会自动生成,你就可以完成HTTPS了——在七牛云点击配置。3.数字证书证书类型:DV证书是通常意义上颁发给网站的证书。审核不是很严格,一般都是免费的。OV证书一般是收费的,因为申请公司需要审核,所以会在证书的用户栏填写O=北京百度网通科技有限公司的表格。EV证书更多体现在浏览器显示上。除了OV等协议体现的小绿锁,地址栏还有绿色显示,地址栏显示公司名称。通常:证书与域名的关系是一对一的关系,即证书与服务器ip公网也是一对一的关系。这里科普一下知识点,一个服务器ip公网可以绑定多个域名,但是一个域名不能绑定多个服务器ip公网。这里的假设是一对一的前提:默认情况下,一个域名对应一个公网服务器ip。异常情况:证书可以服务于多个域名,也可以通过方法服务于多个服务器ip公网。通配符证书:比如适用于domain.com下所有子域的证书,比如A.domain.com和B.domain.com就是它的子域。这类证书在申请的时候往往填写的是.domain.com的形式,适应所有的子域名,所以在用户一栏可以看到CN=.domain.com。多域证书:指一个证书可以应用于多个不同的域名。与通配符类型不同,其中的多个不同域名往往强调不是其子域名,而是指domian.net、domain.com、domain.xyz等。应用情况1:同一企业共享同一个证书,比如hao123.com和糯米网都是百度集团,用户都是baidu.com。应用情况2:虚拟主机使用一个证书,物理主机上的所有网站都使用该证书。目前租用云服务的应用很多,用户也会重名。比如用阿里云,七牛云,亚马逊云都有这个可能。应用情况三:使用SSL加速的网站一般使用SSL加速设备上的证书与客户端进行秘密通信。以及SSL加速设备与企业网络内部各个域名服务器之间的明文通信。而我对www.baidu.com的抓包,发现客户端hello请求域名为ss1.bdstatic.com,初步确认百度可能使用了类似的加速服务。四、域名注册SSL证书安装部署腾讯云CentOS部署官方指南1、购买域名此处省略,购买SSL证书免费版DV证书,域名注册,域名解析,解析成功后,获取Nginx配置的SSL证书等步骤。2、以Ubuntu16.04为例,与CentOS部署不同。3.在/etc/nginx下创建cert文件夹,将下载的Nginx版本的.crt和.key文件放入cert中4.sudovim/etc/nginx/sites-available/default配置如下server{#SSL访问端口号为443listen443ssl;#填写绑定证书的域名server_namemboke.top;#证书文件名ssl_certificatecert/1_mboke.top_bundle.crt;#私钥文件名ssl_certificate_keycert/2_mboke.top.key;ssl_session_timeout5m;#请按照以下协议配置ssl_protocolsTLSv1TLSv1.1TLSv1.2;#请按照下面的套件配置配置加密套件,写法遵循openssl标准。ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers开启;位置/{#alias/home/ubuntu/www;根/home/ubuntu/www;索引索引.html索引.htm;}location/api/{重写^/api/(.*)$/$1中断;proxy_passhttp://146.56.251.74:7001;}}#自动将HTTP请求重定向到HTTPS#Nginx支持重写功能。如果编译的时候没有去掉pcre,可以加上return301https://$host$request_uri;在HTTP服务器中将默认端口80请求重定向到HTTPS。服务器{听80;#填写绑定证书的域名server_nameserver_namemboke.top;#将http域名请求转为httpsreturn301https://$host$request_uri;}5.sudonginx-sreloadrestartNginx另:比如微信小程序平台需要提供https接口地址。我们不需要通过集群直接把证书放在后端项目中(我刚部署的时候就用这个),我们也是通过nginx的反向代理来做的,后端服务器是反向的-代理如下到443端口,直接提供https服务:server{#SSL访问端口号为443listen443ssl;#填写绑定证书的域名server_namemboke.top;#证书文件名ssl_certificatecert/1_mboke.top_bundle.crt;#私钥文件名ssl_certificate_keycert/2_mboke.top.key;ssl_session_timeout5m;#请按照以下协议配置ssl_protocolsTLSv1TLSv1.1TLSv1.2;#请按照下面的套件配置配置加密套件,写法遵循openssl标准。ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers开启;位置/{proxy_passhttp://146.56.251.74:7001;根HTML;索引index.html索引.htm;}}#自动将HTTP请求重定向到HTTPS#Nginx支持rewrite功能。如果编译的时候没有去掉pcre,可以加上return301https://$host$request_uri;在HTTP服务器中将默认端口80请求重定向到HTTPS。服务器{听80;#填写绑定证书的域名server_nameserver_namemboke.top;#将http域名请求转为httpsreturn301https://$host$request_uri;}5.使用透明实现箭头绘制transparent:used指定全透明颜色,相当于rgba(0,0,0,0).背景颜色的默认值。CSS3可以应用于所有具有颜色设置的属性。border的形成原则:我们通常使用border最常见的情况——往往只给border一个很小的宽度(一般为1-2px);但是,这样的日常用法很容易让人误解border的构成方式,即认为一个元素的border是由四个矩形边框组成的。想想下面这张图:其实:元素的边框是由三角形组成的。为了说明这个问题,我们可以增加边框的宽度,并为每个边框设置不同的颜色。div{宽度:50px;高度:50px;边框:40px实心;border-color:orangeblueredgreen;}将元素的内容大小设置为0时会发生什么?div{宽度:0;高度:0;边框:40px实心;border-color:orangeblueredgreen;}我们会惊奇地发现,这个元素是由上下左右4个三角形“拼接”起来的;那么,为了实现最终的效果,也就是保住底部的三角形,还应该怎么办呢?很简单,我们只需要将其他边框边的颜色设置为白色或透明即可。div{宽度:0;高度:0;边框:40px实心;border-color:transparenttransparentred;}6.进入Docker容器查看日志文件sudodockerexec-it[containerID]/bin/bashlogfile使用/root/logs中的Vim编辑器打开日志中的日志查看问题,但是会发现容器中并没有安装vim。您可能需要通过以下方式将容器中的日志复制到宿主机上以供Vim查看。如果容器是日志存在于/root/logssudodockercp[containerID]:/root/logs/home/ubuntu/logs将日志复制到宿主机的/home/ubuntu/logs7.Microtask和macrotaskMacrotasktask主要包括:script(整体代码)、setTimeout、setInterval、I/O、UI交互事件、setImmediate(Node.js环境)microtaskmicrotask主要包括:Promise、MutaionObserver、process.nextTick(Node.js环境)我们的JavaScript执行过程是单线程的,所有的任务可以看成是存放在两个队列中——执行队列和事件队列。执行队列包含所有同步代码任务,事件队列包含所有异步代码宏任务,我们的微任务介于两个队列之间。JavaScript执行时,所有同步代码先执行,遇到对应的异步代码,会根据其任务类型存入对应的队列(宏任务放在事件队列,微任务放在事件队列之后)执行队列,以及事件队列之前);同步代码执行完毕后,先执行位于执行队列和事件队列之间的微任务,再执行事件队列中的宏任务。主题示例:console.log('scriptstart');setTimeout(function(){console.log('timeout1');},10);newPromise(resolve=>{console.log('promise1');resolve();setTimeout(()=>console.log('timeout2'),10);}).then(function(){console.log('then1')})console.log('脚本结束');以上代码来自博主的博客,比较有代表性,因为它包含了宏任务、微任务和同步代码。当我们分析输出时,我们可以对所有任务进行分类,结果如下:console.log('scriptstart');//同步输出-1setTimeout(function(){console.log('timeout1');//异步宏任务,推送事件队列-5},10);newPromise(resolve=>{console.log('promise1');//同步输出-2resolve();//同步执行setTimeout(()=>console.log('timeout2'),10);//异步宏任务,推入事件队列-6}).then(function(){console.log('then1')//异步微任务,在执行队列之后,事件队列之前执行-4})
