前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你的nginx访问过慢?增加个模块吧!

你的nginx访问过慢?增加个模块吧!

原创
作者头像
新巴子
修改2018-07-18 11:53:41
3.4K0
修改2018-07-18 11:53:41
举报

简介

ngx_pagespeed 是nginx web服务器的一个模块,通过安装它你的网站加载速度将会“嗖”的一下上升。

构建自定义nginx模块包

Nginx 不支持所谓的"动态加载",但是它允许您在安装前自由添加插件或模块。因此,向nginx添加模块的唯一方法是在编译时添加它们。在本教程中,您将通过Debian wheezy backport源来构建它,从而将ngx_pagespeed模块添加到nginx,因为Debian backports存储库具有更新的nginx版本。

第一步,添加Debian wheezy backports存储库

默认情况下,Debian wheezy不包含系统中的backports存储库,因此我们必须按照以下步骤自行添加:

  • 在系统中的文本编辑器中打开"sources.list"文件:sudo vim /etc/apt/sources.list
  • 将以下两行(Debian backports存储库)附加到其末尾(确保每个行都插入到单独的行中):
代码语言:txt
复制
[....]
deb http://ftp.uk.debian.org/debian wheezy-backports main
deb-src http://ftp.uk.debian.org/debian wheezy-backports main
  • 更新Debian存储库包列表:
代码语言:txt
复制
sudo apt-get update

第二步,下载nginx backport源安装包并构建依赖项

现在您已将backports存储库添加到系统中,现在可以下载nginx backport源安装包了。但是,在此之前,您必须下载并安装一些必备软件包以帮助您构建自定义nginx软件包:

  • 安装Debian基本构建包:
代码语言:txt
复制
sudo apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
  • 从backports存储库安装nginx构建依赖项; 由于默认情况下停用了backports存储库,因此必须明确指定apt:
代码语言:txt
复制
sudo apt-get-t wheezy-backports build-dep nginx

现在,您可以从backports存储库开始下载nginx源包:

  • 首先,让我们在主目录中创建一个文件夹,将nginx源包下载到这个目录下:
代码语言:txt
复制
 cd ~
 mkdir custom-nginx-1.4.4    *# or choose whatever folder name you like*
 cd custom-nginx-1.4.4
  • 下载nginx源码包:
代码语言:txt
复制
sudo apt-get -t wheezy-backports source nginx

第三步、准备&修改nginx源安装包

列出您文件夹的内容:

代码语言:txt
复制
ls -la

您应该看到三个文件和一个文件夹:

在编写本教程时,nginx backport源包的版本是1.4.4。要开始添加ngx_pagespeed模块,首先需要转到解压缩文件夹"nginx-1.4.4"中的module文件夹:

代码语言:txt
复制
cd nginx-1.4.4/debian/modules

进入模块文件夹后,执行以下命令行:

代码语言:txt
复制
 wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.7.30.1-beta.zip
 unzip v1.7.30.1-beta.zip
 cd ngx_pagespeed-1.7.30.1-beta/
 wget https://dl.google.com/dl/page-speed/psol/1.7.30.1.tar.gz
 tar -xzvf 1.7.30.1.tar.gz

现在,您已将ngx_pagespeed模块成功添加到nginx源包的模块文件夹中,可以使用其他nginx模块进行构建。但是在这之前,您必须完成两个更重要的步骤:

  • 编辑位于debian文件夹中的 规则 文件:
代码语言:txt
复制
sudo vim ~/custom-nginx-1.4.4/nginx-1.4.4/debian/rules

在这个文件中,你会发现四个config.status块(config.status.full,config.status.light,config.status.extras,config.status.naxsi); 每个块以 (CONFIGURE_OPTS)> @ 结尾。您所要做的就是在 (CONFIGURE_OPTS)> @ 行之前添加四个块,然后保存更改:--add-module=$(MODULESDIR)/ngx\_pagespeed-1.7.30.1-beta \

  • 增加源包版本,因为这将有助于您以后固定安装包。使用文本编辑器打开 changelog 文件:
代码语言:txt
复制
sudo vim ~/custom-nginx-1.4.4/nginx-1.4.4/debian/changelog

changelog文件的第一行代表当前包版本(1.4.4-1~bpro70 + 1)和发行版(wheezy-backports),只需在序号前面添加您的昵称或任何您喜欢的名字。 :

第四步、构建自定义nginx包

现在,是时候构建包含ngx pagespeed模块的自定义包了但是,由于构建此程序包至少需要10分钟(取决于计算机的速度),我们将使用名为 Screen 的应用程序,它只是常规终端窗口中的terminal。但与常规终端不同,在丢失与其的连接后,Screen会使当前shell会话下运行的进程保持活动状态。这意味着如果在构建程序包期间丢失了与shell会话的连接,我们不必重新开始整个过程。

创建"屏幕会话"后,让我们开始构建包:

代码语言:txt
复制
 cd ~/custom-nginx-1.4.4/nginx-1.4.4
 sudo dpkg-buildpackage -b

现在,您可以让包构建工具自行完成工作。

再次出现命令提示符后,您就知道构建过程已完成。现在生成的包位于源包文件夹的外部:

代码语言:txt
复制
 cd ~/custom-nginx-1.4.4
 ls -la

您应该看到类似于以下的内容:

代码语言:txt
复制
root@debian-lab2::~/custom-nginx-1.4.4# ls -la
total 72052
drwxr-xr-x  3 root root     4096 Dec 28 13:35 .
drwxr-xr-x  4 root root     4096 Dec 27 03:51 ..
drwxr-xr-x 10 root root     4096 Dec 28 13:34 nginx-1.4.4
-rw-r--r--  1 root root    78168 Dec 28 13:34 nginx-common_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root    79988 Dec 28 13:34 nginx-doc_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root 26144390 Dec 28 13:35 nginx-extras-dbg_1.4.4-1~bpo70+1_amd64.deb
-rw-r--r--  1 root root  3481982 Dec 28 13:35 nginx-extras_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 24335692 Dec 28 13:35 nginx-full-dbg_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root  3286600 Dec 28 13:35 nginx-full_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root  3618406 Dec 28 13:35 nginx-light-dbg_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root  3049594 Dec 28 13:35 nginx-light_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root  3796392 Dec 28 13:35 nginx-naxsi-dbg_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root   356138 Dec 28 13:34 nginx-naxsi-ui_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root  3092638 Dec 28 13:35 nginx-naxsi_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root  1570640 Nov 28 12:07 nginx_1.4.4-1~bpo70+1.debian.tar.gz
-rw-r--r--  1 root root     2843 Nov 28 12:07 nginx_1.4.4-1~bpo70+1.dsc
-rw-r--r--  1 root root    66716 Dec 28 13:34 nginx_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root     4922 Dec 28 13:35 nginx_1.4.4-1~bpo70+1-custom_amd64.changes
-rw-r--r--  1 root root   768217 Nov 21 10:28 nginx_1.4.4.orig.tar.gz

第五步、安装自定义nginx包

现在您要做的就是选择要安装的nginx包。共有四种nginx包,它们的区别是其中包含的模块数量不同; 我将选择如完整版本进行安装。

代码语言:txt
复制
sudo dpkg -i nginx-full_1.4.4-1~bpo70+1-custom_amd64.deb nginx-common_1.4.4-1~bpo70+1-custom_all.deb nginx_1.4.4-1~bpo70+1-custom_all.deb

您可能已经注意到,您将在nginx-full_1.4.4-1~bpo70+1-custom_amd64.deb之外再安装两个.deb软件包。这两个是包依赖关系,您必须与四个nginx包中的任何一个(full,light,extras,naxsi)共同安装。

如果您遇到以下错误消息:

代码语言:txt
复制
dpkg: dependency problems prevent configuration of nginx-common:
 nginx-common depends on init-system-helpers (>= 1.11~); however:
  Package init-system-helpers is not installed.
 [...]

或执行上一个命令后有关依赖性问题的任何错误消息,请执行以下命令:

代码语言:txt
复制
sudo apt-get -f install

这将解决您可能遇到的任何依赖性问题,并恢复先前中断的安装。

最后,检查ngx_pagespeed模块是否已成功安装nginx包:

代码语言:txt
复制
sudo nginx -V

如果安装成功,您应该在其他模块中看到ngx_pagespeed模块:

代码语言:txt
复制
root@debian-lab2:~/shared# 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_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=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-upload-progress 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-auth-pam 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-dav-ext-module 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-echo 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-upstream-fair 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/ngx_http_substitutions_filter_module 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/ngx_pagespeed-1.7.30.1-beta

第六步、启用ngx_pagespeed模块

在启用模块之前,我们必须创建一个文件夹,将网站的文件缓存到:

代码语言:txt
复制
 sudo mkdir -p /var/ngx_pagespeed_cache

 sudo chown -R www-data:www-data /var/ngx_pagespeed_cache

然后在文本编辑器中打开"nginx.conf"文件

代码语言:txt
复制
sudo vim /etc/nginx/nginx.conf

并在 http 块中添加以下行并保存更改:

代码语言:txt
复制
##
#ngx_pagespeed module settings
##

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

"nginx.conf"文件应该是这样的:

现在,重新启动nginx服务器以使更改生效:

代码语言:txt
复制
sudo service nginx restart

要确认已成功启用ngx_pagespeed模块,请执行以下命令:

代码语言:txt
复制
sudo apt-get install curl
curl -I -p http://localhost|grep X-Page-Speed

您将应该在输出中看到标题X-Page-Speed:

最后,将以下行添加到位于/etc/nginx/sites-available的网站虚拟主机文件中的每个服务器:

代码语言:txt
复制
#  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; }

最后一部:固定您的自定义nginx包版本

为了防止您的自定义nginx软件包将来被apt替换为更新版本的nginx,您应该通过以下步骤锁定您的软件包升级:

  • /etc/apt/preferences.d中 创建一个新文件:
代码语言:txt
复制
sudo vim /etc/apt/preferences.d/nginx
  • 然后在其中粘贴以下行并保存确保将Pin版本替换为您之前设置的自定义版本:
代码语言:txt
复制
Package: nginx
Pin: version 1.4.4-1~bpo70+1-custom
Pin-Priority: 1001

免责声明

自定义程序包有一个缺点,即每当修补安全漏洞时都要自行更新它。这意味着运行"apt-get upgrade"将不会对您的包执行任何操作,因为它已经被固定。因此,请务必定期检查已发布的安全更新。

现在访问下你的网站看看速度变快了嘛?


参考文献:《How To Add ngx_pagespeed Module to Nginx in Debian Wheezy》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 构建自定义nginx模块包
    • 第一步,添加Debian wheezy backports存储库
      • 第二步,下载nginx backport源安装包并构建依赖项
        • 第三步、准备&修改nginx源安装包
          • 第四步、构建自定义nginx包
            • 第五步、安装自定义nginx包
              • 第六步、启用ngx_pagespeed模块
                • 最后一部:固定您的自定义nginx包版本
                相关产品与服务
                对象存储
                对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档