之前写过nginx HTTP2编译安装的文章, 最近想探索下nginx with gRPC support, 所以更新一下.
yum apt等包管理系统安装的软件有时候比较旧, 导致一些莫名其妙的问题. 最近在给Nginx加HTTP/2模块中, 编译时加上了--with-http_v2_module参数, 但Chrome请求发现还是不是http2, 后面发现是OpenSSL版本太低. 踩过这一坑后, 感觉Linux下部分软件最好还是自己编译安装比较妥, 如果编译过程出错, 搜下错误信息, 一般是基础依赖没有安装, 很好解决.
官方的源码编译指南
https://nginx.org/en/docs/configure.html
https://nginx.org/en/docs/http/ngx_http_v2_module.html (这里写了需要OpenSSL1.0.2以上版本), 很多选项都有合适的默认值, 比如–prefix=/usr/local/nginx, 所以只需要指定自己需要的字段
--user=www-data // 习惯将web相关的服务以www-data用户运行, 如没有此用户可以创建一个也可不加此项按默认nobody用户 --group=www-data --with-http_v2_module // 默认选项不带http2 --with-http_ssl_module // 默认选项不带ssl, 上http2必须要上ssl的 --with-stream // https://nginx.org/en/docs/stream/ngx_stream_core_module.html --with-openssl // 指定OpenSSL --with-pcre=./pcre-8.40 // 需要(version 4.4 — 8.40)的pcre,注意Nginx不支持pcre2 --with-pcre-jit // 打开pcre JIT支持 --with-zlib=./zlib-1.2.11 // 需要(version 1.1.3 — 1.2.11)的zlib以支持gzip
   | 
1.官网下载Nginx包
cd /usr/local wget https://nginx.org/download/nginx-1.14.2.tar.gz tar -zxf nginx-1.14.2.tar.gz cd nginx-1.14.2
   | 
2.[官网下载OpenSSL 1.0.2以上版本].https://github.com/openssl/openssl/releases
cd nginx-1.14.2 wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_0e.tar.gz tar -zxf OpenSSL_1_1_0e.tar.gz
   | 
2.官网下载pcre
注意Nginx不支持pcre2,下载pcre最新版即可. 解压到Nginx解压的目录
cd nginx-1.14.2 wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz tar -zxf pcre-8.40.tar.gz
   | 
4.官网下载zlib(version 1.1.3 — 1.2.11)
cd nginx-1.14.2 wget http://zlib.net/zlib-1.2.11.tar.gz tar -zxf zlib-1.2.11.tar.gz
   | 
5.编译并安装
./configure \ --user=nginx \ --group=nginx \ --conf-path=/etc/nginx/nginx.conf \ --with-http_v2_module \ --with-http_ssl_module \ --with-stream \ --with-openssl=./openssl-OpenSSL_1_1_0e \ --with-pcre=./pcre-8.40 --with-pcre-jit \ --with-zlib=./zlib-1.2.11 make && make install
   | 
6.为了方便操作,软链/usr/local/nginx/sbin/nginx到/usr/local/bin
ln -sf /usr/local/nginx/sbin/nginx /usr/local/bin
   |