前几天,前端提出了个需求,线上web服务器开启gzip模块。可以节约网站出口带宽,加快数据传输效率,提升用户体验。由于使用的Openresty和nginx还有点差别,下面记录一下过程。
Openresty同nginx一样,增加模块需要重新编译
Openresty添加模块
<1>安装依赖包
yum install -y gcc gcc-c++ zlib-devel pcre-devel openssl-devel readline-devel
如果是在其他环境新部署一个openresty,需要安装依赖包。如果是已有openresty环境,无需再次安装
<1>查看线上Openresty的编译参数
(由于是新增加模块,不能把原来的模块丢失了,所以先查看一下原来的编译参数)
/usr/local/openresty/nginx/sbin/nginx -V
nginx version: openresty/1.15.8.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.1rc1 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.15 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.7 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --add-dynamic-module=/data/openresty-1.15.8.1/../nginx-upsync-module-2.1.0 --add-module=/data/openresty-1.15.8.1/../naxsi/naxsi_src --add-dynamic-module=/data/openresty-1.15.8.1/../nginx-module-vts --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module
<2>把configure那行编译参数复制并排列
(方便查看)
cat 1.txt |awk '{for(i=1;i<=NF;++i) print $i}' > configure_old.txt
--prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.1rc1 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.15 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.7 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --add-dynamic-module=/data/openresty-1.15.8.1/../nginx-upsync-module-2.1.0 --add-module=/data/openresty-1.15.8.1/../naxsi/naxsi_src --add-dynamic-module=/data/openresty-1.15.8.1/../nginx-module-vts --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module
OpenResty是一个基于nginx的可伸缩的 Web 平台,它里面集成了lua和一些其他模块,开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,因此它本身是有一些默认的编译参数,编译时./configure即可,其中 默认模块 的参数 编译时无需添加, 而非默认的参数(自己添加的模块)得在编译时加上
排除下面这3条,其他的都是openresty默认编译参数
我们需要在重新编译时把对应的包下载下来,并在编译时添加,否则缺少模块,导致新编译后的nginx启动后,原来的服务出现问题
--add-dynamic-module=/data/openresty-1.15.8.1/../nginx-upsync-module-2.1.0 #Nginx实现动态配置的模块,通过拉取 Consul 或 etcd (及其它)的上游数据,实现无需重新加载 Nginx ,动态修改后端服务器属性 --add-module=/data/openresty-1.15.8.1/../naxsi/naxsi_src #naxsi模块,可构建WAF,防xss、防注入攻击 --add-dynamic-module=/data/openresty-1.15.8.1/../nginx-module-vts #Nginx的监控模块,能够提供json、html、prometheus格式的数据产出
注意:
关于这些模块的安装包,编译后不要轻易删除,下载比较麻烦,避免以后再编译没安装包
<3>查看是否支持要新加的模块
(进入openresty的源码包执行)
./configure --help | grep http_gzip_static_module ./configure --help | grep with-http_flv_module ./configure --help | grep with-http_stub_status_module
为避免以后再次编译,把可能需要的模块也添加上
<4>重新编译
./configure --add-dynamic-module=/data/openresty-1.15.8.1/../nginx-upsync-module-2.1.0 --add-module=/data/openresty-1.15.8.1/../naxsi/naxsi_src --add-dynamic-module=/data/openresty-1.15.8.1/../nginx-module-vts --with-http_gzip_static_module --with-http_flv_module --with-http_stub_status_module 编译成功后: gmake #由于该文档中的操作是添加模块,原来已经有openresty配置文件了.不可install #gmake install
注意:
如果配置–prefix,该目录必须和原来nginx的编译参数中的目录相同
<5> 拷贝新nginx到目录
cd openresty-1.15.8.1/build/nginx-1.19.3/objs/nginx cp nginx /usr/local/openresty/nginx/sbin/nginx_xin
<6>检测并对比nginx编译参数
cd /usr/local/openresty/nginx/sbin/ ./nginx -t ./nginx_xin -t ./nginx -V ./nginx_xin -V 查看prefix的目录是否一致,新nginx是否缺少旧nginx中的参数
<7>nginx重启
如前面的测试都是成功的,可以重启nginx
(如果有大量业务不建议直接重启,操作选择访问人数不多的时候)
nginx -s stop mv nginx nginx_old mv nginx_xin nginx ./nginx
也可像nginx平滑升级一样,重启nginx,参考链接:
https://blog.csdn.net/GX_1_11_real/article/details/85922283 第七项
nginx gzip 的配置
gzip on; #开启和关闭gzip模式 gzip_min_length 1k; #gizp压缩起点,文件大于1k才进行压缩 gzip_buffers 4 16k; #设置压缩所需要的缓冲区大小,以4k为单位,如果文件为7k则申请2*4k的缓冲区 gzip_http_version 1.1; #设置gzip压缩针对的HTTP协议版本 gzip_comp_level 2; #设置gzip的压缩比, 1-9 数字越大压缩的越好,也越占用CPU时间(1压缩比最小但最快 9相反) gzip_types text/plain application/x-javascript text/css application/xml application/json application/javascript text/xml text/javascript image/jpeg image/gif image/png; #进行压缩的文件类型 gzip_proxied any; #无论后端服务器的headers头返回什么信息,都无条件启用压缩 gzip_vary on; #是否在http header中添加Vary: Accept-Encoding,建议开启 gzip_disable "MSIE [1-6]."; #禁用IE6的gzip压缩,指定哪些不需要gzip压缩的浏览器(将和User-Agents进行匹配),依赖于PCRE库
验证配置正常再重新加载
/usr/local/openresty/nginx/sbin/nginx -t /usr/local/openresty/nginx/sbin/nginx -s reload



