How to get already installed NGINX to use OpenSSL 1.0.2 for ALPN?

May 14, 2016 2.1k views
Nginx LEMP Security Ubuntu 16.04


I would like to use HTTP/2 and to fully use its capabilities, it needs ALPN (and not NPN). ALPN is bundled in OpenSSL 1.0.2, but NGINX doesn't seem to use it. I have upgraded everything and currently I am at NGINX 1.10.0 and OpenSSL 1.0.2h.


As you can see in the screenshot above, OpenSSL 1.0.2h is indeed installed on the server as is the latest version of NGINX 1.10.0. OpenSSL was already at 1.0.2h when I upgraded from NGINX 1.9 to 1.10.

Any help to get NGINX to use OpenSSL 1.0.2 or how I can enable ALPN would be greatly appreciated.

Thank you!

PS I have no clue on how I could recompile NGINX. I've always simply used apt-get install nginx.

2 Answers
  1. rebuiding openssl

    $ wget -c https://www.openssl.org/source/openssl-1.0.2h.tar.gz
    $ tar xf openssl-1.0.2h.tar.gz -C /usr/local/
    $ cd /usr/local/openssl-1.0.2h
    $ ./config
    $ make depend
    $ make
    $ make test
    $ make install
    $ mv /usr/bin/openssl /usr/bin/openssl_1.0.1e
    $ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
    $ openssl version
    OpenSSL 1.0.2h  3 May 2016
  2. rebuild nginx

    $ yum -y install pcre-devel
    $ tar xf nginx-1.8.1.tar.gz
    $ cd nginx-1.8.1
    $ ./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module --with-openssl=/usr/local/openssl-1.0.2h/ 
  • [root@c600 ~]# nginx -V
    nginx version: nginx/1.10.0
    built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) 
    built with OpenSSL 1.0.2h  3 May 2016
    TLS SNI support enabled

I took what mrbdmm wrote, and made it into a script to install Nginx, OpenSSL, and ngx_pagespeed from source: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85

I hope it's as useful to you as it is for me

Have another answer? Share your knowledge.