Trang chủ Thủ thuật

Hướng dẫn cài đặt ngx_pagespeed trên CentOS 7

Hướng dẫn cài đặt ngx_pagespeed trên CentOS 7

Pagespeed là một module cho phép giảm thời gian tải trang, tăng tốc độ website phát triển bởi ông lớn "Google". Pagespeed có 2 phiên bản: mod_pagespeed tích hợp với Apache và ngx_pagespeed tích hợp với Nginx. Module này tự động chọn và apply các filter xử lý thích hợp nhất vào từng trang mà không cần thay đổi mã nguồn, tập trung vào tăng cường xử lý cho CSS, HTML, Javascript và caching các file tĩnh.

Một số filter hay của ngx_pagespeed

- Collapse Whitespace: giảm băng thông sử dụng bằng cách thay thế nhiều khoảng trắng (whitespace) trong HTML bằng 1 khoảng trắng mà thôi.

- Canonicalize JavaScript Libraries: giảm băng thông sử dụng bằng cách tự động sử dụng các thư viện Javascript phổ biến trên server free (vd như của Google).

- Combine CSS: giảm số lượng HTTP requests bằng cách kết hợp nhiều file CSS thành một file.

- Combine JavaScript: giảm số lượng HTTP requests bằng cách kết hợp nhiều file JavaSript thành một file.

- Extend Cache: giảm băng thông sử dụng bằng cách tối ưu chức năng cache của browser.

- Flatten CSS Imports: giảm số lượng HTTP request bằng cách xóa @import trong file CSS.

- Lazyload Images: làm chậm lại việc load các hình ảnh ko được hiển trị trên trình duyệt người dùng.

- Minify JavaScript: giảm băng thông sử dụng bằng cách tối ưu kích thước file Javascript.

- Optimize Images: tối ưu hóa hình ảnh bằng cách sử dụng inline images, nén hình ảnh, hoặc convert GIF sang PNG.

- Pre-Resolve DNS: giảm thời gian phân giải DNS bằng cách phân giải trước DNS sử dụng HTML

Ngoài ra, bạn có thể xem toàn bộ filter và ví dụ tại PageSpeed Filter Examples.

Cài đặt ngx_pagespeed trên CentOS 7

Chúng ta không thể cài đặt ngx_pagespeed như một module riêng lẻ mà cần phải cài đặt bằng cách biên dịch lại Nginx từ mã nguồn ban đầu.

Bài viết được thực hiện trên server Centos 7.

1. Cài đặt các gói tin cần thiết

sudo yum update -y  sudo yum install gcc cmake unzip wget gcc-c   pcre-devel zlib-devel -y

2. Biên dịch lại nginx

Tải về máy source code của nginx và của ngx_pagespeed:

wget http://nginx.org/download/nginx-1.12.0.tar.gz  wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip

Giải nén các thư mục tar -xvzf nginx-1.12.0.tar.gz và unzip v1.12.34.2-stable.zip

Tải về thư viện tối ưu PageSpeed từ Google

cd ngx_pagespeed-1.12.34.2-stable  wget https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz  tar -xvzf 1.12.34.2-x64.tar.gz  cd ..

Giờ chúng ta sẽ biên dịch nginx với Pagespeed module:

cd nginx-1.12.0  sudo ./configure --add-module=$HOME/ngx_pagespeed-1.12.34.2-stable --user=nobody --group=nobody --pid-path=/var/run/nginx.pid ${PS_NGX_EXTRA_FLAGS}  sudo make  sudo make install  sudo ln -s /usr/local/nginx/conf/ /etc/nginx  sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx  

Create statup script:

sudo vim /etc/init.d/nginx

Thêm script sau vào file:

#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig:   - 85 15 # description:  NGINX is an HTTP(S) server, HTTP(S) reverse \ #               proxy and IMAP/POP3 proxy server # processname: nginx # config:      /etc/nginx/nginx.conf # config:      /etc/sysconfig/nginx # pidfile:     /var/run/nginx.pid  # Source function library. . /etc/rc.d/init.d/functions  # Source networking configuration. . /etc/sysconfig/network  # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0  nginx="/usr/sbin/nginx" prog=$(basename $nginx)  NGINX_CONF_FILE="/etc/nginx/nginx.conf"  [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx  lockfile=/var/lock/subsys/nginx  make_dirs() {    # make required directories    user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`    if [ -n "$user" ]; then       if [ -z "`grep $user /etc/passwd`" ]; then          useradd -M -s /bin/nologin $user       fi       options=`$nginx -V 2>&1 | grep 'configure arguments:'`       for opt in $options; do           if [ `echo $opt | grep '.*-temp-path'` ]; then               value=`echo $opt | cut -d "=" -f 2`               if [ ! -d "$value" ]; then                   # echo "creating" $value                   mkdir -p $value && chown -R $user $value               fi           fi        done     fi }  start() {     [ -x $nginx ] || exit 5     [ -f $NGINX_CONF_FILE ] || exit 6     make_dirs     echo -n $"Starting $prog: "     daemon $nginx -c $NGINX_CONF_FILE     retval=$?     echo     [ $retval -eq 0 ] && touch $lockfile     return $retval }  stop() {     echo -n $"Stopping $prog: "     killproc $prog -QUIT     retval=$?     echo     [ $retval -eq 0 ] && rm -f $lockfile     return $retval }  restart() {     configtest || return $?     stop     sleep 1     start }  reload() {     configtest || return $?     echo -n $"Reloading $prog: "     killproc $nginx -HUP     RETVAL=$?     echo }  force_reload() {     restart }  configtest() {   $nginx -t -c $NGINX_CONF_FILE }  rh_status() {     status $prog }  rh_status_q() {     rh_status >/dev/null 2>&1 }  case "$1" in     start)         rh_status_q && exit 0         $1         ;;     stop)         rh_status_q || exit 0         $1         ;;     restart|configtest)         $1         ;;     reload)         rh_status_q || exit 7         $1         ;;     force-reload)         force_reload         ;;     status)         rh_status         ;;     condrestart|try-restart)         rh_status_q || exit 0             ;;     *)         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"         exit 2 esac

Save file và set quyền thực thi cho file:

sudo chmod  x /etc/init.d/nginx

Khởi động nginx và cấu hình bật nginx khi khởi động:

sudo systemctl start nginx  sudo systemctl enable nginx

3. Cấu hình nginx và ngx_pagespeed

Khi biên dịch xong nginx, mặc định ngx_pagespeed sẽ ở trạng thái disable. Trước khi enable pagespeed, cần tạo một thư mục cache cho pagespeed và gắn quyền truy cập cho nginx.

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

Chỉnh lại một số cầu hình trong nginx.conf:

sudo vim /etc/nginx/nginx.conf

Thêm các dòng sau vào block server:

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

Lưu ý:  Nếu bạn sử dụng virtual hosting, thêm config trên vào mỗi block server config để enable pagespeed trên mỗi website.

Check config nginx bằng câu lệnh:

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

Khởi động lại nginx:

sudo systemctl restart nginx

4. Check ngx_pagespeed

Check ngx_pagespeed có hoạt động hay không bằng câu lệnh:

curl -I -p http://localhost  HTTP/1.1 200 OK Server: nginx/1.12.0 Content-Type: text/html Connection: keep-alive Vary: Accept-Encoding Date: Wed, 21 Jun 2017 17:21:08 GMT X-Page-Speed: 1.12.34.2-0 Cache-Control: max-age=0, no-cache

Bạn sẽ thấy X-Page-Speed và version của nó. Điều này nghĩa là pagespeed đã được cài đặt thành công.

>> Có thể bạn quan tâm: Hướng dẫn cài đặt OpenVPN Client trên CentOS/ RHEL 7