使用cloudflare加持你的网站

CloudFlare 简单地说,CloudFlare就是通过基于反向代理的内容分发网络(Content Delivery Network,CDN)及分布式域名解析服务(Distributed Domain Name Server),帮助受保护站点抵御包括拒绝服务攻击在内的大多数网络攻击,确保该网站长期在线,同时提升网站的性能、加载速度以改善访客体验。 作用 对于个人站来说,可以有效防御小规模DDos攻击,可以使用CloudFlare提供的免费ssl证书,可以加速网站的访问(如果是境外服务器的话,国内可以考虑用阿里云的cdn服务),且以上的服务都是免费的! 域名服务器修改步骤 注册一个CloudFlare账号后登入 点击「Add Site」,输入域名,之后一直「Next」,系统会加载当前域名的dns列表,不管它,然后复制后面出现的dns服务器地址至当前域名提供商的控制台替换掉默认的dns服务器地址即可,等待几分钟时间即出现Active,说明此时该域名已通过CloudFlare的域名服务器对访问进行解析 dns配置 跟很多域名提供商(如万网,godaddy)的dns配置面板相似,CloudFlare的dns配置不同之处在于可以在Status项切换开关颜色为「灰色」/「橙色」,灰色表示只使用CloudFlare的dns,橙色表示同时还使用cdn 如图: ssl证书配置 在crypto选项卡中,针对ssl设置有四种模式 Off: No visitors will be able to view your site over HTTPS; they will be redirected to HTTP. Flexible SSL: You cannot configure HTTPS support on your origin, even with a certificate that is not valid for your site. Visitors will be able to access your site over HTTPS, but connections to your origin will be made over HTTP. Note: You may encounter a redirect loop with some origin configurations. Full SSL: Your origin supports HTTPS, but the certificate installed does not match your domain or is self-signed. Cloudflare will connect to your origin over HTTPS, but will not validate the certificate. Full (strict): Your origin has a valid certificate (not expired and signed by a trusted CA or Cloudflare Origin CA) installed. Cloudflare will connect over HTTPS and verify the cert on each request. ...

October 17, 2018 · 1 min · 202 words

ssh公钥登录

原因 通过密码进行ssh连接存在被暴力破解的可能,但在禁用密码登录+修改22端口+禁用root登录之后,可以将被暴力破解的概率降到最低,且通过private_key登录服务器更适合shell操作 生成公钥,私钥 下面以ubuntu18.04为例 #( 09/27/18@11:30上午 )( lestat@lestat-MS-7A15 ):~/Desktop ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/lestat/.ssh/id_rsa): /home/lestat/.ssh/vps Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/lestat/.ssh/vps. Your public key has been saved in /home/lestat/.ssh/vps.pub. The key fingerprint is: SHA256:rcD6QAPXaRrDfNMR1MdQu/s4TvEtOlumK3AUcdzrUaM lestat@lestat-MS-7A15 The key's randomart image is: +---[RSA 2048]----+ | .+oo*o. | | o . o .o.+....| | . * * . o. .o.| | o B . .. Eo | | + o S.. o. . | | . o .... +.. | | o .o o = .| | o ..oB . | | . oB=. | +----[SHA256]-----+ 建议在passphrase处设置密码,防止key被盗用!!! 以上提示说明生成成功 接下来加入到authorized_keys ...

September 27, 2018 · 1 min · 171 words

开始在ubuntu下工作

由来 家里的PC机有几个月没用了,昨天刚开机,发现SSD识别不了,经过排查,确定是盘坏了,然后只能重装 之前用的win10做开发环境,但是觉得windows还是更适合作为游戏机存在,家里又有台MBP,因此考虑到没怎么用过linux桌面版的情况,决定感受下ubuntu 分区 PC配置是12GB内存,硬盘是1T+5T,1T的硬盘装数据装得差不多了,5T的还有4个T没分区,因此直接装在了5T这个盘上,200G挂载在/目录,100G挂载在/home目录,14G分到SWAP交换分区,500M分到EFI启动分区,BIOS中进行了UEFI启动配置 科学上网 linux下面的科学上网相比于windows,darwin,android,ios系统相对繁琐,首先安装好ss,开启ss后配置系统代理到ss中的本地端口 如果要实现浏览器根据GFWList规则上网,以chrome来说,需要下载一个插件:SwitchyOmega,并按照流程配置 如果要实现terminal科学上网,则需要安装proxychains sudo apt-get install proxychains 编辑配置文件 mkdir -p /home/lestat/.proxychains/ sudo vim ~/.proxychains/proxychains.conf 如下配置(协议,ip,端口根据实际情况配置) strict_chain proxy_dns remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 localnet 127.0.0.0/255.0.0.0 quiet_mode [ProxyList] socks5 127.0.0.1 1080 之后在需要ss的命令前加proxychains,如: sudo proxychains git clone https://github.com/lestat220255/docker-lnmp.git docker开发环境 在安装完docker和docker-compose之后,使用我之前写的脚本,快速搭建docker+nginx+php+mysql+redis的开发环境,同时支持各种服务的多版本并存,后期开发非常方便,摆脱了集成环境的同类服务只能运行一个版本的约束 sudo proxychains git clone https://github.com/lestat220255/docker-lnmp.git cd docker-lnmp && chmod u+x ./init.sh && ./init.sh 工具推荐 terminal扩展 proxychains git npm相关 docker相关 ntfs-3g(用于挂在windows ntfs分区的工具,如果电脑是双系统,强烈推荐) rdesktop(连接windows server) OhMyZsh tldr htop(top加强版) 社交 telegram(推荐安装一个chrome/firefox插件更方便使用) 网页版微信 科学上网 shadowsocks-qt5 proxychains(terminal) SwitchyOmega(用于浏览器上根据GFWList自动切换系统代理或是直连) 开发工具 vscode(简直不能更好用…) phpstorm(2018.1.6)更新的版本无法使用之前的激活服务器 pycharm(个人版,免费) postman 其他 搜狗拼音 坚果云 FileZilla Wps vps网速测试wget -qO- git.io/superbench.sh | bash frp(内网穿透,可以用于开发测试,接收支付回调) 关闭程序崩溃报告 查看当前有哪些程序的崩溃记录 ls /var/crash 直接删除它们,但后续如果有类似报告依然会提示 sudo rm /var/crash/* 修改配置为0即可禁用报告(彻底解决问题) vim /etc/default/apport Change the enabled=1 to enabled=0. Save and close the file. You won’t see any pop up for crash reports after doing this. Obvious to point out that if you want to enable the crash reports again, you just need to change the same file and put enabled as 1 again 参考原网址 安装主题管理 sudo apt-get install unity-tweak-tool sudo apt-get install notify-osd && sudo apt-get install overlay-scrollbar nohup unity-tweak-tool>/dev/null 2>&1 & 一站式搞定theme,icon,dock ...

September 24, 2018 · 2 min · 224 words

docker安装php7.2记录

问题 准备通过Dockerfile构建php镜像,在使用docker-php-ext-install安装mcrypt扩展时遇到如下错误: error: /usr/src/php/ext/mcrypt does not exist 原因 mycrypt extension is not provided with the PHP source since 7.2 , but are instead available through PECL. To install a PECL extension in docker, use pecl install to download and compile it, then use docker-php-ext-enable to enable it: php从7.2开始不再在源码里支持mcrypt扩展而转到pecl方式支持 pecl install mcrypt-1.0.1 docker-php-ext-enable mcrypt 解决 版本切换到7.1再执行构建时问题没有复现,同时按照 pecl install mcrypt-1.0.1 docker-php-ext-enable mcrypt 的方式安装之后也没有出现上述问题 问题 安装过程中提示(虽然不会影响最终结果) WARNING: Ignoring APKINDEX.e3d33561.tar.gz: No such file or directory 解决 doing apk update fixes the problem (updates the index). ...

September 21, 2018 · 2 min · 310 words

北海三日游

比较有特色的一座滨海城市,当地的人也很友好,少了一些浮躁 

August 15, 2018 · 1 min · 2 words

webview调用小程序支付流程

最近在做一个叫资源树的小型商城项目,其中有一个场景需要在小程序中嵌入的web-view内向小程序发起支付请求完成支付,折腾了一天,在网上各种经验的帮助下总算搞定了,现在记录一下流程 环境&技术栈 采用前后端分离的开发模式 接口请求协议:https+http(https为了兼顾小程序) 后端:lnmp 前端:vue-cli+element-ui开发的spa(路由模式为history) 小程序:pages/index/index.js(默认入口文件,用于获取openid并跳转),webview页面(嵌套了spa),wxpay页面(发起小程序支付),webvieworders页面(支付成功后跳转) 步骤 index.js在onload里使用wx.login获取到code参数,并携带该参数向后台服务器请求openid 携带后台返回的openid通过小程序路由跳转至webview页面,webview页面的js在onload里通过options参数获取到携带的openid后通过webview发送至spa应用中 spa入口接收到openid后保存至cookie 在支付页面获取该openid并向后台(调用微信统一下单接口并返回后续wxpayment方法所需参数的地址)发起请求,拿到服务器返回的jsParameters后携带该参数通过小程序提供的wx.miniProgram.navigateTo方法跳转回小程序支付页面(逻辑自己写),支付页面接收到该参数后解析成js对象并在请求小程序支付方法中携带该参数 处理支付成功或失败逻辑即可 已完成初步测试以及小程序上线

August 9, 2018 · 1 min · 14 words

使用vps一年来的收获

我的vps于2017-08-22购买于vultr,当时的目的很简单:搭建一个ssserver用于科学上网,以及搭建自己的站点/博客 通过google(当时用的老D的host),前一个目标很快就完成了,而后面那个也通过不断尝试,最后通过编译安装完成了lnmp环境搭建 之后在工作之余都会去学一些自己觉得有意思的东西,比如workerman,docker,gitlab,jenkins,python,scrapy,nginx等等 对于shell命令也熟练了很多,后续在公司的项目里搭建简单的生产环境也可以在短时间内完成 vultr的服务器是按时间计费,我买的是$5一个月的1核,1G,25GB SSD,流量1T/月的配置,加上.me域名的费用,一年大概500多一点,很是划算!

July 19, 2018 · 1 min · 6 words

欢迎来我的新博客

“Migration Complete!” 博客迁移 今天把博客从hexo迁移到了jekyll,感觉文章发布上jekyll比hexo更方便,而且我喜欢这个主题~ 我的旧博客 —— Lestat 于 2018.07.05

July 5, 2018 · 1 min · 9 words

同一页面巧妙使用多个element-ui的upload组件

问题 最近在使用SSR(服务器端渲染)方式引入vue+element-ui开发一个商城项目的时候遇到一个问题:因为商城的订单是可能包含多个商品,所以订单的评价涉及到同一个页面多组表单的异步提交(每一组表单包含评价内容和上传的多张图片) 由于element-ui的upload组件默认没有提供多个组件在同一页面绑定不同模型的接口,因此在网上搜了一下,搜到了这篇文章,文章中最后的建议是自己封装一个组件来调用upload组件,使用的时候直接调用自己封装的这个组件,但是项目时间紧迫,我这边希望更快的搞定这个问题,于是想到了以下办法 解决方法 在upload组件的接口中,有一个data接口,可以绑定需要上传的除文件之外的其他数据对象,由于订单评价页的一个特点:每个商品不论数量大小都只会被评价一次,因此此处直接将当前数组中商品的uuid绑定到data并传递至上传接口,此操作后表单提交的payload就会包含类似如下数据: Content-Disposition: form-data; name="uuid" E7D947BA-79F1-11E8-B786-00163E063020 而后台文件上传位置可以做一个判断:如果接收的上传请求包含额外参数,则全部原路返回,因此在上传成功后又会在on-success这个钩子接收到这个唯一的uuid,此处对当前页面商品数组进行遍历并进行比对,在包含返回的uuid对应数组的对应保存组图路径的数组push当前上传成功的图片路径 this.data.goods_list.forEach((e,k)=>{ if(e.uuid === response.uuid){ e.evaluate.thumbs.push(response.url) } }) 以下是完整代码(html): <div class="userEva-cont" v-for="(item,key) in data.goods_list"> <table class="userEva-table"> <thead> <tr> <th width="420">商品</th> <th width="280">型号</th> <th width="280">数量</th> </tr> </thead> <tbody> <tr> <td> <div class="evaluate-pic"><a :href="'/product/'+item.goods_id+'.html'"><img :src="'__PHOTO__'+item.thumb"></a></div> <div class="evaluate-text"> <h3><a>{{item.goods_name}}</a></h3> <p>编号:{{item.uuid}}</p> </div> </td> <td>型号:{{item.goods_specification_name}}</td> <td>{{item.num}}</td> </tr> </tbody> </table> <div class="evaluate-wrap"> <form> <dl> <dt>评论:</dt> <dd> <textarea v-model="item.evaluate.content" placeholder="评论内容"></textarea> </dd> </dl> <dl> <dt>晒单:</dt> <dd> <el-upload class="upload-demo" :action="basePath" :on-preview="handlePreview" :on-remove="handleRemove" drag multiple :data="item" :limit="5" :on-success="setFileList" list-type="picture"> <i class="el-icon-upload"></i> <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </dd> </dl> <div class="evaluate-btns"> <button type="button" class="evaluate-sub" @click="submit(item.evaluate,item)">提交评价</button> <label><input type="checkbox" class="evaluate-show" v-model="item.evaluate.is_anonymous">匿名评价</label> </div> </form> </div> </div> js ...

June 30, 2018 · 2 min · 230 words

gitlab出现forbidden的解决方法

问题 前些天在公司的测试服务器上基于docker安装了gitlab,今天同事突然反映gitlab地址访问的时候页面提示Forbidden,http状态码也是对应的403,于是google一下,发现原因可能是较多的并发导致的访问被拒绝 原因 Gitlab使用rack_attack做了并发访问的限制 解决方法 配置/etc/gitlab/gitlab.rb文件,服务器当前使用的docker,对应目录是/home/gitlab/config/gitlab.rb(该目录/文件根据docker容器创建时指定的目录/文件映射关系决定) 找到下面这段配置 gitlab_rails['rack_attack_git_basic_auth'] = { 'enabled' => true, 'ip_whitelist' => ["127.0.0.1", "服务器公网ip"], 'maxretry' => 10, 'findtime' => 60, 'bantime' => 3600 } 去掉注释,然后改为 gitlab_rails['rack_attack_git_basic_auth'] = { 'enabled' => true, 'ip_whitelist' => ["127.0.0.1", "服务器公网ip"], 'maxretry' => 100, 'findtime' => 60, 'bantime' => 60 } 保存退出 运行docker exec 容器名称 gitlab-ctl reconfigure 至此,上述问题解决 参考链接:GitLab issuing temporary IP bans - 403 forbidden

June 6, 2018 · 1 min · 63 words