使用ngx_pagespeed与nginx在Debian Jessie /测试

使用ngx_pagespeed与nginx在Debian Jessie /测试

PageSpeed Beta可用于nginx,nginx等同于Apache的mod_pagespeed。 该模块将Web性能最佳实践应用于页面和关联资产(CSS,JavaScript,图像),从而加快您的网站的速度,并减少加载时间。 本教程将介绍如何在Debian Jessie / testing上使用PageSpeed与nginx。

我不会保证这将为您工作!

1使用PageSpeed构建nginx

nginx不支持动态加载模块,因此我们必须用PageSpeed支持重建它。 我们将构建一个.deb包,以便我们可以用它替换现有的nginx安装(或者很容易地将其安装在其他系统上)。

首先创建构建目录:

cd /usr/src
mkdir pagespeed && cd pagespeed

确保您在/etc/apt/sources.list中有Jessie / test的debdeb-src行:

vi /etc/apt/sources.list
[...]
deb http://ftp.de.debian.org/debian testing main contrib non-free
deb-src http://ftp.de.debian.org/debian testing main contrib non-free
[...]

更新您的软件包列表并安装一些先决条件:

apt-get update
apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip curl libcurl4-openssl-dev libossp-uuid-dev

下载nginx源代码和构建依赖项:

apt-get source nginx
apt-get build-dep nginx

我们来看看我们的nginx版本:

ls -l
root@server1:/usr/src/pagespeed# ls -l
total 2292
drwxr-xr-x 10 root root    4096 Feb  5 12:54 nginx-1.4.4
-rw-r--r--  1 root root 1568452 Jan  7 19:22 nginx_1.4.4-4.debian.tar.gz
-rw-r--r--  1 root root    2171 Jan  7 19:22 nginx_1.4.4-4.dsc
-rw-r--r--  1 root root  768217 Nov 21 16:28 nginx_1.4.4.orig.tar.gz
root@server1:/usr/src/pagespeed#

我们的nginx版本是1.4.4。 我们去下载的nginx源的debian / modules目录...

cd /usr/src/pagespeed/nginx-1.4.4/debian/modules

...并下载PageSpeed来源(您可以在此页面上查看最新版本: https : //github.com/pagespeed/ngx_pagespeed/releases - 在此示例中,版本为1.7.30.3-beta ;如果您的版本不同,请确保在本教程的其余部分替换它):

wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.7.30.3-beta.zip
unzip release-1.7.30.3-beta.zip
cd ngx_pagespeed-release-1.7.30.3-beta/
wget https://dl.google.com/dl/page-speed/psol/1.7.30.3.tar.gz
tar -xzvf 1.7.30.3.tar.gz

我们来编辑debian / rules文件:

vi /usr/src/pagespeed/nginx-1.4.4/debian/rules

在该文件中,您将找到四个config.status节( config.status.fullconfig.status.lightconfig.status.extrasconfig.status.naxsi )。 在$(CONFIGURE_OPTS)> $ @行之前,将每行添加一行-add-module = $(MODULESDIR)/ngx_pagespeed-release-1.7.30.3-beta \ ,如下所示:

[...]
config.status.full: config.env.full
        cd $(BUILDDIR_full) && CFLAGS="$(CFLAGS)" CORE_LINK="$(LDFLAGS)" ./configure  \
            --prefix=/usr/share/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=/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_spdy_module \
            --with-http_stub_status_module \
            --with-http_ssl_module \
            --with-http_sub_module \
            --with-http_xslt_module \
            --with-ipv6 \
            --with-mail \
            --with-mail_ssl_module \
            --add-module=$(MODULESDIR)/nginx-auth-pam \
            --add-module=$(MODULESDIR)/nginx-dav-ext-module \
            --add-module=$(MODULESDIR)/nginx-echo \
            --add-module=$(MODULESDIR)/nginx-upstream-fair \
            --add-module=$(MODULESDIR)/ngx_http_substitutions_filter_module \
            --add-module=$(MODULESDIR)/ngx_pagespeed-release-1.7.30.3-beta \
            $(CONFIGURE_OPTS) >$@
        touch $@
[...]

现在我们来构建我们新的nginx包:

cd /usr/src/pagespeed/nginx-1.4.4/ && dpkg-buildpackage -b

之后,我们来看看生成的包:

cd /usr/src/pagespeed
ls -l
root@server1:/usr/src/pagespeed# ls -l
total 67260
drwxr-xr-x 10 root root     4096 Feb  5 13:18 nginx-1.4.4
-rw-r--r--  1 root root    67132 Feb  5 13:18 nginx_1.4.4-4_all.deb
-rw-r--r--  1 root root     4749 Feb  5 13:19 nginx_1.4.4-4_amd64.changes
-rw-r--r--  1 root root  1568452 Jan  7 19:22 nginx_1.4.4-4.debian.tar.gz
-rw-r--r--  1 root root     2171 Jan  7 19:22 nginx_1.4.4-4.dsc
-rw-r--r--  1 root root   768217 Nov 21 16:28 nginx_1.4.4.orig.tar.gz
-rw-r--r--  1 root root    79288 Feb  5 13:18 nginx-common_1.4.4-4_all.deb
-rw-r--r--  1 root root    78448 Feb  5 13:18 nginx-doc_1.4.4-4_all.deb
-rw-r--r--  1 root root  2520834 Feb  5 13:19 nginx-extras_1.4.4-4_amd64.deb
-rw-r--r--  1 root root 25480472 Feb  5 13:19 nginx-extras-dbg_1.4.4-4_amd64.deb
-rw-r--r--  1 root root  2372314 Feb  5 13:18 nginx-full_1.4.4-4_amd64.deb
-rw-r--r--  1 root root 23850670 Feb  5 13:19 nginx-full-dbg_1.4.4-4_amd64.deb
-rw-r--r--  1 root root  2349992 Feb  5 13:19 nginx-light_1.4.4-4_amd64.deb
-rw-r--r--  1 root root  3416998 Feb  5 13:19 nginx-light-dbg_1.4.4-4_amd64.deb
-rw-r--r--  1 root root  2384044 Feb  5 13:19 nginx-naxsi_1.4.4-4_amd64.deb
-rw-r--r--  1 root root  3581602 Feb  5 13:19 nginx-naxsi-dbg_1.4.4-4_amd64.deb
-rw-r--r--  1 root root   309478 Feb  5 13:18 nginx-naxsi-ui_1.4.4-4_all.deb
root@server1:/usr/src/pagespeed#

我们现在可以使用PageSpeed支持安装nginx,如下所示:

dpkg --install nginx-common_1.4.4-4_all.deb nginx_1.4.4-4_all.deb nginx-full_1.4.4-4_amd64.deb
/etc/init.d/nginx restart

让我们检查一下PageSpeed模块是否成功建成:

nginx -V

您应该在输出中看到ngx_pagespeed模块:

root@server1:/usr/src/pagespeed# nginx -V
nginx version: nginx/1.4.4
TLS SNI support enabled
configure arguments: --prefix=/usr/share/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=/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_spdy_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-mail --with-mail_ssl_module --add-module=/usr/src/pagespeed/nginx-1.4.4/debian/modules/nginx-auth-pam --add-module=/usr/src/pagespeed/nginx-1.4.4/debian/modules/nginx-dav-ext-module --add-module=/usr/src/pagespeed/nginx-1.4.4/debian/modules/nginx-echo --add-module=/usr/src/pagespeed/nginx-1.4.4/debian/modules/nginx-upstream-fair --add-module=/usr/src/pagespeed/nginx-1.4.4/debian/modules/ngx_http_substitutions_filter_module --add-module=/usr/src/pagespeed/nginx-1.4.4/debian/modules/ngx_pagespeed-release-1.7.30.3-beta
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:

mkdir /var/ngx_pagespeed_cache
chown -R www-data:www-data /var/ngx_pagespeed_cache
/etc/init.d/nginx reload

我们加载一个页面,检查输出中是否提到了PageSpeed:

curl -I -p http://localhost|grep X-Page-Speed
root@server1:/usr/src/pagespeed# 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.7.30.3-3721
root@server1:/usr/src/pagespeed#

现在我们可以单独配置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_global_statistics {
    allow 127.0.0.1;
    deny all;
  }
  location /ngx_pagespeed_message {
    allow 127.0.0.1;
    deny all;
  }
  location /pagespeed_console {
    allow 127.0.0.1;
    deny all;
  }
[...]
}

重要的一行是pagefeed EnableFilters行,它告诉PageSpeed哪个过滤器应该应用它。 您可以在这里找到所有过滤器的列表: http : //ngxpagespeed.com/ngx_pagespeed_example/

之后不要忘记重新启动nginx:

/etc/init.d/nginx reload

当您现在打开一个页面并查看标题(例如,使用FireFox的Live HTTP标头插件)时,应该会看到x页速度行:

您可以检查页面的HTML源,看看PageSpeed过滤器是否按预期工作。

3链接

关于作者

Falko Timme是所有者 Timme Hosting (超快nginx网页托管)。 他是youcl(自2005年以来)的主要维护者, 也是ISPConfig的核心开发人员之一 (自2000年起)。 他还为O'Reilly的“Linux系统管理”一书作出了贡献。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏