网站搜索

在 Debian 和 Ubuntu 上安装带有 Ngx_Pagespeed(速度优化)的 Nginx


在上一篇文章中,我们展示了如何在 CentOS 7 上使用 Ngx_Pagespeed 加速 Nginx 性能。在本教程中,我们将解释如何在 Debian 和 Ubuntu 系统上使用 ngx_pagespeed 安装 Nginx 以提高 Nginx 网站的性能。

Nginx [engine x] 是一款免费、开源、流行的 HTTP 服务器,为网络上的许多网站提供支持:以其高性能和稳定性而闻名。它还可以用作反向代理、通用邮件和 TCP/UDP 代理服务器,并且还可以部署为负载平衡器。

Ngx_pagespeed 是一个免费开源的 Nginx 模块,旨在提高网站速度并减少页面加载时间;它大大减少了用户查看您网站上的内容并与之交互所需的时间。

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

ngx_pagespeed 特点:

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

第 1 步:从源代码安装 Nginx

1.要从源代码安装Nginxngx_pagespeed,需要在系统上安装以下软件包。

sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip

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

mkdir -p ~/make_nginx
cd ~/make_nginx
wget -c https://nginx.org/download/nginx-1.13.2.tar.gz
tar -xzvf nginx-1.13.2.tar.gz

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

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

步骤 2:使用 Ngx_Pagespeed 配置并编译 Nginx

5. 接下来进入 nginx-1.13.2 目录,并使用以下命令配置 Nginx 源。

cd  ~/make_nginx/nginx-1.13.2
./configure --add-module=$HOME/make_nginx/ngx_pagespeed-1.12.34.2-stable/ ${PS_NGX_EXTRA_FLAGS}

6.接下来,按如下方式编译并安装Nginx。

make
sudo make install

7. 安装过程完成后,运行以下命令为 Nginx 创建必要的符号链接。

sudo ln -s /usr/local/nginx/conf/ /etc/nginx
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

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

8. 在这里,您必须手动创建 Nginx 单元文件,因为 systemd 是较新版本的 Debian 和 Ubuntu 系统上的 init 系统

首先,创建文件 /lib/systemd/system/nginx.service


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

然后下载 NGINX systemd 服务文件,将单元文件配置粘贴到该文件中。

[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

保存文件并关闭它。

9. 现在,暂时启动 nginx 服务,并使用以下命令使其在系统启动时启动。

sudo systemctl start nginx
sudo systemctl enable nginx

重要:启动 Nginx 服务后,您可能会看到如下屏幕截图所示的错误。

systemd[1]: nginx.service: PID file /run/nginx.pid not readable (yet?) after start: No such file or directory 

要解决此问题,请打开 Nginx 配置 /etc/nginx/nginx.conf 文件并附加以下行。

#pid  logs/nginx.pid;
to
pid  /run/nginx.pid;

最后再次重启nginx服务。

sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl status nginx

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

10. 现在 Nginx 已安装并在您的系统上运行,您需要启用 Ngx_pagespeed 模块。首先创建一个目录,模块将在其中缓存您网站的文件,并为此目录设置适当的权限,如下所示。

sudo mkdir -p /var/ngx_pagespeed_cache
sudo chown -R nobody:nogroup /var/ngx_pagespeed_cache

11. 要启用 Ngx_pagespeed 模块,请打开 Nginx 配置文件。

sudo 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" { }

注意:如果您在服务器上部署了任何 nginx 虚拟主机,请将上述 pagespeed 指令添加到每个服务器块,以在每个站点上启用 Ngx_pagespeed。

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

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
pid   /run/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配置文件的语法是否有错误,如果正确,您将看到以下输出:

sudo nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

13.然后重新启动Nginx服务器以使最近的更改生效。

sudo systemctl restart nginx

第 5 步:使用 Ngx_pagespeed 测试 Nginx

14. 现在使用下面的 cURL 命令测试 Ngx-pagespeed 是否可以与 Nginx 结合使用。

curl -I -p http://localhost

如果您没有看到上述标题,请返回到步骤 10,并仔细阅读说明,通过后续步骤启用 Ngx-pagespeed。

NGX-pagespeed Github存储库:https://github.com/pagespeed/ngx_pagespeed

如果您想保护 Nginx Web 服务器的安全,那么我们建议您阅读这个有用的教程:保护、强化和提高 Nginx 性能的终极指南。

这就对了!在本教程中,我们解释了如何在 Debian 和 Ubuntu 上使用 ngx_pagespeed 安装 Nginx。如果您有任何疑问,请使用下面的评论表发送给我们。