lnmp配置nginx扩展PageSpeed,Brotli等优化总结(仅供参考) 技术文章
[i]注:本文只适合有一定Linux基础知识的人阅读,如果没有请慎阅,以免带来不适。
Lnmp1.4配置nginx(Nginx已经安装好了)扩展ngx_PageSpeed, Brotli , ngx_http_google_filter_module ,ngx_http_google_filter_module
环境:lnmp1.4 + vultr-JP
OS:#lsb_release -a
Debian GNU/Linux 8.10 (jessie) , PHP-7.1.7 ,MySql-5.5.56 , Nginx-1.12.2
先看一下我的优化后使用Google的PageSpeed Insights PC检测有99分,打开速度是挺快的!
然后查看nginx配置:nginx –V (注意是大写的),结果类似如下:
我们要做的就是再此基础上增加模块,Nginx增加模块比Apache麻烦点,Apache直接配置文件引用.so模块文件即可,Nginx需要编译。不多累述,想了解的自己Google。
首先我们在home目录下新建一个extends文件夹(mkdir /home/extends)用来装我们的扩展源码,接下来就是下载这些源码:
但是,在下载源码之前,我们需要更新一下系统和安装一些依赖:
apt-get update && apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev git gcc g++ make -y
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.tar.gz
tar xzvf v1.13.35.2-stable.tar.gz
cd incubator-pagespeed-ngx-1.13.35.2-stable
wget https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
tar xzvf 1.12.34.2-x64.tar.gz
git clone https://github.com/cuber/ngx_http_google_filter_module
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
备注:因为是lnmp1.4x + php7.1因此最后两个扩展所需要的这些模块已经自带了:pcre, openssl ,zlib以及nginx源码,如果你不是php7,请自行下载相关依赖并解压到扩展文件夹extends里面方便后面的使用。
接下来就是配置编译前的nginx了(在nginx源码所在的目录,里面包含configure的这个文件夹路径下):
可以创建预编译的目录或者是就在解压缩后的nginx源码目录也行。
./configure --user=www --group=www --prefix=/usr/local/nginx --with-cc-opt=-Wno-deprecated-declarations --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --add-module=/home/extends/ngx_http_google_filter_module --add-module=/home/extends/ngx_http_substitutions_filter_module --add-module=/home/extends/ngx_brotli --add-module=/home/extends/incubator-pagespeed-ngx-1.13.35.2-stable
需要注意的是:上面的命令你可以根据你自己的路径来修改,注意拼写,推荐使用Tab键补全获得准确的pwd,最重要的就是你需要会看系统的提示,我觉得Linux的系统提示是非常完善的,你根据提示去搜索基本上都是可以找到答案的,特别是像这些流行的应用出现的问题。如果有搞不定的,可以联系我(YWRtaW5AbXJ4bi5uZXQ=)有空会给你解答,当然也可以付费帮你配置这些,毕竟时间就是金钱,而且一个人的精力有限。
如果提示:make[1]: Leaving directory '/root/nginx-1.12.2'这类的,你可能是配置好后编译失败了,需要清除,重新配置。在nginx源码目录执行,make clean ,然后再重新./configure就行。如果还是不行,就自行去预编译的目录下查看是否有nginx二进制文件,如果没有,肯定失败了,否则,停止Nginx,备份已安装的nginx,再将这个预编译好的复制到旧Nginx所在目录,然后启动Nginx,执行nginx –t ,检查看是否出错,如果不出错就打开网页看看是否正常,正常就OK了。不正常的话就慢慢排查吧。
下面贴一下nginx 的主要配置代码:
nginx.conf :
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
brotli on;
brotli_types text/plain text/css text/xml application/xml application/json text/javascript application/javascript application/x-javascript
brotli_static off;
brotli_comp_level 11;
brotli_buffers 16 8k;
brotli_window 512k;
brotli_min_length 20;
vhost/mrxn.net.conf:
# 启用ngx_pagespeed
pagespeed on;
pagespeed FileCachePath /tmp/cache/ngx_pagespeed_cache;
# 禁用CoreFilters
pagespeed RewriteLevel PassThrough;
# 启用压缩空白过滤器
pagespeed EnableFilters collapse_whitespace;
# 启用JavaScript库卸载
pagespeed EnableFilters canonicalize_javascript_libraries; #谷歌被墙,国内服务器用不了,国外的不存在
# 把多个CSS文件合并成一个CSS文件
pagespeed EnableFilters combine_css;
# 把多个JavaScript文件合并成一个JavaScript文件
pagespeed EnableFilters combine_javascript;
# 删除带默认属性的标签
pagespeed EnableFilters elide_attributes;
# 改善资源的可缓存性
pagespeed EnableFilters extend_cache;
# 更换被导入文件的@import,精简CSS文件
pagespeed EnableFilters flatten_css_imports;
pagespeed CssFlattenMaxBytes 5120;
# 延时加载客户端看不见的图片
pagespeed EnableFilters lazyload_images;
# 启用JavaScript缩小机制
pagespeed EnableFilters rewrite_javascript;
# 启用图片优化机制
pagespeed EnableFilters rewrite_images;
# 预解析DNS查询
pagespeed EnableFilters insert_dns_prefetch;
# 重写CSS,首先加载渲染页面的CSS规则
pagespeed EnableFilters prioritize_critical_css;
# Example 禁止pagespeed 处理/admin/目录(可选配置,可参考使用)
pagespeed Disallow "*/admin/*";
配置后测试没有问题的话基本是这个样子的:
如果配置过程中有其他的错误,请根据错误提示Google或自查。实在不行就找人吧。
上面的步骤都顺利通过了之后就可以去配置nginx了,主要是配置Google的反代。可以参考我之前写的文章,下面简单记录一下:
备份原有已安装好的nginx:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
service nginx stop
然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态,通过上面的命令,已经停止了):
cp ./objs/nginx /usr/local/nginx/sbin/
然后启动nginx (service nginx start),就可以通过命令nginx -V 查看第三方扩展是否已经加入成功.
下面说下在PHP7下如何使emlog支持,其实就是修改几个变量:
1.首先在/include/lib/option.php
大约11行位置
//默认MySQL链接方,mysql或mysqli
把const DEFAULT_MYSQLCONN = 'mysql';
改为 const DEFAULT_MYSQLCONN = 'mysqli';
2.在/include/lib/cache.php
大约195行
把$$row['option_name'] = $row['option_value'];
改为 ${$row['option_name']} = $row['option_value'];
3.在admim/seo.php
大约在15行、19行共两上
把 $$t改为
${$t}
4.在admim/views/admin_log.php
大约在86行、88行、90行共三个
把$$a $$b $$a
改为 ${$a} ${$b} ${$a}
5.在admim/views/comment.php
大约在18行
把 $$a = "class=\"filter\"";
改为 ${$a} = "class=\"filter\"";
另外有些插件和主题是固定了使用mysql连接类,这样还需要修改插件和主题中的数据库连接方式,不然直接报数据库错误。
比如:
$DB = MySql::getInstance();
都要改为$DB = Database::getInstance();
小提示:我是使用的sublime text 使用正则匹配搜索—正则如下:^(\$)(\$)a,不然你会搜不到$$a的,可以使用sublime的指定文件夹搜索,在你的整个网站目录所有文件里搜索相关变量,进行批量替换。
我之前发的相关文章(仅供参考):
两种方式反代Google(镜像)--nginx反代和nginx扩展
https://mrxn.net/Linux/nginx_http_google_filter.html
为nginx添加这些额外的第三方扩展加速你的web吧
https://mrxn.net/Linux/nginx_add_module.html
参考文章—感谢他们的分享:
https://www.modpagespeed.com/doc/build_ngx_pagespeed_from_source
虚拟机centos配置lnmp一键安装包环境 Linux
插曲:使用ssh链接虚拟机的centos之后发现 wget: command not found 这是因为没有安装wget软件包,下面找到两种解决方法:
一般linux最小化安装时,wget不会默认被安装。
可以通过以下两种方法来安装:
1、rpm 安装
rpm 下载源地址:http://mirrors.163.com/centos/6.4/os/x86_64/Packages/
下载wget的RPM包:http://mirrors.163.com/centos/6.4/os/x86_64/Packages/wget-1.12-1.4.el6.x86_64.rpm
rpm ivh wget-1.12-1.4.el6.x86_64.rpm 安装即可。
如果客户端用的是SecureCRT,linux下没装rzsz 包时,rz无法上传文件怎么办?我想到的是安装另一个SSH客户端:SSH Secure Shell。然后传到服务器上安装,这个比较费劲,所以推荐用第二种方法,不过如果yum包也没有安装的话,那就只能用这种方法了。
2、yum安装
yum -y install wget
第二种方法更简单些!!
最新版本:
LNMP 1.2
下载版:http://soft.vpser.net/lnmp/lnmp1.2.tar.gz (107KB)
MD5:4be72b49b67605477871d3f9676ca52f
完整版:http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz (312MB)
MD5:b3d3d9e40395f4eb5e525adfaabfb675
国内下载地址:
https://api.sinas3.com/v1/SAE_lnmp/soft/lnmp1.2-full.tar.gz 下载时wget需要加--no-check-certificate参数
http://static.suod.ga/lnmp/lnmp1.2-full.tar.gz
新加坡:http://oah.vpser.net/lnmp1.2-full.tar.gz
最后更新: 2015年7月24日17:34 GMT+8
我们最好使用国内的地址,速度取决于你的宽带。如果是默认的
wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp
很慢。。。估计等到花儿都谢了还没好,使用国内的地址:
wget -c --no-check-certificate https://api.sinas3.com/v1/SAE_lnmp/soft/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp
如需要安装LNMPA或LAMP,将./install.sh 后面的参数替换为lnmpa或lamp即可。下面的都是复制哈。。。
如下载速度慢请更换其他下载节点,详情请看下载页面。LNMP下载节点具体替换方法。
按上述命令执行后,会出现如下提示:
需要设置MySQL的root密码(不输入直接回车将会设置为root),输入后回车进入下一步,如下图所示:
这里需要确认是否启用MySQL InnoDB,如果不确定是否启用可以输入 y ,输入 y 表示启用,输入 n 表示不启用。默认为y 启用,输入后回车进入下一步,选择MySQL版本:
输入MySQL或MariaDB版本的序号,回车进入下一步,选择PHP版本:
输入PHP版本的序号,回车进入下一步,选择是否安装内存优化:
可以选择不安装、Jemalloc或TCmalloc,输入对应序号回车。
如果是LNMPA或LAMP的话还需要设置管理员邮箱
再选择Apache版本
提示"Press any key to install...or Press Ctrl+c to cancel"后,按回车键确认开始安装。
LNMP脚本就会自动安装编译Nginx、MySQL、PHP、phpMyAdmin、Zend Optimizer这几个软件。
安装时间可能会几十分钟到几个小时不等,主要是机器的配置网速等原因会造成影响。
3、安装完成
如果显示Nginx: OK,MySQL: OK,PHP: OK
并且Nginx、MySQL、PHP都是running,80和3306端口都存在,并Install lnmp V1.2 completed! enjoy it.的话,说明已经安装成功。
接下来按添加虚拟主机教程,添加虚拟主机,通过sftp或ftp服务器上传网站,将域名解析到VPS或服务器的IP上,解析生效即可使用。
4、安装失败
如果出现类似上图的提示,则表明安装失败,说明没有安装成功!!需要用winscp或其他类似工具,将/root目录下面的lnmp-install.log下载下来,到LNMP支持论坛发帖注明你的系统发行版名称及版本号、32位还是64位等信息,并将lnmp-install.log压缩以附件形式上传到论坛,我们会通过日志查找错误,并给予相应的解决方法。
5、添加、删除虚拟主机及伪静态管理
http://lnmp.org/faq/lnmp-vhost-add-howto.html
6、eAccelerator、xcache、memcached、imageMagick、ionCube、redis、opcache的安装
http://lnmp.org/faq/addons.html
7、LNMP相关软件目录及文件位置
http://lnmp.org/faq/lnmp-software-list.html
8、LNMP状态管理命令
http://lnmp.org/faq/lnmp-status-manager.html
也可以前往lnmp官网查看相关教程: http://lnmp.org/install.html