前言
遵从来自20世纪的呼唤,最近重新开始研究单体应用的极致的性能优化,在web应用加速来说,google和nginx曾经一度引领风骚,pagespeed+nginx的组合,一度成就了yottta这样被google花了5亿美金收购的公司,号称对web应用,实现了页面精简、html/css压缩,动态加速等。而这样的东西自从2018年后,似乎突然就不被重视了。 随着云和微服务的兴起,应用被拆分得越来越细,以至于,不再有人care在http1.0/1.1时代的C10K、C100K这样的挑战了。 性能不够,机器来凑,尤其是,使用云和k8s之后,没有了直接的硬件投入,起个服务和应用,api调用一下,鼠标点一点,几百上千的虚拟机或pod就起来了,而容器则动则几万几十万个,而这样的情况,短时间的成本可能已经在“人比机器贵”的黄金时代来说,不再引人注目了。长此以往,特别到了疫情后,大家的口袋都没钱的时候,才发现,原来不知不觉,在云上已经花了这么多钱,所以,鼓吹下云也好,继续上云也罢,理念的东西都不重要,重要的,还是经济效益,于是,单体应用的性能,理应重新得到重视。 而这时候,我才发现,nginx似乎也不再受欢迎,好多人都要换到caddyserver去,pagespeed更是几乎没什么人用了,连明日黄花,可能都算不上了。。毕竟现代前端框架,自身在build的时候,已经是各种裁剪优化了,甚至于,倾向于搞ssr(server side render)这样的歪门邪道(当然,一段时间是因为框架对搜索引擎过于不友好,搞出来的web,搜索引擎都收录不了。。哪来的用户,哪来的业务),服务器的计算资源,始终是有限的,而客户端,却是随着用户数增长而增长…最主要的一点,服务器,是需要付费的,而用户侧的算力,是免费的. 好了,废话说了很多,很显然,在这个时候,来折腾这些一度落寞的玩意,可能会费时费力。 (有人会叫你去白嫖比人打包好的docker镜像或deb包),而我决定自力更生,丰衣足食。
安装环境
- OS:Centos 7.9 GCC:4.8.5 NGINX:1.25.0 PAGESPEED(NPS):1.13.35.2
- 依赖:
包名 用途 wget 用于从网络下载文件 gcc C/C++ 编译器 gcc-c++ C++ 编译器 zlib-devel zlib 开发库 libcurl-devel libcurl 开发库 openssl-devel OpenSSL 开发库 bzip2-devel bzip2 开发库 gmp-devel.x86_64 GNU Multiprecision Library 开发库(x86_64) mpfr-devel.x86_64 MPFR Library 开发库(x86_64) libmpc-devel.x86_64 MPC Library 开发库(x86_64) libSM-devel.x86_64 X.Org SM 库开发库(x86_64) libxml2-devel libxml2 库开发库 gcc-gfortran.x86_64 Fortran 编译器(x86_64) libjpeg-turbo-devel.x86_64 libjpeg-turbo 库开发库(x86_64) openjpeg-devel OpenJPEG 库开发库 libpng12-devel libpng 库开发库 libtiff-devel libtiff 库开发库 cmake3.x86_64 CMake 3 编译系统(x86_64) libtools-devel libtools 开发库 yum-utils yum 实用工具 libffi-devel libffi 库开发库 jemalloc-devel.x86_64 jemalloc 内存分配器开发库(x86_64) jasper-devel JasPer 库开发库 tbb-devel Threading Building Blocks 库开发库 libdc1394-devel libdc1394 库开发库 gstreamer-devel.x86_64 GStreamer 库开发库(x86_64) blosc-devel Blosc 库开发库 libaec-devel libaec 库开发库 brotli-devel Brotli 库开发库 giflib-devel giflib 库开发库 gtk2-devel GTK+ 2 库开发库 libaio-devel libaio 库开发库 libsqlite3x-devel.x86_64 libsqlite3x 库开发库(x86_64) make 构建工具 eigen3-devel Eigen3 线性代数库开发库
安装
安装依赖
yum install epel-release.noarch -y
yum install wget gcc gcc-c++ zlib-devel libcurl-devel openssl-devel bzip2-devel gmp-devel.x86_64 mpfr-devel.x86_64 libmpc-devel.x86_64 libSM-devel.x86_64 libxml2-devel gcc-gfortran.x86_64 libjpeg-turbo-devel.x86_64 openjpeg-devel.x86_64 libpng12-devel.x86_64 libtiff-devel cmake3.x86_64 libtool-devel yum-utils libffi-devel jemalloc-devel.x86_64 jasper-devel.x86_64 tbb-devel libdc1394-devel gstreamer-devel.x86_64 blosc-devel libaec-devel brotli-devel.x86_64 giflib-devel.x86_64 gtk2-devel libaio-devel libsqlite3x-devel.x86_64 make eigen3-devel libpcre3-devel
下载安装包并解压:
wget -O nps.zip https://github.com/apache/incubator-pagespeed-ngx/archive/71e24c1c47113acb5924d8cb523d572b376e9dd0.zip && unzip nps
wget http://nginx.org/download/nginx-1.25.0.tar.gz
wget -O psol.tar.gz https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz
nginx编译注意点
LD_LIBRARY_PATH=../incubator-pagespeed-ngx-${PAGESPEED_VERSION}/usr/lib:/usr/lib 指定LD_LIBRARY_PATH到incubator-pagespeed-ngx-71e24c1c47113acb5924d8cb523d572b376e9dd0,以便编译pagespeed,71e24c1c47113acb5924d8cb523d572b376e9dd0即为上文下载的对应版本的pagespeed版本解压后的目录
编译安装
LD_LIBRARY_PATH=../incubator-pagespeed-ngx-${PAGESPEED_VERSION}/usr/lib:/usr/lib ./configure --sbin-path=/usr/sbin --modules-path=/usr/lib/nginx --with-http_ssl_module --with-http_gzip_static_module --with-file-aio --with-http_v2_module --with-http_realip_module --with-http_sub_module --with-http_gunzip_module --with-http_secure_link_module --with-http_stub_status_module --with-threads --with-stream --with-stream_ssl_module --without-http_autoindex_module --without-http_browser_module --without-http_userid_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_split_clients_module --without-http_uwsgi_module --without-http_scgi_module --without-http_upstream_ip_hash_module --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --add-module=../ngx_devel_kit --add-module=../ngx_cache_purge --add-module=../nginx-module-vts --add-module=../echo-nginx-module --add-module=../srcache-nginx-module --add-module=../set-misc-nginx-module --add-module=../headers-more-nginx-module --add-module=../ngx_http_substitutions_filter_module --add-module=../incubator-pagespeed-ngx-71e24c1c47113acb5924d8cb523d572b376e9dd0
然后运行make 和make install即可 安装完成后的nginx配置文件位于 /etc/nginx下
配置
留待下文详解