Hướng dẫn thêm ngx_pagespeed cho Nginx trên CentOS 7

7 năm trước

 

Giới thiệu

ngx_pagespeed hay pagespeed là một module của Nginx được thiết kế để tự động tối ưu hoá trang của bạn bằng cách giảm kích thước tài nguyên, do đó sẽ làm giảm thời gian mà trình duyệt của client cần để  load nó.

Bài viết này sẽ đi hướng dẫn thông qua cài đặt vào tạo cấu hình cho module pagespeed của Nginx. Bạn nên nhớ rằng là Nginx không còn hỗ trợ Dynamic Loading of Modules khả dụng trên server web khác như Apache. Bởi vậy, bạn cần xấy dựng Nginx từ nguồn để thêm module này.

Tuy nhiên sở hữu gói riêng cho mình cũng đi kèm với một bất lợi- bạn luôn luôn phải tự mình update nó mỗi khi có phiên bản mới. Hãy xem xét điều này kĩ trước khi so sánh những thuận lợi và bất lợi của việc dùng ngx_pagespeed.

Điều kiện cần:

Những hướng dẫn này được viết cho CentOS 7. Ubuntu phiên bản 14.04 và Debian 8 cũng có thể áp dụng được.

Trước khi làm theo bài hướng dẫn này, hãy chắc chắn rằng bạn đã hoàn thành một số điều kiện sau:

Ngoài những thứ kể trên, tất cả các command yêu cầu quyền root trong bài hướng dẫn này nên được với tư cách người dùng chưa root 

Bước  1 —Download nguồn và những phần liên quan

Bắt đầu với việc chắc chắn rằng tất cả những software cần thiết cho việc biên dịch và test Nginx đều đã có. Chạy command sau:

$ sudo yum install wget curl unzip gcc-c++ pcre-devel zlib-devel

Tiếp theo, tạo một folder trong thư mục chính của bạn để download gói nguồn cho Nginx:

$ mkdir ~/custom-nginx

Thay đổi thu mục vừa tạo:

$ cd ~/custom-nginx

 

Sau đó, download gói nguồn Nginx cho thư mục này từ trang chính thức của nó. Hiện lại, phiên bản mới nhất là 1.8.0 và có thể download được với dòng command sau:

$ sudo wget http://nginx.org/download/nginx-1.8.0.tar.gz

Sau đó giải nén gói vừa tải với command:

$ sudo tar zxvf nginx-1.8.0.tar.gz

 

Để xem xem chúng ta có đang cùng ở một trang hay không, list nội dung của folder ~/custom-nginx:

$ ls ~/custom-nginx

Kết quả sẽ như thế này:

      Output of ls ~/custom-nginx

      nginx-1.8.0 nginx-1.8.0.tar.gz 

Như bạn có thể thấy, phiên bản của gói nguồn Nginx hiện tại đang là 1.8.0 tại thời điểm viết bài hướng dẫn này. Để bắt đầu thêm module ngx_pagespeed, đầu tiên bạn cần đến folder modules bên trong folder đã được giải nén nginx-1.8.0:

$ cd nginx-1.8.0/src/http/modules/

Trong thư mục này, download nguồn ngx_pagespeed mới nhất từ kho Github với dòng lệnh:

$ sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip

Khi việc download hoàn thành, giải nén nó với tính năng unzip :

$ sudo unzip master.zip

Điều này sẽ tạo một thư mục mới gọi là ngx_pagespeed-master bên trong thư mục ~/custom-nginx/nginx-1.8.0/src/http/modules/ của bạn. Để thuận tiện hơn, hãy đổi tên thư mục đó thành ngx_pagespeed với dòng command:

$ sudo mv ngx_pagespeed-master ngx_pagespeed

Vào thư mục ngx_pagespeed mới:

$ cd ngx_pagespeed

Từ đó, download PageSpeed Optimization Libraries (psol) để dùng cho việc biên soạn:

$ sudo wget https://dl.google.com/dl/page-speed/psol/1.9.32.6.tar.gz

Nếu đường link tới kho lưu trữ psol không hoạt động lúc mà bạn đang tham khảo vài này thì hãy bỏ qua bước này. Nếu bạn đang thiếu thư viện trong suốt qua trình biên soạn ở bước tiếp theo, sau đó bạn sẽ thấy lỗi với những hướng dẫn cập nhật về cách để lấy gói đó.

Cuối cùng, giải nén gói psol bên trong thư mục ~/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeed :

$ sudo tar -xzvf 1.9.32.6.tar.gz

Bước 2 — Tạo cấu hình cho nguồn và biên soạn nó

Lúc này bạn đã sẵn sàng cho việc tạo cấu hình cho nguồn Nginx, bao gồm cả module pagespeed. Đến thư mục mẹ của nguồn Nginx:

$ cd ~/custom-nginx/nginx-1.8.0/

Ở đâu tạo cấu hình cho nguồn với command:

$ sudo ./configure --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/ --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

Lựa chọn cấu hình quan trọng nhất ở bên trên là--add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/ . Nó chắc chắn rằng module pagespeed sẽ là một phần của việc biên soạn Nginx. Hãy nhớ thay thế your_user cho người dùng của bạn ở bước này.

Để thuận tiện, chúng tôi đã tuỳ chỉnh một vài cài đặt khác như là vị trí của file logvà người dùng/ nhóm theo máy chủ nên chạy.

Khi tạo cấu hình đã hoàn thành, bắt đầu việc biên soạn với command:

$ sudo make

Điều này sẽ mất khoảng 10 phút phụ thuộc vào tài nguyên CloudServer của bạn. Sau đó, bạn có thể cài đặt software với command:

$ sudo make install

Bạn có thể thấy Nginx đã được cài đặt trong thư mục /usr/local/nginx. Thuận tiện hơn thì hãy tạo những đường link kí hiệu. Đầu tiên cho file cấu hình:

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

Command này sẽ cho phép bạn tìm các file cấu hình trong thư mục/etc/nginx/ mà chúng thường xuyên nằm bên trong.

Bạn nên tạo ra một dòng link kí hiệu cho chuỗi nhị phân chính trong thư mục /usr/sbin/ để bạn có thể dễ dàng tìn nó, ngay cả bên trong tập lệnh khởi động. Điều này là rất cần cho tập lệnh khởi động mà sau này bạn sẽ dùng. Để làm như vậy chạy command sau:

$ sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

Bước  3 — Tạo tập lệnh khởi động

 Quá trình cài đặt trước sẽ hỗ trợ cho một số nhiệm vụ như là tạo người dùng không cần thiết và nhóm theo cái mà Nginx chạy. Tuy nhiên, bạn vẫn sẽ phải tạo tập lệnh khởi động. May mắn là đã có tập lệnh khởi động cho CentOS7 khả dụng trên nginx.com. 

Đầu tiên tạo file /etc/init.d/ mới trong thư mục:

$ sudo nano /etc/init.d/nginx

Sau đó truy cập trang https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/,copy tập lệnh và dán nó vào trong file mới.

Cuối cùng làm cho tập lệnh có thể hoạt động bằng cách chạy command:

$ sudo chmod +x /etc/init.d/nginx

Sau đó bạn có thể khởi động Nginx lần đầu tiên với command:

$ sudo service nginx start

Để chắc chắn rằng Nginx có thể khởi động và tắt mọi lúc cùng với CloudServer, thêm nó vào runlevel với command:

$ sudo chkconfig nginx on
 

Bước  4 — Bật Module Pagespeed

Như vậy bạn đã cài đặt xog Nginx.Bước tiếp theo sẽ là bật module ngx_pagespeed.

Trước khi bật module, bạn phải tạo một folder để nó có thể lưu trữ file cho website của bạn:

$ sudo mkdir -p /var/ngx_pagespeed_cache

Nhớ thay đổi quyền sở hữu của folder này cho người dùng Nginx để server web có thể lưu file bên trong nó:

$ sudo chown -R nobody:nobody /var/ngx_pagespeed_cache

Sau đó mở file cấu hình nginx.conf chính trong trình soạn thảo văn bản yêu thích của bạn:

$ sudo nano /etc/nginx/nginx.conf

Trong file này, thêm dòng sau vào khối server và lưu thay đổi:

/etc/nginx/nginx.conf
##
# 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" { }

Bạn có thể thêm những dòng sau bất đâu trong khối, nhưng trong ví dụ của chúng tôi thì chúng tôi sẽ thêm vào cuối khối.

File /etc/nginx/nginx.conf nên như thế này:

/etc/nginx/nginx.conf
...
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 settingspagespeed 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;
}...

Đồng thời nhớ thêm dòng file cấu hình pagespeed vào mọi file khối server bổ sung bạn có.

Cuối cùng khởi động lại Nginx server để lưu thay đổi:

$ sudo service nginx restart

Bước 5  — Kiểm tra cài đặt

Để kiểm tra xem module ngx_pagespeed đã được cài đặt thành công hay chứ,chạy dòng nhị phân Nginx:

$ sudo /usr/sbin/nginx -V

Nếu cài đặt thành công, bạn sẽ thấy modulengx_pagespeed được list trong nhữnng đối số tuỳ chỉnh khác:

Output  nginx version: nginx/1.8.0 ... configure arguments: --add-module=/home/your_user/custom-nginx/nginx-          1.8.0/src/http/modules/ngx_pagespeed/ ... 

Bên trên không có nghĩa là pagespeed đã được kích hoạt và hoạt động ở trang của bạn. Để xác nhận điều này, bạn có thể dùng công cụ cũng như thư việc để chuyển URL phía máy khách curl. Với curl check tiêu đề X-Page-Speed như sau:

$ curl -I -p http://localhost| grep X-Page-Speed

Nếu module ngx_pagespeed hoạt động tốt, bạn sẽ thấy nó trong output đi kèm với phiên bản của nó:

Output   X-Page-Speed: 1.9.32.6-7321 

Nếu bạn không thấy tiêu đề này thì hãy chắc chắn rằng bạn đã kích hoạt pagespeed như hướng dẫn bên trên.

 

Kết luận

Đây là cách bạn có thể tạo Nginx với module pagespeed. Những bước trên dùng cho bất cứ module nào không có sẵn trên Nginx. Hơn nữa, toàn bộ quá trình cài đặt gói từ nguồn hoàn toàn tương tự cho các gái software khác mà bạn có thể cần để tuỳ chỉnh. Đừng quên rằng bạn phải tự mình duy trì và cài đặt lại khi có phiên bản mới.