使用ngx_pagespeed与nginx在Debian Wheezy上
Google刚刚发布了针对nginx的“PageSpeed Beta”,nginx相当于Apache的mod_pagespeed。 该模块将Web性能最佳实践应用于页面和关联资产(CSS,JavaScript,图像),从而加快您的网站的速度,并减少加载时间。 本教程将介绍如何在Debian Wheezy上使用PageSpeed与nginx。
我不会保证这将为您工作!
1使用PageSpeed构建nginx
nginx不支持动态加载模块,因此我们必须用PageSpeed支持重建它。 我们将构建一个.deb包,以便我们可以用它替换现有的nginx安装(或者很容易地将其安装在其他系统上)。
首先创建构建目录:
cd /usr/src
mkdir pagespeed && cd pagespeed
确保您在/etc/apt/sources.list中
有Wheezy的deb
和deb-src
行:
vi /etc/apt/sources.list
[...] deb http://ftp.de.debian.org/debian/ wheezy main deb-src http://ftp.de.debian.org/debian/ wheezy main [...] |
更新您的软件包列表并安装一些先决条件:
apt-get update
apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev
下载nginx源代码和构建依赖项:
apt-get source nginx
apt-get build-dep nginx
我们来看看我们的nginx版本:
ls -l
root@server1:/usr/src/pagespeed# ls -l
total 2044
drwxr-xr-x 10 root root 4096 Apr 29 13:03 nginx-1.2.1
-rw-r--r-- 1 root root 1360507 Aug 5 2012 nginx_1.2.1-2.2.debian.tar.gz
-rw-r--r-- 1 root root 2740 Aug 5 2012 nginx_1.2.1-2.2.dsc
-rw-r--r-- 1 root root 718161 Jun 27 2012 nginx_1.2.1.orig.tar.gz
root@server1:/usr/src/pagespeed#
我们的nginx版本是1.2.1。 我们去下载的nginx源的debian / modules
目录...
cd /usr/src/pagespeed/nginx-1.2.1/debian/modules
...并下载PageSpeed来源:
git clone https://github.com/pagespeed/ngx_pagespeed.git
我们来编辑debian / rules
文件:
vi /usr/src/pagespeed/nginx-1.2.1/debian/rules
在该文件中,您将找到四个config.status
节( config.status.full
, config.status.light
, config.status.extras
, config.status.naxsi
)。 在$(CONFIGURE_OPTS)> $ @
行之前,将它们中的每一个添加--add-module = $(MODULESDIR)/ ngx_pagespeed \
行,例如:
[...] config.status.full: config.env.full config.sub config.guess cd $(BUILDDIR_full) && CFLAGS="$(CFLAGS)" CORE_LINK="$(LDFLAGS)" ./configure \ --prefix=/etc/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-client-body-temp-path=/var/lib/nginx/body \ --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ --http-log-path=/var/log/nginx/access.log \ --http-proxy-temp-path=/var/lib/nginx/proxy \ --http-scgi-temp-path=/var/lib/nginx/scgi \ --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ --lock-path=/var/lock/nginx.lock \ --pid-path=/var/run/nginx.pid \ --with-pcre-jit \ --with-debug \ --with-http_addition_module \ --with-http_dav_module \ --with-http_geoip_module \ --with-http_gzip_static_module \ --with-http_image_filter_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_sub_module \ --with-http_xslt_module \ --with-ipv6 \ --with-sha1=/usr/include/openssl \ --with-md5=/usr/include/openssl \ --with-mail \ --with-mail_ssl_module \ --add-module=$(MODULESDIR)/nginx-auth-pam \ --add-module=$(MODULESDIR)/nginx-echo \ --add-module=$(MODULESDIR)/nginx-upstream-fair \ --add-module=$(MODULESDIR)/nginx-dav-ext-module \ --add-module=$(MODULESDIR)/ngx_pagespeed \ $(CONFIGURE_OPTS) >$@ touch $@ [...] |
现在我们来构建我们新的nginx包:
cd /usr/src/pagespeed/nginx-1.2.1/ && dpkg-buildpackage -b
之后,我们来看看生成的包:
cd /usr/src/pagespeed
ls -l
root@server1:/usr/src/pagespeed# ls -l
total 35464
drwxr-xr-x 10 root root 4096 Apr 29 13:12 nginx-1.2.1
-rw-r--r-- 1 root root 61006 Apr 29 13:12 nginx_1.2.1-2.2_all.deb
-rw-r--r-- 1 root root 5143 Apr 29 13:12 nginx_1.2.1-2.2_amd64.changes
-rw-r--r-- 1 root root 1360507 Aug 5 2012 nginx_1.2.1-2.2.debian.tar.gz
-rw-r--r-- 1 root root 2740 Aug 5 2012 nginx_1.2.1-2.2.dsc
-rw-r--r-- 1 root root 718161 Jun 27 2012 nginx_1.2.1.orig.tar.gz
-rw-r--r-- 1 root root 72632 Apr 29 13:12 nginx-common_1.2.1-2.2_all.deb
-rw-r--r-- 1 root root 74042 Apr 29 13:12 nginx-doc_1.2.1-2.2_all.deb
-rw-r--r-- 1 root root 4140470 Apr 29 13:12 nginx-extras_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 6075706 Apr 29 13:12 nginx-extras-dbg_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 3931344 Apr 29 13:12 nginx-full_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 4609688 Apr 29 13:12 nginx-full-dbg_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 3815222 Apr 29 13:12 nginx-light_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 3546806 Apr 29 13:12 nginx-light-dbg_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 3853762 Apr 29 13:12 nginx-naxsi_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 3673646 Apr 29 13:12 nginx-naxsi-dbg_1.2.1-2.2_amd64.deb
-rw-r--r-- 1 root root 342008 Apr 29 13:12 nginx-naxsi-ui_1.2.1-2.2_all.deb
root@server1:/usr/src/pagespeed#
我们现在可以使用PageSpeed支持安装nginx,如下所示:
dpkg --install nginx-common_1.2.1-2.2_all.deb nginx_1.2.1-2.2_all.deb nginx-full_1.2.1-2.2_amd64.deb
让我们检查一下PageSpeed模块是否成功建成:
nginx -V
您应该在输出中看到ngx_pagespeed
模块:
root@server1:/usr/src/pagespeed# nginx -V
nginx version: nginx/1.2.1
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module
--with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module
--with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module
--add-module=/usr/src/pagespeed/nginx-1.2.1/debian/modules/nginx-auth-pam --add-module=/usr/src/pagespeed/nginx-1.2.1/debian/modules/nginx-echo
--add-module=/usr/src/pagespeed/nginx-1.2.1/debian/modules/nginx-upstream-fair --add-module=/usr/src/pagespeed/nginx-1.2.1/debian/modules/nginx-dav-ext-module
--add-module=/usr/src/pagespeed/nginx-1.2.1/debian/modules/ngx_pagespeed
root@server1:/usr/src/pagespeed#
2配置PageSpeed
要启用PageSpeed,请打开/etc/nginx/nginx.conf
...
vi /etc/nginx/nginx.conf
...并添加行页面;
和pagepeed FileCachePath / var / ngx_pagespeed_cache;
在任何vhosts之前:
[...] pagespeed on; pagespeed FileCachePath /var/ngx_pagespeed_cache; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; [...] |
创建缓存目录并重新启动nginx (请注意,无论何时修改PageSpeed配置,无论是在主nginx配置还是在vhost中,都必须重新启动nginx - 一个简单的重新加载不起作用)
mkdir /var/ngx_pagespeed_cache
chown -R www-data:www-data /var/ngx_pagespeed_cache
/etc/init.d/nginx restart
root@server1:~# /etc/init.d/nginx restart
Restarting nginx: Setting option from ("on")
Setting option from ("FileCachePath", "/var/ngx_pagespeed_cache")
nginx.
root@server1:~#
我们加载一个页面,检查输出中是否提到了PageSpeed:
curl -I -p http://localhost|grep X-Page-Speed
root@server1:~# curl -I -p http://localhost|grep X-Page-Speed
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
X-Page-Speed: 1.5.27.1-2845
root@server1:~#
现在我们可以单独配置PageSpeed或每个vhost,例如:
vi /etc/nginx/sites-available/example.com.vhost
server { [...] # let's speed up PageSpeed by storing it in the super duper fast memcached pagespeed MemcachedThreads 1; pagespeed MemcachedServers "localhost:11211"; # Filter settings pagespeed RewriteLevel CoreFilters; pagespeed EnableFilters collapse_whitespace,remove_comments; # Ensure requests for pagespeed optimized resources go to the pagespeed # handler and no extraneous headers get set. location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; } location ~ "^/ngx_pagespeed_static/" { } location ~ "^/ngx_pagespeed_beacon$" { } location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; } location /ngx_pagespeed_message { allow 127.0.0.1; deny all; } [...] } |
重要的一行是pagefeed EnableFilters
行,它告诉PageSpeed哪个过滤器应该应用它。 您可以在这里找到所有过滤器的列表: http : //ngxpagespeed.com/ngx_pagespeed_example/
之后不要忘记重新启动nginx:
/etc/init.d/nginx restart
当您现在打开一个页面并查看标题(例如,使用FireFox的Live HTTP标头插件)时,应该会看到x页速度
行:
您可以检查页面的HTML源,看看PageSpeed过滤器是否按预期工作。
3链接
- Google Developers的博客: http : //googledevelopers.blogspot.nl/2013/04/speed-up-your-sites-with-pagespeed-for.html
- ngx_pagespeed: https : //developers.google.com/speed/pagespeed/ngx
- 建立/使用PageSpeed: https : //github.com/pagespeed/ngx_pagespeed
- ngx_pagespeed过滤器示例: http : //ngxpagespeed.com/ngx_pagespeed_example/
关于作者
Falko Timme是所有者 Timme Hosting (超快nginx网页托管)。 他是youcl(自2005年以来)的主要维护者, 也是ISPConfig的核心开发人员之一 (自2000年起)。 他还为O'Reilly的“Linux系统管理”一书作出了贡献。