kurnek学习笔记

Let’s Encrypt免费SSL证书获取以及自动续签

免费,自动的证书授权中心 Let’s Encrypt

配置HTTPS需要的从授权证书中心(CertificateAuthority)签发被浏览器认可的证书,而大部分CA证书是需要收费的,单域名证书相对比较便宜,但是如果是多域名的情况下就需要重复购买证书或者购买多域名证书,这样需要花费的支出对于个人网站来说并不算少。

Let’s Encrypt 是一个免费提供SSL证书的CA,虽然每次签发的证书有效期都只有三个月,但是发证是自动化的,发证速度较快,并且可以通过脚本来自动续签,为个人网站使用HTTPS提供了一个不错的选择。

Let’s Encrypt (以下简称LE)的证书签发主要使用基于 ACME协议 的证书自动管理客户端来实现。

LE官方推荐的客户端是 Certbot ,本文中就是使用 Certbot 来获取和续签证书。

NGINX配置HTTPS并启用HTTP2

为什么要使用HTTP/2

http/2作为新一代http协议,可以说是http/1.x的完全重构。

http/2重新定义了http数据包的格式,使用二进制格式的frame来进行传输(在http1.x中使用的是明文字符串),这个改动让http/2更加易于优化和扩展。

http/2支持多路复用,http1.x虽然也能做到在同一个tcp请求中并发进行数个http请求,但是请求是阻塞的(上一个请求取得响应前是得不到下一个请求的响应的),http/2在同一个tcp请求中可以完成所有http请求(非阻塞,后一个请求可以在前一个请求之前取得响应),并且同时实现流量控制以及优先级控制。

http/2对消息头使用了为http请求量身定做的HPACK压缩方案,这个压缩协议简单来说就是客户端和服务端同时维护一个hash表,将常用的消息头以Key-Value形式保存,传输时只传输Key即可,如在http请求中常用的"GET /index.html"用Key:1保存起来,那么在http/2的消息头中就只需要一个数字1即可(在http1.x要使用完整的字符串)。

http/2支持ServerPush,由服务端主动推送资源到客户端。

总结:对比http1.x,http/2的最大改进就是性能,同样的请求,http/2可以在更加短的时间内传输更少的数据来完成,目前主流的浏览器均已经支持了http/2,可以说是大势所趋。

HTTP/2官方链接 实现HTTP/2的项目列表

为什么使用HTTPS

https作为安全的http通道的作用家喻户晓,就不再赘述。

这里简述为什么使用http/2的同时要使用https。

实际上http/2协议包含了两个模式,一个是http/2,基于ssl加密,与https兼容,简称h2,另外一个是http/2 cleartext,也就是http/2明文模式,简称h2c,也就是我们现在一般使用的http。

虽然http/2设计了两种模式(nginx也支持这两种模式),但是各大浏览器厂商都默认抛弃了h2c模式,因此如果不使用https直接使用http2的话,大部分浏览器无法正常访问网页

因此未来h2c的使用场景估计将更多会用于内网服务器的通讯或者自制客户端。

linux常用工具命令

列出了一些自己常用的命令,其实还有很多好用的命令我还没玩溜,所以没有写进来(也有可能是漏写...),以后说不定会更新.

命令中带的参数不做详细解释,如果需要查看一个命令的详细参数的话,不妨使用man命令或者-h和--help来自行解决(使用百度也行啦) :)

通用

man cmd : 查看cmd命令的手册,如man find

cat /proc/version : 查看内核版本

cat /etc/issue : 查看系统信息

env : 查看环境变量

vi /etc/profile : 编辑环境变量,编辑后需要使用 source /etc/profile 生效

iostat : 查看磁盘IO情况

df -h : 查看磁盘容量

du -sh : 查看当前目录所有文件的占用空间

grep 'xxx' : 全局规则匹配输出,文本匹配命令,一般会跟别的命令配合使用用来过滤出用户想要看到的输出,如在目录文件列表中找到带php的文件可以这样做 ls -l | grep 'php'

grep 'model name' /proc/cpuinfo : 查看CPU信息

crontab -l : 列出本用户的定时任务

crontab -e : 修改本用户的定时任务(详情请搜索crontab)

top : 打开性能分析工具

history : 查看命令历史

whereis cmd: 查找命令cmd所在的位置

ls -l : 列出所在目录文件详细信息

cp -rf $source $target : 复制$source文件覆盖到$target位置

mv $source $target : 移动$source文件到$target位置($source会被重命名为$target,因此也可用作重命名使用)

rm $file : 删除文件,如果要删除目录则加上-r ,强制删除使用-rf,需慎用

find $basePath -name "*$filename*" : 查找$basePath目录下的名为$filename的文件(模糊匹配)

ln -s $sourceFileOrDir $targetSymbol : 建立一个文件或文件夹符号软连接(类似windows的快捷方式)

tar -xzvf file.tar.gz : 解压tar包

tar -czvg target.tar.gz $fileOrDir : 将文件或者目录压缩为tar包

zip / unzip : 压缩/解压缩zip包

netstat -anp | grep $pid : 根据进程PID查看占用的端口号

netstat -na | grep $port : 根据端口号查看占用情况

netstat -n | grep tcp | grep $port | wc -l : 监控网络客户连接数

netstat -n | grep :80 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' : 查看nginx并发

lsof -i:$port : 查看占用端口的进程

kill -9 $pid : 杀死进程号为$pid的进程

tail -f xxx.log : 追踪日志

ps aux | grep $process : 查看进程信息

ps auxw|head -1;ps auxw|sort -rn -k3|head -10 : CPU占用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -10 : 内存消耗最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k5|head -10 : 虚拟内存使用最多的前10个进程

awk 特别复杂… 不在这写

手动安装Atom编辑器的Package

由于github在国内访问非常不稳定,导致Atom的Pakage经常安装/升级失败,让人很恼火。

因此这篇文章就讲讲怎么手动安装Atom的Package。

本文是在windows下进行的,在其他平台应该大致相通…

PS:刚刚就是因为我的Atom被升级失败的Remote-FTP搞得不断崩溃,所以才会想着要写这篇文章。

 

第一步:安装git(其实不安装也行,不过装了方便点,我觉得大部分开发人员还是需要用到git的)

https://www.git-scm.com/

到git官网下载安装git。

安装的时候如果看不懂选项就一路点next即可。

 

第二步:Clone你想要安装的Package到atom插件目录下(不安装git的话就直接到github上找到代码之后下载下来也是一样的)

本例子以PHP程序员常用的Remote-FTP插件为例。

到Github上找到Package的所在仓库,Remote-FTP的github仓库地址:https://github.com/mgrenier/remote-ftp

运行cmd,找到atom的安装目录,然后将插件代码Clone下来,命令如下:

cd .atom

cd packages

git clone https://github.com/mgrenier/remote-ftp

 

第三步:使用Atom的apm(全称大概是AtomPackageManager)安装插件

只要进入到刚刚clone下来的Package目录,然后执行apm install 包名即可,命令如下:

cd remote-ftp

apm install remote-ftp

网站架构技术术语

 

undefined

大型网站分层简化示意图

前言

本篇文章基本摘自《大型网站技术架构》,文中提到的各种术语和概念大致涵盖了大型网站架构需要的东西,每一条几乎都是一个值得深究的领域,这里只是做一个浅层的描述,以便日后看着本文能够展开思路去思考大型网站中的方方面面的技术细节。

奉上我在这本书上看到的最喜欢的一个观点:

不要企图去设计一个大型网站,大型网站的架构都是根据大型网站自身的业务发展逐渐演化而来的。

Home