Cài đặt Nginx với Pagespeed từ Source
UPDATE 9/2020: Bạn cần cài phiên bản mới nhất của NGINX bằng hướng dẫn sau:
https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/#prebuilt_debian. Sau đó mới cài đặt các bước của bài này, nếu không sẽ xảy ra tình trạng không tương thích thư viện.
Bạn có thể biết hoặc chưa biết đến dịch vụ kiểm tra chất lượng một website từ Google: https://developers.google.com/speed/pagespeed/insights/?hl=vi
Để đáp ứng các yêu cầu của Google, nginx có hỗ trợ chúng ta cài thêm một plugin là ngx_pagespeed
: https://github.com/apache/incubator-pagespeed-ngx
Tôi sẽ hướng dẫn cài đặt vào máy chủ Debina 9 (stretch), Ubuntu cũng tương tự như vậy.
Yêu cầu trước cài đặt
Các thư viện sau bắt buộc phải có:
- OpenSSL library 1.0.2 - 1.1.0
- Zlib library 1.1.3 - 1.2.11
- PCRE library 4.4 - 8.40
- GCC Compiler
Tiến trình cài đặt
Mời bạn làm theo thứ tự từ trên xuống dưới. Đầu tiên tôi sẽ cài đặt trước nginx bản tiêu chuẩn từ apt để nó thiết lập các thông tin cần thiết.
Tôi giả định là bạn đã có những thiết lập cơ bản nhất cho một máy chủ Debian mới toanh. Nếu chưa thì đọc những tổng hợp của tôi tại: https://gist.github.com/anhtran/07f1c7f45ec0d58d09e1
Cài nginx bản tiêu chuẩn
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo "deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install -y nginx
Nếu mọi thứ diễn ra suông sẻ, bạn sẽ có tìm được tệp cài đặt chung:
ls -la /etc/nginx/nginx.conf
Bật nginx mới cài lên và kiểm tra trạng thái:
sudo service nginx start
sudo service nginx status
sudo lsof -i :80
Build ngx_pagespeed from Source
Cài công cụ build:
sudo apt install -y build-essential git tree software-properties-common dirmngr apt-transport-https ufw zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev
Thư viện hỗ trợ:
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
Dừng service nginx hiện có:
sudo service nginx stop
Cài đặt ngx_pagespeed
bash <(curl -f -L -sS https://ngxpagespeed.com/install) --nginx-version latest
Lưu ý: nếu cài đè vào phiên bản đang có thì phải nhập chính xác số phiên bản thay vì latest
.
Khi được hỏi Do you have any additional ./configure
arguments you would like to set?, thì bạn nhập vào:
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--with-openssl-opt=enable-ec_nistp_64_gcc_128 \
--with-openssl-opt=no-nextprotoneg \
--with-openssl-opt=no-weak-ssl-ciphers \
--with-openssl-opt=no-ssl3 \
--with-pcre-jit \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_secure_link_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-debug \
--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now'
Khi trình cài đặt hỏi thêm lựa chọn thì bạn cứ chọn mặc định (Enter).
Kiểm tra phiên bản và các modules:
sudo nginx -V
nginx version: nginx/1.16.0
built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
built with OpenSSL 1.1.0j 20 Nov 2018
TLS SNI support enabled
configure arguments: --add-module=/home/admin/incubator-pagespeed-ngx-latest-stable --prefix=/etc/nginx ...
Quan trọng hơn hết là bạn phải thấy được dòng --add-module=/home/admin/incubator-pagespeed-ngx-latest-stable
Nói thẳng là ở đây tôi lười cài đặt service vào
systemd
nên mới chơi chiêu cài nginx tiêu chuẩn trước. Cách này nó hơi hacky nhưng tôi luôn thấy hiệu quả.
Bạn cần tạo một file /etc/nginx/core.conf
với nội dung:
## PageSpeed configurations
pagespeed on;
pagespeed ProcessScriptVariables on;
pagespeed FetchWithGzip on;
## PageSpeed filter settings
pagespeed RewriteLevel CoreFilters;
pagespeed RespectVary off;
pagespeed DisableRewriteOnNoTransform off;
pagespeed SupportNoScriptEnabled false;
pagespeed ModifyCachingHeaders on;
pagespeed ListOutstandingUrlsOnError on;
pagespeed MaxCacheableContentLength -1;
pagespeed FileCachePath /var/cache/nginx/pagespeed;
pagespeed FileCacheSizeKb 102400;
pagespeed FileCacheCleanIntervalMs 3600000;
pagespeed FileCacheInodeLimit 500000;
pagespeed LRUCacheKbPerProcess 1024;
pagespeed LRUCacheByteLimit 16384;
## Speed up PageSpeed by storing it in the super duper fast memcached
pagespeed MemcachedThreads 1;
pagespeed MemcachedServers "localhost:11211";
## PageSpeed admin pages configuration
pagespeed UsePerVhostStatistics on;
pagespeed Statistics on;
pagespeed StatisticsLogging on;
pagespeed StatisticsLoggingIntervalMs 60000;
pagespeed StatisticsLoggingMaxFileSizeKb 1024;
pagespeed MessageBufferSize 100000;
pagespeed LogDir /var/log/pagespeed;
pagespeed StatisticsPath /ngx_pagespeed_statistics;
pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics;
pagespeed MessagesPath /ngx_pagespeed_message;
pagespeed ConsolePath /pagespeed_console;
pagespeed AdminPath /pagespeed_admin;
pagespeed GlobalAdminPath /pagespeed_global_admin;
pagespeed CriticalImagesBeaconEnabled false;
## PageSpeed Cache Purge
pagespeed EnableCachePurge on;
pagespeed PurgeMethod PURGE;
pagespeed DownstreamCacheRewrittenPercentageThreshold 95;
# Thêm các filter vào cho toàn bộ website dùng nginx
# bạn hoàn toàn có thể cấu hình trong từng site để đạt sự linh hoạt
Thêm file /etc/nginx/core.conf
vào /etc/nginx/nginx.conf
ngay trước dòng include /etc/nginx/conf.d/*.conf;
để nginx có thể nhận dạng các cấu hình về pagespeed của chúng ta.
Cuối cùng tôi sẽ kiểm tra lỗi cấu hình:
sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nhớ bật service nginx lên:
sudo service nginx start
sudo service nginx status
Hmm, nếu báo lỗi không tạo được thư mục thì follow thông tin báo lỗi rồi tạo thư mục tương ứng. Chú ý phân quyền cho đúng user là nginx
. Ví dụ:
sudo mkdir /var/lib/nginx/body -p
sudo chown nginx:nginx -R /var/lib/nginx
Mọi thứ đều rất ổn cho tới bây giờ. Hãy truy cập vào https://www.modpagespeed.com/doc/, xem phần Reference, đọc lần lượt các filter sau đó thêm vào website mà bạn muốn.
Những filters tôi hay sử dụng:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name anhtran.net;
root /home/admin/webapps/anhtran.net;
index index.html index.htm;
pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters combine_css;
pagespeed EnableFilters combine_heads;
pagespeed EnableFilters combine_javascript;
pagespeed EnableFilters make_google_analytics_async;
pagespeed EnableFilters remove_comments;
pagespeed EnableFilters defer_javascript;
...
Chúc bạn thành công!
UPDATE: Một lưu ý quan trọng, bạn không nên gõ sudo apt upgrade
mà trong danh sách upgrade có nginx. Nếu không nó sẽ cài đè vào bản hiện hành và bạn phải build lại từ đầu.