编译nginx失败:未定义引用`SSL_get0_alpn_selected'和`SSL_CTX_set_alpn_select_cb'

时间:2017-04-06 00:05:47

标签: nginx makefile openssl debian dpkg

有关设备的详细信息:
系统:Debian Jessie x86_64服务器(VPS)
Web服务器:nginx 1.10.3(最新稳定)
TLS / SSL库:OpenSSL 1.0.2k(刚刚编译了最新的LTS版本)

问题详情:
关注:从源代码安装nginx-1.10.3和nginx-1.11.13(同时尝试)

情况:我已经启动并运行了一个Web服务器,但遗憾的是nginx使用旧的OpenSSL 1.0.1t编译,因此我还不能将HTTP / 2与ALPN一起使用。

$ nginx -V
nginx version: nginx/1.10.3
built by gcc 4.9.2 (Debian 4.9.2-10)
built with OpenSSL 1.0.1t  3 May 2016
TLS SNI support enabled

因为apt-get install --reinstall nginx不会改变这一点,我认为我必须从源dpkg-buildpackagemake获得相同的错误。

问题:每次尝试时,都会产生以下结果:

objs/src/event/ngx_event_openssl.o: In function `ngx_ssl_check_host':
/build/nginx-local/nginx-src/nginx-1.10.3/src/event/ngx_event_openssl.c:2997: undefined reference to `X509_check_host'
objs/src/http/ngx_http_request.o: In function `ngx_http_ssl_handshake_handler':
/build/nginx-local/nginx-src/nginx-1.10.3/src/http/ngx_http_request.c:780: undefined reference to `SSL_get0_alpn_selected'
objs/src/http/modules/ngx_http_ssl_module.o: In function `ngx_http_ssl_merge_srv_conf':
/build/nginx-local/nginx-src/nginx-1.10.3/src/http/modules/ngx_http_ssl_module.c:653: undefined reference to `SSL_CTX_set_alpn_select_cb'
collect2: error: ld returned 1 exit status
objs/Makefile:302: recipe for target 'objs/nginx' failed
make[1]: *** [objs/nginx] Error 1
make[1]: Leaving directory '/build/nginx-local/nginx-src/nginx-1.10.3'
Makefile:8: recipe for target 'build' failed
make: *** [build] Error 2

配置:以下是我在make之前使用的配置:

$ ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'


感谢社区的帮助!

编辑:

现在我尝试了别的东西。所以我修改了nginx-1.10.3的源代码,根据修改编辑了更改日志,并在另一台设备上使用dpkg-buildpackage构建了.deb软件包(x64 Debian jessie with OpenSSL 1.0.2j)并在我的网站上更新了它VPS,但这仍然会导致:

$ nginx -V
nginx version: nginx/1.10.3
built by gcc 4.9.2 (Debian 4.9.2-10)
built with OpenSSL 1.0.1t  3 May 2016
TLS SNI support enabled

使用新软件包的更新已成功(我更改了发送的HTTP Server标头以确认更改并将版本从1.10.3-1重命名为1.10.3-2)

所以现在真正的问题是我如何管理使用OpenSSL 1.0.2构建的nginx?我现在很失落。

修改后的软件包和源代码可以在my website之间找到。

编辑#2:

即使是没有openssl或任何服务器的VPS的干净(最小)安装也无济于事。我的意思是在使用原始源编译OpenSSL 1.0.2k和nginx 1.12时(不是任何debian软件包或repos上的源代码,因为Debian通常倾向于使用旧版本)似乎仍然无法工作并导致nginx使用openSSL 1.0进行编译。 1吨。

我的假设:

libssl和libssl-dev(我使用apt-get表示这些包)可能会影响这个吗?

不知何故,nginx仍然使用最实际的' Debian repos中有openSSL版本吗? (是的,自从1.0.1t以来,Debian仍然没有更新他们的openSSL包)

好吧,如果我有更多时间尝试更多的事情,我会更新

1 个答案:

答案 0 :(得分:1)

我通过从源构建openssl并将--with-openssl=../openssl-1.0.2k添加到nginx的./configure命令来解决了同样的问题。 也许与Debian的openssl版本不兼容?