Nginx下安装配置PageSpeed模块,轻松完成网站提速

    作为Nginx组件,ngx_pagespeed将重写你的网页,让用户以更快的速度进行访问。重写的工作包括压缩图片、缩减CSS和JavaScript、扩展缓存时间,同样还包括其它一些最佳实践:

    • 优化缓存——整合应用程序的数据和逻辑
    • 最小化round-trip次数——削减连续的请求/响应周期数
    • 最小化请求开销——削减上传大小
    • 最小化负载大小——削减响应、下载及缓存页面大小
    • 优化浏览器渲染——改善浏览器页面布局
    • 移动方面的优化——优化站点移动网络和设备方面的相关特性

    本文是基于LNMP环境,LNMP脚本参考:《LNMP最新源码安装脚本》

    问题反馈请加QQ群: 235258658

    下载解压PageSpeed模块

    1. cd /root/lnmp/src
    2. wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.6.29.5-beta.zip
    3. unzip -q release-1.6.29.5-beta
    4. wget https://dl.google.com/dl/page-speed/psol/1.6.29.5.tar.gz
    5. tar xzf 1.6.29.5.tar.gz -C ngx_pagespeed-release-1.6.29.5-beta

    查看线上版本编译参数

    1. # /usr/local/nginx/sbin/nginx -V
    2. nginx version: nginx/1.4.1
    3. built by gcc 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC)
    4. TLS SNI support enabled
    5. configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module

    增加ngx_pagespeed模块重新编译

    1. # wget http://nginx.org/download/nginx-1.4.2.tar.gz
    2. # tar -xvzf nginx-1.4.2.tar.gz
    3. # cd nginx-1.4.2/
    4. # ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=../ngx_pagespeed-release-1.6.29.5-beta/
    5. # make //注意只make 不要make install (如果报错请看下面)

    安装ngx_pagespeed (make) 32位操作系统可能会报如下错误

    1. ../ngx_pagespeed-release-1.6.29.5-beta/psol/lib/Release/linux/ia32/pagespeed_automatic.a(104.system.o.o): In function `cv::tempfile(char const*)':
    2. system.cpp:(.text._ZN2cv8tempfileEPKc+0x1e): warning: the use of `tmpnam' is dangerous, better use `mkstemp'
    3. objs/addon/src/ngx_base_fetch.o: In function `net_instaweb::NgxBaseFetch::DecrefAndDeleteIfUnreferenced()':
    4. /root/lnmp/src/nginx-1.4.2/../ngx_pagespeed-release-1.6.29.5-beta/src/ngx_base_fetch.cc:185: undefined reference to `__sync_add_and_fetch_4'
    5. collect2: ld returned 1 exit status
    6. make[1]: *** [objs/nginx] Error 1
    7. make[1]: Leaving directory `/root/lnmp/src/nginx-1.4.2'
    8. make: *** [build] Error 2

    解决方法

    ./configure 后面加上--with-cc-opt='-DLINUX=2 -D_REENTRANT -D_LARGEFILE64_SOURCE -march=i686 -pthread' ,如下:

    1. # make clean
    2. # ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=../ngx_pagespeed-release-1.6.29.5-beta \
    3. --with-cc-opt='-DLINUX=2 -D_REENTRANT -D_LARGEFILE64_SOURCE -march=i686 -pthread'
    4. # make
    5. # mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx$(date +%m%d) #备份nginx原文件
    6. # cp objs/nginx /usr/local/nginx/sbin/nginx #复制编译make后的文件覆盖nginx原文件
    7. # /usr/local/nginx/sbin/nginx -t #检测nginx配置文件语法是否正确
    8. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    9. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    10. # kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` #把nginx.pid改成nginx.pid.oldbin跟着启动新的nginx
    11. # kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` #退出旧的nignx

    使用ngx_pagespeed

    1. # mkdir /var/ngx_pagespeed_cache
    2. # chown www.www /var/ngx_pagespeed_cache
    3. # cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf$(date +%m%d) #备份nginx配置文件
    4. # vi /usr/local/nginx/conf/nginx.conf
    5. server {
    6. #省略
    7. pagespeed on;
    8. pagespeed FileCachePath /var/ngx_pagespeed_cache;
    9. pagespeed RewriteLevel CoreFilters;
    10. pagespeed EnableFilters local_storage_cache;
    11. pagespeed EnableFilters collapse_whitespace,remove_comments;
    12. pagespeed EnableFilters outline_css;
    13. pagespeed EnableFilters flatten_css_imports;
    14. pagespeed EnableFilters move_css_above_scripts;
    15. pagespeed EnableFilters move_css_to_head;
    16. pagespeed EnableFilters outline_javascript;
    17. pagespeed EnableFilters combine_javascript;
    18. pagespeed EnableFilters combine_css;
    19. pagespeed EnableFilters rewrite_javascript;
    20. pagespeed EnableFilters rewrite_css,sprite_images;
    21. pagespeed EnableFilters rewrite_style_attributes;
    22. pagespeed EnableFilters recompress_images;
    23. pagespeed EnableFilters resize_images;
    24. pagespeed EnableFilters convert_meta_tags;
    25. location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
    26. location ~ "^/ngx_pagespeed_static/" { }
    27. location ~ "^/ngx_pagespeed_beacon$" { }
    28. location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
    29. location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
    30. #省略
    31. }
    32. # /usr/local/nginx/sbin/nginx -t
    33. Setting option from ("on")
    34. Setting option from ("FileCachePath", "/var/ngx_pagespeed_cache")
    35. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    36. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    37. # service nginx restart
    38. Stopping nginx: [ OK ]
    39. Starting nginx: Setting option from ("on")
    40. Setting option from ("FileCachePath", "/var/ngx_pagespeed_cache") [ OK ]
    41. # curl -I 'http://www.linuxeye.com/' | grep X-Page-Speed
    42. % Total % Received % Xferd Average Speed Time Time Time Current
    43. Dload Upload Total Spent Left Speed
    44. 0 0 0 0 0 0 0 0 --:--:-- 0:00:03 --:--:-- 0
    45. X-Page-Speed: 1.4.0.0-2748

    注意:

    如果discuz使用了伪静态要注销掉下面部分(前面加#注销):

    1. #if (!-e $request_filename) {
    2. #   return 404;
    3. #}

    使用后效果如下

    使用PageSpeed模块效果演示网站:http://www.linuxeye.com

    Nginx下安装配置PageSpeed模块,轻松完成网站提速

    参考:

    https://developers.google.com/speed/pagespeed/ngx

    https://github.com/pagespeed/ngx_pagespeed

    Sun Apr 28 11:41:05 CST 2013

    • 本文由 发表于 2013-04-28
    • 转载请务必保留本文链接:https://linuxeye.com/318.html
    Nginx Lua Redis防止CC攻击 Linux

    Nginx Lua Redis防止CC攻击

    Nginx Lua Redis防止CC攻击实现原理:同一个外网IP、同一个网址(ngx.var.request_uri)、同一个客户端(http_user_agent)在某一段时间(CCseconds...
    Keepalived+Nginx架构整理版 Linux

    Keepalived+Nginx架构整理版

    Keepalived介绍 keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如...
    Nginx中文域名配置 Linux

    Nginx中文域名配置

    Nginx虚拟主机上绑定一个带中文域名,比如linuxeye.中国,浏览器不能跳转。 why? 因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中...
    Wordpress优化——利用Nginx fastcgi_cache缓存加速 Linux

    WordPress优化——利用Nginx fastcgi_cache缓存加速

    高并发网站架构的核心原则其实就一句话"把所有的用户访问请求都尽量往前推",即:能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了。能访问静...
    匿名

    发表评论

    匿名网友

      • zhang zhang

        请问怎样安装PageSpeed模块 谢谢!

          • yeho yeho

            @ zhang 建议不要安装pagespeed,触发bug容易导致cpu 100%,不稳定。如需要安装参考:https://linuxeye.com/318.html

              • Qa Qa

                @ yeho 请问出发了BUG导致CPU100%具体表现是什么情况?是nginx占用CPU100%还是PHP进程或其他?

            • teddy teddy

              /root/ngx_pagespeed-release-1.5.27.3-beta/src/ngx_fetch.cc:167: error: ‘struct ngx_resolver_ctx_s’ has no member named ‘type’
              /root/ngx_pagespeed-release-1.5.27.3-beta/src/ngx_fetch.cc: In static member function ‘static void net_instaweb::NgxFetch::NgxFetchResolveDone(ngx_resolver_ctx_t*)’:
              /root/ngx_pagespeed-release-1.5.27.3-beta/src/ngx_fetch.cc:306: error: cannot convert ‘ngx_addr_t’ to ‘in_addr_t’ in assignment
              make[1]: *** [objs/addon/src/ngx_fetch.o] Error 1
              make[1]: Leaving directory `/soft/nginx-1.6.3′
              make: *** [build] Error 2
              ================
              重新编译执行make的结果,不知道是哪里出错了

                • yeho yeho

                  @ teddy 版本不兼容吧,很久不搞这个玩意

                • 玉满斋 玉满斋

                  好像最新版开始对内存有要求了!1G内存的好像就不能编译了!无语!

                    • yeho yeho

                      @ 玉满斋 PageSpeed?

                        • Hao Hao

                          @ yeho 博主你好,用源码编译的话,好像64bit操作系统不能直接那样用,要./configure –add-module=$HOME/ngx_pagespeed-${NPS_VERSION} ${PS_NGX_EXTRA_FLAGS}这样子,NPS_VERSION是版本号,但是后面那个PS_NGX_EXTRA_FLAGS谷歌网站并没有提及……这个是什么呢?