为 WordPress 编译安装 PHP 7.0.3 亲测全攻略

PHP7 有什么好处?

首先,比 PHP5 占用更低内存;其次,性能快一倍以上;最后,WordPress 的 QPS 可以提升到原来的 3 倍左右。 继续阅读为 WordPress 编译安装 PHP 7.0.3 亲测全攻略

平滑升级 nginx 使之支持 HTTP2

1. 得到 HTTPS 证书

本站用的是在 StartSSL.COM 申请的免费证书。请用 PC 浏览器访问,只支持根域名和一个二级域名。WoSign 的免费 SSL 证书也不错,全中文,不用翻墙,还支持多个域名。

不介意 Windows XP 用户无法建立 HTTPS 连接的请参考 Let’s Encrypt,免费好用的 HTTPS 证书 :支持多个域名、高大上的自动化部署。

2. 平滑升级 nginx

所谓平滑升级,保持网站可以访问的情况下,只为新开启的连接采用新的 nginx 服务,参考 nginx 平滑升级的详细操作方法

继续阅读平滑升级 nginx 使之支持 HTTP2

uglify-js 分别压缩目录中每个 js 文件的 shell 脚本

uglify-js 分别压缩目录中每个 js 文件并输出,用 grunt 只要改改几行配置就能做到。这里是 shell 的脚本的方法,使用方式为:

./脚本文件名 目录 .js 继续阅读uglify-js 分别压缩目录中每个 js 文件的 shell 脚本

如何用 nginx 配置 gzip 和长缓存

这是一篇笔记,记录博主实际配置一个老生常谈的问题的过程。

Gzip 可以使资源加载时,大小缩减到原来的 1/3 。长时间缓存可以让浏览器不加载没有变化的文件。这两者都是前端性能优化的范畴,大家都懂的。

 

资源文件长缓存

将 Cache-Control 改为 public ,并加上一年的长缓存,配合 MD5 版本号实现长缓存 + 按版本号自动更新:

location /res{
    expires      1y;
    add_header   Cache-Control public;
}

为保证缓存效果,先去掉 Etag (Entity Tag)

浏览器会根据 Entity Tag 判断文件是否被修改过。而观星台用的是多台服务器。由于不同的服务器可能对同一个文件生成不同的 Entity Tag,用户第一次从服务器 A 拿过的文件,第二次从服务器 B 拿时,服务器给出的 Entity Tag 有可能不同。这就会造成重复下载,缓存形同虚设。由于已经有 MD5 插件机制起到了类似 Entity Tag 的效果,所以暂时先禁用掉 Entity Tag。

http{
    etag   off;
}

开启 Gzip 压缩

  1. 设置最小 1kb 开启 gzip 压缩;
  2. 开启 gzip_vary ,当用户使用代理服务器的时候,代理服务器会缓存压缩前后两个版本的文件,方便不同浏览器支持情况的用户;
  3. 将 gzip_http_version 设为 1.0,表明为 HTTP/1.0 以上的协议启用 gzip 压缩;
  4. 开启 js 、 css 、 xml 和 txt 文件的 gzip 压缩。其中网络图片(png/jpeg/gif)格式本身的压缩率一般都已经够高,不用再加 gzip 压缩,没什么效果还占用资源。对于观星台某些过大的 jpeg 图片,可以选择自动加 gzip 压缩作为折衷方案。但最主要的还是在做图的时候就设置好质量压缩比最高的压缩程度。
  5. 压缩比例设为 3。最小是 1 ,最大是 10。一般都设为 3。
  6. 对 IE1-6 不启用压缩,因为对 gzip 压缩支持的不太好,可能会出现闪跳问题(当然我们几乎没有这个类型的访客,可加可不加)。
  7. 其它未提到的设置保持默认。
http{
    gzip        on;
    gzip_min_length 1k;
    gzip_vary       on;
    gzip_http_version   1.0;
    gzip_types      text/plain application/x-javascript text/css application/xml image/jpeg;
    gzip_comp_level 3;
    gzip_disable    "MSIE [1-6].";
}

200 OK (from cache) 与 304 Not Modified

为什么有的缓存是 200 OK (from cache),有的缓存是 304 Not Modified 呢?很简单,看运维是否移除了 Entity Tag。移除了,就总是 200 OK (from cache)。没有移除,就两者交替出现。

最近在做百度云观测的 nginx 配置优化。从知乎上看到这个问题:“阿里云存储如何让浏览器始终以200 (from cache)缓存图片?”,提问者强调 200 OK (from cache) 和 304 Not Modified 的区别,有感而发。

其实, 200 OK (from cache)  是浏览器没有跟服务器确认,直接用了浏览器缓存;而 304 Not Modified 是浏览器和服务器多确认了一次缓存有效性,再用的缓存。

它们都是在设置了缓存的情况下触发的。

那么,两者触发的时机有什么区别呢?200 OK (from cache) 是直接点击链接访问,输入网址按回车访问也能触发;而 304 Not Modified 是刷新页面时触发,或是设置了长缓存、但 Entity Tags 没有移除时触发。这是经过查阅资料得出的结论。博主实际测试了一下,结论与之相符:

直接访问有缓存的网站都触发 200 OK (from cache)
图1 – 直接访问有缓存的网站都触发 200 OK (from cache)
刷新浏览器会触发 304 Not Modified
图2 – 刷新浏览器则会触发 304 Not Modified
同一域名下,没有 Entity Tag 的资源直接访问,是 200 OK (from cache) 的结果
图3 – 同一域名下,没有 Entity Tag 的资源直接访问,是 200 OK (from cache) 的结果
同一域名下,有 Entity Tag ,直接访问就会触发 304 Not Modified
图4 – 同一域名下,有 Entity Tag ,直接访问就会触发 304 Not Modified

现在一般都会设置长时间的缓存,正确设置方式参考这两篇笔记:

参考文献

后记

搜索了一下,发现这个问题,在网络上并还没有定论,也没发现有人去实测。

想想也对,现在网络那么快,304 Not Modified 还是 200 OK (from cache),如果不是较真地追求速度,可能大家都觉得区别不大,从而也就没发现这个问题了。

博主截图的域名是某著名 IT 公司的 CDN(已反馈)。可见犯这个错误的运维 GG 还真不少呢!

本文并不是说影响浏览器缓存只有 ETag 这一个因素的意思,请大家不要误解。只是就“为什么我加了缓存,有的却是 304 Not Modified, 而不是 200 OK(from cache)”这件事给出一个一针见血的原因和解答。本文也发在了 div.io 上,详细的 ETag 补充知识可以看 @hefangshi 补充的评论

Apache 配置某个路径的反向代理

示例

<virtualhost *:【正在监听的端口号】>
  ProxyRequest off

  <proxy *>
    Order deny,allow
    Allow from all
  </proxy>
  <location 【指定的路径】>
    ProxyPass 【代理地址,要带 http://】
    ProxyPassReverse  【代理地址,要带 http://】
  </location>
</virtualhost>

同理还可以用 LocationMatch 等 directive 更灵活的配置。

参考

<Location> Directive – core – Apache HTTP Server

基于Git的网站自动发布流程浅析

———— 以下都是我个人根据自己工作方式的猜想,有可能是错的。 ————

一、简述

  1. 一个远程的Git代码仓库(用于管理提交的代码);
  2. 发布人员登录发布机子,然后从这个Git代码仓库上pull下最新的代码;
  3. 通过一个自动打包发布的脚本,rsyncrcp or scp ?)到一个分发服务器,然后由这个分发服务器转发给所有的服务器。

二、发布脚本浅析

在上面的这些过程中,最重要的环节莫过于这个自动打包发布的脚本了。

基本过程大概如下:

  1. 比较一下从git仓库pull下来的代码,和之前的代码区别,主要是比较有哪些文件改动过, 如通过一个命令:git diff commitid –name-only, commitid指代的是上次pull后的commit id,也就是之前没有pull前的版本号。
  2. 获取到改动的文件后,遍历每一个改动的文件,并分类。如css文件,js文件,html文件。
  3. 对不同的分类文件,分别做相关处理。如css文件,对应的加一个最新的版本号(一般使用的是md5),然后对应的修改所有引用到它的文件,这块也是最复杂的一部分,根据不同的网站,需要不一样的处理逻辑。
  4. 存储当前的版本号,如:git log –pretty -1 | awk ‘/^commit/{print $2}’。
  5. 将所有改动的文件进行打包,发布到分发服务器。

三、后话

给我你的看法吧~

四、本文完全转载自

http://blog.csdn.net/do_it__/article/details/7836481