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

简介

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存储库)附加到其末尾(确保每个行都插入到单独的行中):
[....]
deb http://ftp.uk.debian.org/debian wheezy-backports main
deb-src http://ftp.uk.debian.org/debian wheezy-backports main
  • 更新Debian存储库包列表:
sudo apt-get update

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

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

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

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

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

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

列出您文件夹的内容:

ls -la

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

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

cd nginx-1.4.4/debian/modules

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

 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文件夹中的 规则 文件:
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 文件:
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会话的连接,我们不必重新开始整个过程。

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

 cd ~/custom-nginx-1.4.4/nginx-1.4.4
 sudo dpkg-buildpackage -b

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

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

 cd ~/custom-nginx-1.4.4
 ls -la

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

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包,它们的区别是其中包含的模块数量不同; 我将选择如完整版本进行安装。

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)共同安装。

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

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.
 [...]

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

sudo apt-get -f install

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

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

sudo nginx -V

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

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模块

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

 sudo mkdir -p /var/ngx_pagespeed_cache

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

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

sudo vim /etc/nginx/nginx.conf

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

##
#ngx_pagespeed module settings
##

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

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

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

sudo service nginx restart

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

sudo apt-get install curl
curl -I -p http://localhost|grep X-Page-Speed

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

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

#  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中 创建一个新文件:
sudo vim /etc/apt/preferences.d/nginx
  • 然后在其中粘贴以下行并保存确保将Pin版本替换为您之前设置的自定义版本:
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》

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

CVE2018-1111 漏洞复现

近日,红帽官方发布了安全更新,修复了编号为 CVE-2018-1111 的远程代码执行漏洞,攻击者可以通过伪造 DHCP 服务器发送响应包,攻击红帽系统,获取 ...

17200
来自专栏乐百川的学习频道

持续集成工具TeamCity快速入门

大名鼎鼎的Intellij IDEA大家都听说过吧,它的出品公司Jetbrains不仅推出了一系列好用的IDE,同时还推出了现在正热的Kotlin语言。Jetb...

84580
来自专栏吴伟祥

logging总结 - log4j2使用流程[归档存储]

<web-app> 2.5 以前要多个依赖 log4j-web,还需要在web.xml配置listener、filter

30920
来自专栏Java后端技术栈

使用Spring Session和Redis解决分布式Session跨域共享问题

对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash、轮训、根据权重、随机等。不管对于哪一种负载均衡算法,由于Nginx对不同的...

30120
来自专栏一个爱瞎折腾的程序猿

在 ubuntu 中愉快的安装 Jenkins

第一次安装的可以稍微看下jenkins 的安装文档 总之,如果没有安装 Java 需要安装一下。

20710
来自专栏SpringBoot 核心技术

SpringCloud组件:Eureka高可用集群部署

我们在之前的章节SpringCloud组件:搭建Eureka服务注册中心学习到了单个服务注册中心的创建,不过单模式的部署方式在实战中确实不太提倡,因为有很多种原...

1.1K20
来自专栏FreeBuf

sudo-snooper:一款伪装成sudo命令的“蜜罐”脚本

sudo-snooper是一款伪装成sudo命令的“蜜罐”脚本,可以帮助渗透测试人员进行系统密码的获取。 安装步骤 Option 1:在原生sodu的安装位置安...

19770
来自专栏散尽浮华

文件实时同步后防篡改的操作记录

需求场景: 部署一套sftp环境,用于客户上传电子文件(合同文件或视频文件等),文件上传到sftp后立即实时同步到业务应用服务器上。为了安全考虑,文件在首次同步...

38970
来自专栏自动化测试实战

Flask第二篇——服务器相关

32980
来自专栏大魏分享(微信公众号:david-share)

应用服务器到底是个啥?| 从开发角度看应用架构2:对Java EE应用进行打包和部署!

37120

扫码关注云+社区

领取腾讯云代金券