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无法编译的问题此问题在Nginx 1.11.4已经解决,1.11.4请忽略
由于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配置将会在下一篇文章中演示