Lu Blog

Segment fault!

Banana Pi M2+ 编译安装Nginx/1.11.4 升级HTTP/2.0

编译安装步骤记录,仅供参考

  • 使用镜像: Raspbian Jessie Mate HDMI 3.4
  • Nginx版本:Mainline version Nginx/1.11.4

1.下载并解压Nginx源码

wget -c https://nginx.org/download/nginx-1.11.4.tar.gz
tar -zxvf nginx-1.11.4.tar.gz

由于系统自带的OpenSSL库版本陈旧,在这里重新下载一个编译
2.下载并解压OpenSSL源码

wget -c https://www.openssl.org/source/openssl-1.1.0.tar.gz
tar -zxvf openssl-1.1.0.tar.gz

3.下载并解压nginx-ct源码

wget -O nginx-ct.zip -c https://github.com/grahamedgecombe/nginx-ct/archive/v1.3.0.zip
unzip nginx-ct.zip

4.修复Nginx/1.11.3无法编译的问题<font style="color:red">此问题在Nginx 1.11.4已经解决,1.11.4请忽略</font>

由于OpenSSL 1.1.0 删除了 SSL_R_NO_CIPHERS_PASSED
导致Nginx无法编译。这里我们需要修复nginx源码中的一个文件 详情点此

用文本编辑器打开 ./nginx-1.11.3/src/event/ngx_event_openssl.c

找到这个位置,大约在第2000行附近

if (n == SSL_R_BAD_CHANGE_CIPHER_SPEC                        /*  103 */
         || n == SSL_R_BLOCK_CIPHER_PAD_IS_WRONG                  /*  129 */
         || n == SSL_R_DIGEST_CHECK_FAILED                        /*  149 */
         || n == SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST              /*  151 */
         || n == SSL_R_EXCESSIVE_MESSAGE_SIZE                     /*  152 */
         || n == SSL_R_LENGTH_MISMATCH                            /*  159 */
         || n == SSL_R_NO_CIPHERS_PASSED                          /*  182 */

修改为

if (n == SSL_R_BAD_CHANGE_CIPHER_SPEC                        /*  103 */
         || n == SSL_R_BLOCK_CIPHER_PAD_IS_WRONG                  /*  129 */
         || n == SSL_R_DIGEST_CHECK_FAILED                        /*  149 */
         || n == SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST              /*  151 */
         || n == SSL_R_EXCESSIVE_MESSAGE_SIZE                     /*  152 */
         || n == SSL_R_LENGTH_MISMATCH                            /*  159 */
#ifdef SSL_R_NO_CIPHERS_PASSED
         || n == SSL_R_NO_CIPHERS_PASSED                          /*  182 */
#endif

保存好文件。

5.编译Nginx

#进入Nginx源码目录
cd ./nginx-1.11.4

#生成编译配置
./configure \
#设置OpenSSL源码目录
--with-openssl=../openssl-1.1.0 \
#设置nginx-ct源码目录
--add-module=../nginx-ct-1.3.0 \
--with-debug \
--with-pcre-jit \
--with-ipv6 \
--with-http_ssl_module \
#启用HTTP/2.0模块
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_auth_request_module \
--with-http_addition_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-http_sub_module \
--with-mail \
--with-mail_ssl_module
#如无缺失依赖库,将会生成MakeFile

#开始编译
make
#编译完成后安装
sudo make install
#默认安装在 /usr/local/nginx 下

6.EOF
至此Nginx1.11.4的编译与安装就完成了,HTTP2配置将会在下一篇文章中演示

评论卡