WEB应用

分享一下php7和其他php多版本共存的配置教程

年前,终于迎来了期待已久的php7正式版,我也在第一时间就给博客用上了。性能确实有了质的飞跃,问题还是有不少的。比如鱼叔的微信插件在php7下面自动回复异常等。 为了继续使用微信插件,我只好将php5.6又开了起来,下面简单分享一下多个版本php共存的方法。 一、编译路径 多个版本php要共存,必须使用不同的安装路径。比如,之前php5.6安装在/usr/local/php,那么我们安装php7的时候,就应该定义到 /usr/local/php7 等不一样的路径。 就如之前php7编译安装分享的那样,把安装目录和配置文件目录都指向新的路径: 具体安装这里就不多说了,请自行翻看之前的文章==>传送门 二、配置修改 编译安装完php7之后,我们需要将配置文件中涉及的路径都更新为php7的实际路径,具体如下: ①、php-fpm.conf 如此一来,php5.6和php7的sock监听文件分别为/dev/shm/php-cgi.sock和/dev/shm/php7-cgi.sock。 ②、nginx配置 nginx配置只需要修改php动态解析的sock指向即可: 在站点对应的nginx配置文件中(比如,vhost/zhang.ge.conf )找到: 将其中的 然后重启nginx就能将此站点环境更新到php7了。 说白了,就是你想让站点用哪个版本就修改为该版本的监听文件路径。当然,也有一些php用的是端口的监听模式,修改原理一致! 如果只是某些特殊的页面需要使用php的其他版本,也只要新增额外的location。假如,网站有一个目录是另外的建站程序,不支持php7,那么我们需要额外设置下即可: 更多需求,举一反三即可! 三、启动脚本 在第二步,我们修改了php的配置,但是也没启动php。怎么启动很简单,我们先修改下服务脚本: 找到 PHP5.6 的服务脚本 /etc/init.d/php-fpm 现在,我们就可以使用 service php7 start 启动php7了,而之前的php5.6则继续使用 service php-fpm start 启动。 四、其他考虑 上述修改,只是让多个版本的php能够同时run起来,并未考虑多个版本的资源抢占问题。其实,还是有些许文章可以做的。 比如,php-fpm.conf 会对php的进程数量、响应超时等进行优化配置,很多时候我们都是用的单个php环境的最优配置。不过,当我们跑了多个php版本的时候,这些配置就应该折中考虑一下了。 就拿我博客举例,我让php5.6继续存在只是为了微信的一个插件,也就只是博客的小部分功能,其他绝大多数功能还是要用php7的,所以我在配置这个php-fpm的时候,会将php7的线程等资源给多一些,php5.6我就只给了一个主进程和一个子线程了。 好了,以上内容就是php多版本共存分享,充分理解下nginx和php的交互,本文分享可有可无。 2016-3-2:分享一个纯属巧合的事情,早上搜索资料的时候,发现linuxeye.com--linux运维笔记比我更早的发布了php多版本共存教程,而且更是巧合的是,改的方式都基本一致。。。搞得好像是我抄袭的一样o(︶︿︶)o 不过php的安装和配置基本也都是从他的脚本中扒的,好吧,就当我也伪原创了一把。。。
阅读全文
WEB应用

升级Nginx1.9.5以上版本,开启博客网站http2.0时代

最近给张戈博客全站开启了https,所以对这块关注比较多。昨天脑补的时候发现http2.0只支持SSL加密的网站,即https。于是心血来潮,给张戈博客开启了http 2.0,尝尝鲜。 查了下资料,发现Nginx不久前发布的 1.9.5版本支持http2.0,而1.8.x时代只是对SPDY进行了支持。一直用的1.62稳定版,此次为了测试http2.0,直接进行了版本跳跃,升级到了1.9.5版本,下面简单的分享下部署分解。 Ps:特别说明的是,http2.0只支持开启了https的网站,所以没开启https的网站就只能看看了! 一、编译Nginx 编译Nginx是我博客老生常谈的问题,之前都不想赘述的内容,这次还是耐着性子说一下在已有Nginx的服务器上重新编译一个Nginx的做法。 ①、下载Nginx最新版 目前Nginx最新版是今年11月份发布的 1.9.7 版本,反正1.9+是没有稳定版,所以干脆弄个最新版: 话说1.9+版本还支持TCP负载均衡呢,感兴趣的可以看下张戈博客之前的分享: Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块 ②、编译Nginx 在已有环境下编译Nginx,一般做法是先取得目前运行的Nginx的运行参数,然后在这个参数的基础上加上本次编译想新增的参数即可。所以,我们先执行 nginx -V 查看它的编译参数是什么: 可以看到张戈博客目前用的是1.6.2版本,当然也是淘宝定制过的Tengine。 如果你发现参数里面也存在 --add-module=../xxx 这种使用相对路径的参数,就得注意了。你重新编译的时候得保证新的Nginx编译文件夹的相对路径存在对应的模块,否则请重新指定一个正确的路径,比如上面代码中出现的 ngx_cache_purge-2.3,否则会提示找不到路径啦! 既然知道了老的Nginx的编译参数,那么直接按照下面操作,解压、编译、平滑升级搞定Nginx1.9x: 二、配置http2.0 配置Nginx开启http 2.0特别简单,只要在Nginx配置文件中找到你要开启http2.0的域名server模块,然后将 listen 443 ssl;改成 listen 443 ssl http2; 即可。 比如,张戈博客之前的Server模块配置如下: 直接改成: Tips:开启http2.0后,谷歌浏览器无法访问,显示如下信息? 无法显示此网页 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY 网址为 https://zhang.ge/ 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。 吐下苦水,张戈博客配置好http2.0之后,得知谷歌浏览器支持http2.0,于是访问看了下,居然提示以上错误!关掉http2之后,又正常了!!搜遍了都没找到为什么!最终,鬼使神差的把SSL额外配置全部屏蔽,只剩下指定证书和key部分,发现居然好了? 后来发现Nginx官方给出的SSL中都用到了 TLSv1.2,而我的配置还停留在TLSV1! 保存配置文件之后,重启或重载Nginx即可生效:/usr/local/nginx/sbin/nginx -s reload 三、测试http2.0 配是配好了,到底有没有生效呢?还需要测试下才行。 ①、在线测试 直接访问 https://spdycheck.org/#你的域名 即可测试是否成功开启 http2.0: 比如访问:https://spdycheck.org/#zhang.ge,可以看到如下信息: 发现居然是SPDY有木有?想了半天为什么,才想起来我用了腾讯云的CDN,这个SPDY肯定是腾讯云CDN为了优化https启用的!跟上文的操作没有半毛钱关系!所以,目前张戈博客虽然开启了http2.0,但是走了CDN之后,就只有SPDY了,本次权当测试。。。 于是,试着搜了下http2 check,没想到还真有!不过可惜功能不可用,测任何网站都是失败: https://www.h2check.org/ ②、浏览器测试 看来要得到确切的结果,还得借助谷歌、火狐等浏览器了。 打开谷歌浏览器,先访问一下你的网站,比如访问下张戈博客 然后,在谷歌浏览器地址栏输入 chrome://net-internals/#http2 并回车,列表里面即为已支持http2.0的域名: 没错,开启成功! 进一步看一下Nginx日志,可以很明显的发现刚刚的访问是走的http2.0协议: 四、简单总结 上文仅仅是简单配置,http2.0其实还有其他几个优化参数,感兴趣的朋友可以前往Nginx官方文档查看:http://nginx.org/en/docs/http/ngx_http_v2_module.html http2.0是下一代http协议,现在还没普及,而且大部分浏览器都不支持使用http2.0访问。只有少数浏览器,比如谷歌、火狐,貌似IE10也在蠢蠢欲动,具体行不行有待测试。所以,测试这个功能也只是抱着尝鲜和学习的目的。 对http2.0感兴趣,并希望了解http2.0优点特性的朋友,可以看下开源中国对http2.0的详细介绍。当然,网上还有很多对HTTP1.0、SPDY及HTTP2.0详细测试对比的技术文章,都可以很明显看出http2.0绝对是以后互联网的主流趋势! 开启http2.0的前提是你的网站已经支持了https,所以开启https是第一步! 以下是相关文章: 借助腾讯云CDN开启全站https及问题解决分享 分享一个免费SSL证书申请网站,给网站开启https协议 Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程 不长不短,又是一篇折腾分享,希望你能用得上~
阅读全文
WEB应用

PHP7.0正式版编译安装升级及WordPress问题解决分享

盼望以久的PHP 7.0正式版,终于在今天发布了! 官方给出的新特性如下: PHP 7.0.0 comes with new version of the Zend Engine with features such as (incomplete list): Improved performance: PHP 7 is up to twice as fast as PHP 5.6 Consistent 64-bit support Many fatal errors are now Exceptions Removal of old and unsupported SAPIs and extensions The null coalescing operator (??) Combined comparison Operator (<=>) Return Type Declarations Scalar Type Declarations Anonymous Classes 至于新特性是什么,百度一下都有大牛给出很详细的解释,不过我也看不太懂,但是我看懂了一条: Improved performance: PHP 7 is up to twice as fast as PHP 5.6 PHP7的性能将是PHP5.6的2倍! 好了,其他就不用看了,单这一条就已经有升级的动力了吧! 之前就用过RC版本,性能确实提高了很多,但是在PHP7.0环境中,Begin主题存在不少问题,由于不是正式版,我也就懒得花时间去解决了。 今天官方发布了正式版,于是利用下班时间给博客编译安装了PHP7.0,且一并解决了Begin主题依然存在的不兼容问题,下面简单的分享下。 一、编译安装 以下安装步骤是在已有PHP5的环境下进行的,不保证能够顺利完成,仅供参考。 ①、下载PHP 这是PHP官方的PHP7.0正式版的国内CDN下载地址,可以放心下载。 ②、解压编译 基本大家伙都已经安装了PHP的5.6或更老的版本,所以我们可以编译安装到一个新的路径。 上面的编译安装激活了opcache缓存,如果不需要可以去掉 --enable-opcache,个人推荐使用。 ③、设置参数 Ps:以上参数等代码从lnmp一键安装包中提取。 ④、版本替换 php 7 已经安装到了 /usr/local/php7,为了让2个版本暂时都存在,方便过渡,这里我们使用软链接搞定 哦了,做完以上步骤,要是没报错基本就已经搞定了,执行一下php...
阅读全文
WEB应用

php5编译安装常见错误和解决办法集锦

最近在给开发同事折腾开发测试环境,其中就有php的编译安装。由于每个人的需求不一致,所以也接触到了各种模块编译和集成,中间不乏各种编译依赖报错。 正好,搜了几次都是下面2篇文章内容,干脆就转到自己博客,以备后用,后续有相关内容再继续补充。   checking for BZip2 support… yes checking for BZip2 in default path… not found configure: error: Please reinstall the BZip2 distribution 解决办法:yum install bzip2-devel checking for cURL support… yes checking if we should use cURL for url streams… no checking for cURL in default path… not found configure: error: Please reinstall the libcurl distribution – easy.h should be in/include/curl/ 解决办法: yum install curl-devel   checking for curl_multi_strerror in -lcurl… yes checking for QDBM support… no checking for GDBM support… no checking for NDBM support… no configure: error: DBA: Could not find necessary header file(s). 解决办法: yum install db4-devel...
阅读全文
WEB应用

Nginx配置多站点下的Proxy_cache或Fastcgi_cache缓存加速

张戈博客分享过很多关于缓存加速的教程,自己也是不断的在摸索,追求最佳的网站静态缓存加速方案。在这里简单的总结一下: 1、使用虚拟主机的朋友推荐使用缓存插件或php 代码版缓存方案=>点此直达 2、使用独立主机的朋友推荐使用Nginx的Fastcgi纯静态缓存方案=>点此直达 在我分享了Nginx的Fastcgi缓存之后,有不少朋友已折腾成功。不过有朋友反馈,不知道在多站点下如何配置Nginx Fastcgi。而所有网上分享的方案都是单个站点的,我本以为多站点的直接在 php 的 location模块中插入fastcgi缓存配置就好了,结果发现会报错,提示缓存空间已被使用。 经过张戈轮番测试,最终试出了多站点下的Fastcgi缓存配置,下面简单分享下。 一、部署http模块 ①、单个站点 单个站点上篇文章已经分享过了,在http模块内加入如下配置即可: ②、多个站点 当要给多个站点开启fastcgi缓存时,以上配置就不行了,会报错。经过测试,修改如下即可: 二、部署server模块 配置好了http模块之后,server模块就很简单了! 只要在不同的站点的php模块下插入不同的fastcgi缓存配置即可,其实就是key_zone的区别而已。 比如,我同时给张戈博客和中国博客联盟2个站点的配置如下: 张戈博客: 中国博客联盟: 其实就是和http模块内定义的缓存一 一对应而已,这样才能区分开来啊!否则就会报错。 三、Proxy_cache缓存 分享了多站点的fastcgi缓存配置,顺带也分享一下Proxy_cache的多站点缓存配置好了。免得某些朋友不会依葫芦画瓢。。。 其实,我也没实际测试,但是依此类推应该如下配置即可,有需求的测试一番就知道了: ①、http模块 ②、server模块 至于server模块应该就不用跟上面介绍的那样详细了吧!不同站点只是 proxy_cache 这个配置不一样而已!比如: 站点1配置 站点2配置: Ps:可能有人又要问了,这配置是放到哪的啊?唉,就这样您还瞎折腾啥呢?老老实实写文章吧! 哦了,看懂以上配置,随便部署多少站点的fastcgi或proxy缓存都不用愁了!
阅读全文
WEB应用

实测Nginx服务器开启pagespeed加速效果

上周有一个站长问到我一个问题,问fastcgi_cache和pagespeed加速有没有冲突。略微想了下,2个都是比较原生的主,应该不存在兼容问题。 至于这个朋友问到这2个机制处理的先后问题,我思考了下。既然fastcgi_cache已经是缓存到本地的文件,那么pagespeed肯定是后处理的。通俗来说,就是当用户访问WEB时,Nginx 应该是先调用 fastcgi缓存,然后再进行pagespeed优化处理,最后返回数据给用户。 当然,经过我最后的测试,也证实了我的猜测是正确的。 一、还能再快 张戈博客已经很快了,然而并没有什么L用,该抄袭的抄袭,模仿的模仿,关键词和流量都碎了一地。在这个互联网时代,张戈温馨提示一下,有什么好的创意或赚钱方法,绝逼不要透漏。唯有闷声发大财才是王道,因为这是一个没有道义、不讲章法的混乱时代!案例就不贴了,看到张戈博客某篇博客排名好,指数高,各种模仿,那标题拟的和张戈博客亲生似的。某度也是一个大煞笔,什么垃圾辨识度,不识原创为何物,真是无力吐槽!好久没在文章中吐槽了,真是憋着荒! 回到文章,分享还得继续... 印象中张戈博客从51CTO转载过一篇pagespeed相关文章,但是一直也没去尝试一下。搜索一下发现是2年前的教程: 借助PageSpeed,为Nginx网站服务器提速 这次正好周末有空,就果断重新编译了一下Nginx,测试了一把 pagespeed。最终还是不负众望,效果比较满意。如果想网站速度更进一步,可以跟着本文走一遍。 二、重新编译 大伙大概也发现了,编译nginx 是折腾它的基本功,如果你还不会,那就看下张戈博客以前分享的文章,学好这个基本功再来玩: Nginx在线服务状态下平滑升级或新增模块的详细操作记录 一般来说新增编译一个模块,只要提供这个模块的下载地址,编译应该就没多大问题了。 本文模块下载及编译参考: 三、修改配置 编辑网站的nginx配置文件,比如 zhang.ge.conf,在server模块里面加入如下代码: 然后,新增缓存文件夹: 最后,重启Nginx即可生效(实测发现这个模块的修改必须重启nginx,reload是无效的...),发现很多朋友不知道如何重启nginx,然后看到要重启就把服务器重启了下,虽然也可以,但是也太暴力了点吧? 通过工具安装nginx,一般都带有service控制,可以使用如下命令重启nginx 实在没有,也可以先kill掉,再启动: Ps:那些用面板的朋友可别说不是这个路径啥的, 谁要你用面板。。。这也是面板蛋疼的一点,路径个性不一,自己撸去吧。 四、测试效果 ①、看源码 好了,重启Nginx后,咱们刷新一下前台,随便搜索下 pagespeed,可以发现源码大部分都已经被替换了: 如图,绝大部分js、css的url都变了,被合并成了一个url。 体积小点的图片,比如表情,被转成了浏览器编码的形式,算是减少服务器请求的一种优化: 看起来优化后,html代码变多了很多,于是下载看了下: 果然, 同一个页面开启后,大了20多k!尼玛,要是其他地方没有大的改善,这绝逼有点吓人了,于是继续看看。 ②、看图片 接着,看了下文章缩略图,发现还能压缩图片体积: 比如未启用pagespeed之前的图片大小【图片地址】: 开启后:【图片地址】 尼玛,十多倍的差异,让我有点不信邪。于是下载到电脑看下: 这下差异确实小了点,大概2倍多。但是,后者本是WebP格式,也就是谷歌(google)开发的一种旨在加快图片加载速度的图片格式。我下载到本地后会自动转成了jpge格式,体积肯定是有所变化!总的来说,这压缩效果真的很明显!不过经过我多次验证,发现并非所有图片都有这个效果,估计和原本图片的压缩程度有关系。 ③、工具测 光靠肉眼,有点无力。pagespeed 主要用来加快浏览器的渲染加载,所以我决定用下阿里测分析下加速前后的区别。 优化前的测试报告: 报告地址:http://www.alibench.com/rp/f9a4c1a8ddd267e0897613501dd2b422 优化后的测试报告: 报告地址:http://www.alibench.com/rp/17778d646ca7133609cc348b77096f37 点开一下加载详情对比了下: 优化前: 优化后: 效果还是很明显的,感兴趣的可以自己点开报告地址,查看更详细的对比!当然也推荐喜欢折腾的朋友尝试一下开启 Nginx 服务器 pagespeed加速!如果是 Apache 服务器,可以集成 mod_pagespeed,感兴趣的自己去找资料折腾吧! 最新补充:张戈博客体验了几天,发现一个问题:启用这玩意之后,CPU占用会比较高,Nginx 经常100%,虽然存在静态缓存,但是网站后台偶尔会比较卡,暂时已取消这个功能。所以对于使用单核CPU的云服务器就不建议折腾这个玩意了。
阅读全文