J'utilise actuellement un serveur Ubuntu 16.04.1 LTS utilisant NGINX 1.11.9 et openssl 1.0.2g.
D'après tout ce que j'ai lu, ces versions devraient prendre en charge ALPN, mais lorsque je lance un test sur l'outil de test HTTP / 2 de KeyCDN , j'obtiens «ALPN n'est pas pris en charge»
Et quand j'exécute echo | openssl s_client -alpn h2 -connect example.com:443 | grep ALPN
, j'obtiens:
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify return:1
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = EssentialSSL Wildcard, CN = *.example.com
verify return:1
No ALPN negotiated
DONE
Si ALPN n'est pas activé, HTTP2 n'est pas entièrement activé. Comment activer ALPN?
ÉDITER
nginx -V
spectacles:
nginx version: nginx/1.11.9
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
built with OpenSSL 1.0.1f 6 Jan 2014 (running with OpenSSL 1.0.2g 1 Mar 2016)
TLS SNI support enabled
configure arguments: --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-compat --with-file-aio --with-threads --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_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
EDIT # 2
openssl version -a
production:
OpenSSL 1.0.2h 3 May 2016
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/local/ssl"
built with OpenSSL 1.0.1f
- suppose que c'est la réponseopenssl version -a
, afin que nous puissions voir si votre OpenSSL a été construit avec des indicateurs / options inattendus?Réponses:
Comme l'a souligné @AlexyTen, la cause principale était que, même si j'avais OpenSSL 1.0.2g installé, NGINX devait être construit avec OpenSSL et il a été construit avec 1.0.1f qui ne prend pas en charge ALPN.
NGINX doit être reconstruit avec OpenSSL 1.0.2 ou supérieur et réinstallé. J'ai trouvé quelques tutoriels en ligne mais parce que j'utilise un serveur Digital Ocean, j'ai utilisé cette rubrique d'aide pour résoudre le problème pour moi: https://www.digitalocean.com/community/questions/how-to-get-already- installé-nginx-à-utiliser-openssl-1-0-2-pour-alpn
J'ai d'abord dû installer quelques nouvelles bibliothèques:
J'ai ensuite simplement exécuté ce script: https://gist.github.com/AJMaxwell/f6793605068813aae888216b02364d85
J'ai recommencé à utiliser
sudo shutdown -r now
et j'ai couru ànginx -V
nouveau. Cette fois, cela m'a donné:J'ai également exécuté à nouveau le test http2 de keycdn et il a réussi.
la source
J'ai créé un script bash qui télécharge, compile et installe automatiquement Nginx avec OpenSSL sur Debian / Ubuntu, RHEL / CentOS et d'autres distributions. Le binaire résultant est exactement le même que celui qui distribue Nginx via son référentiel officiel, sauf qu'il est livré avec la dernière version d'OpenSSL.
Le script ne modifie pas l'installation d'OpenSSL, seulement le binaire Nginx. C'est une bonne option si vous ne voulez pas compter sur des packages construits et distribués par des sources non officielles.
https://github.com/victordzmr/nginx-compiler
la source
Installez le nginx ppa et il prendra en charge ALPN:
la source
hda-me/nginx-stable
pour que vous puissiez exécuter brotli et des modules dynamiques