使用CentOS 7上的Ngx_Pagespeed加快Nginx性能

本文将向您展示如何使用Ngx_pagespeed模块安装和配置Nginx,以优化和提高站点性能并减少页面加载时间。

Nginx [引擎x]是一个免费的开源,跨平台,功能强大的Web服务器和用C编写的逆向代理软件。它也是一个标准的IMAP / POP3和TCP / UDP代理服务器,可以用作负载平衡器。

Nginx是众所周知的HTTP服务器(与Apache HTTP服务器相当),为网络上的众多站点提供支持; 它的高性能和稳定性受到欢迎。

当您希望改善网站上的用户体验时,包括网站速度和网页速度(也称为网页载入时间)),您可以考虑各种重要因素。 如果您的网站由Nginx提供支持,那么您可以使用ngx_pagespeed进行此操作。

建议阅读: 安装Mod_Pagespeed以提高Apache服务器性能

Ngx_pagespeed是一个免费的开源Nginx模块,用于提高网站的速度以及缩小页面加载时间。 它显着减少了用户查看和与您的网站内容交互所需的时间。

Ngx_pagespeed特点:

  • 支持HTTPS和URL控制。
  • 图像优化:剥离元数据,动态调整大小,重新压缩。
  • CSS和JavaScript的缩小,连接,内联和大纲。
  • 小资源内联。
  • 延迟图像和JavaScript加载。
  • HTML重写
  • 缓存生存期延长。
  • 允许配置多个服务器和许多其他服务器。

在本教程中,我们将展示如何使用ngx_pagespeed安装Nginx并在RHEL / CentOS 7上测试整个安装。

第1步:从源安装Nginx

1.使用ngx_pagespeed安装Nginx需要从源代码编译它。 首先安装从源代码编译Nginx所需的所有软件包。

# yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel
OR
# yum group install "Development Tools"
在CentOS 7上安装开发工具

在CentOS 7上安装开发工具

2.接下来,使用wget命令获取最新版本的Nginx的源文件(在本文撰写时为1.13.2 ),并提取下载的tar球,如下所示。

# mkdir ~/downloads
# cd ~/downloads
# wget -c https://nginx.org/download/nginx-1.13.2.tar.gz
# tar -xzvf nginx-1.13.2.tar.gz
下载Nginx源文件

下载Nginx源文件

3.接下来,下载ngx_pagespeed源文件并解压缩压缩文件。

# wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
# unzip v1.12.34.2-stable.zip
下载Ngx_Pagespeed

下载Ngx_Pagespeed

4.现在进入解压缩的ngx_pagespeed目录,并获得PageSpeed优化库来编译Nginx,如下所示。

# cd ngx_pagespeed-1.12.34.2-stable/
# wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
# tar -xvzf 1.12.34.2-x64.tar.gz
下载PageSpeed优化库

下载PageSpeed优化库

第2步:使用Ngx_Pagespeed配置和编译Nginx

5.现在进入nginx-1.13.2目录,并通过运行以下命令配置Nginx源代码。

# cd ~/downloads/nginx-1.13.2
# ./configure --add-module=$HOME/downloads/ngx_pagespeed-1.12.34.2-stable/ --user=nobody --group=nobody --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid ${PS_NGX_EXTRA_FLAGS}
用Ngx_Pagespeed配置Nginx

用Ngx_Pagespeed配置Nginx

接下来,编译并安装Nginx如下。

# make
# make install
用Ngx_Pagespeed编译Nginx

用Ngx_Pagespeed编译Nginx

7.安装过程完成后,为Nginx创建必要的符号链接。

# ln -s /usr/local/nginx/conf/ /etc/nginx/
# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
创建Nginx Symlinks

创建Nginx Symlinks

第3步:为SystemD创建Nginx单元文件

8.接下来,由于systemdCentOS 7中init系统,因此需要手动创建Nginx单元文件。

Fisrt,创建文件/lib/systemd/system/nginx.service ,然后抓住NGINX systemd服务文件将单元文件配置粘贴到下面的文件中。

# vi /lib/systemd/system/nginx.service

注意在配置和编译Nginx时设置的PIDFileNGINX二进制文件的位置,您将将它们设置在单元文件中的相应变量中,如下所示:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Nginx Systemd服务单元文件

Nginx Systemd服务单元文件

保存文件并关闭它。

9.在这一点上,启动nginx服务的同时,并通过运行以下命令使其能够在系统启动时启动。

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx
启动并启用Nginx

启动并启用Nginx

第4步:使用Pagespeed模块配置Nginx

10.安装Nginx之后,您需要启用Ngx_pagespeed模块。 首先创建一个目录,模块将缓存您网站的文件,并使用以下命令设置此目录的相应权限。

# mkdir -p /var/ngx_pagespeed_cache
# chown -R nobody:nobody /var/ngx_pagespeed_cache
创建Nginx缓存目录

创建Nginx缓存目录

11.现在是时候启用Ngx_pagespeed模块,打开Nginx配置文件并添加下面的行。

重要提示 :如果在服务器上配置了任何nginx虚拟主机 ,请将以上pagespeed指令添加到每个服务器块,以便在每个站点上启用Ngx_pagespeed。

# vi /etc/nginx/nginx.conf

在服务器块中添加以下Ngx_pagespeed配置行。

# Pagespeed main settings
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# 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" { }

以下是在默认虚拟主机中启用了Ngx_pagespeed的Nginx配置文件的工作示例。

Nginx配置与Ngx_pagespeed
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
#access_log  logs/access.log  main;
sendfile        on;
#tcp_nopush     on;
#keepalive_timeout  0;
keepalive_timeout  65;
#gzip  on;
server {
listen       80;
server_name  localhost; 
#charset koi8-r;
#access_log  logs/host.access.log  main;
# Pagespeed main settings
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# 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 / {
root   html;
index  index.html index.htm;
}
#error_page  404              /404.html;
# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename  alias  another.alias;
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;
#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;
#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;
#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
}

12.然后,通过运行下面的命令,确保Nginx配置文件是无错误的,如果一切顺利,您将看到下面的输出。

# nginx -t
检查Nginx配置错误

检查Nginx配置错误

13.最后,重新启动Nginx服务器,使更改生效。

# systemctl restart nginx

第5步:用Ngx_pagespeed测试Nginx

要知道Ngx_pagespeed是否与Nginx一起工作,它必须出现在X-Page-Speed标题中。

# curl -I -p http://localhost
用Ngx_Pagespeed测试Nginx

用Ngx_Pagespeed测试Nginx

如果您未能看到上述标题,请返回第1步1,并仔细按照说明启用Ngx-pagepeed以及后续步骤。

Ngx-pagespeed Github仓库https//github.com/pagespeed/ngx_pagespeed

就这些! 在本教程中,我们展示了如何使用Ngx_pagespeed模块安装和配置Nginx,以优化和提高站点性能,并减少页面加载时间。

要保护Nginx Web服务器,请阅读本文 - Nginx Web服务器的安全,改进和改进性能的终极指南”

和往常一样,不要犹豫,让我们知道有关本教程的任何疑问或想法。