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

  • A+
所属分类:Linux

作为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

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:9   其中:访客  5   博主  4

    • avatar zhang

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

        • avatar yeho Admin

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

            • avatar Qa

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

          • avatar 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的结果,不知道是哪里出错了

              • avatar yeho Admin

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

              • avatar 玉满斋

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

                  • avatar yeho Admin

                    @玉满斋 PageSpeed?

                      • avatar Hao

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