J'utilise debian jessie sur mon serveur et j'ai récemment mis à niveau vers un nouveau serveur web nginx avec prise en charge http / 2 (nginx 1.10). Comme aujourd'hui, cela fonctionne très bien et le serveur Web fournit du contenu avec le protocole http2.
J'ai lu que Chrome supprime le support NPN et n'autorise ALPN qu'après le 15.5.2016. ALPN est une extension qui nécessite openssl 1.0.2 installé, mais sur debian jessie est uniquement openssl 1.0.1 (également sur les backports debian et autres référentiels, il n'y a pas de version openssl 1.0.2 pour ce debian).
Et il y a le problème - j'ai mis à niveau de SPDY vers http2 et dans quelques jours, je devrai désactiver http2 et ne pourra pas utiliser SPDY car cette version de nignx n'a que http2. J'ai également lu que cette version de debian restera avec openssl 1.0.1 et que seul debian stretch aura openssl 1.0.2. Mais pour la date de sortie, il y a presque un an et Chrome abandonnera bientôt le support, donc je ne veux pas perdre l'avantage du protocole http2.
Existe-t-il une solution, comment installer openssl 1.0.2 sur ce système, sans construire sa propre build (mauvaise maintenance) ou attendre que le dépôt backports l'ait? Je ne veux pas non plus que deux versions de openssl soient installées sur mon système si l'une d'elles doit être liée et maintenue manuellement.
Merci pour toute aide.
apt pinning
et utiliseropenssl
hors deDebian stretch
.1.0.2
s'enjessie
vient peu de temps après le gel (qui a été rejetée à l' époque). « Cette version doit être compatible avec la version 1.0.1 , je ne pense rien pour rompre le passage de 1.0.1 à 1.0.2. " (J'en serais plus conscientlibc6
.)apt-get install -t stretch nginx
(sur la vanilleDebian jessie
avecnginx
installé) va tirer dans:nginx nginx-common nginx-full libnginx-mod-http-auth-pam libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libssl1.0.2
. (Ce sont dix packages ..)Réponses:
Mise à jour 2016/08/08:
nginx
dansjessie-backports
(la version a1.9.10-1~bpo8+3
été construite contreopenssl >= 1.0.2~
. Se mettre auALPN
travail maintenant si l'exécutionjessie
ne nécessite que les packagesjessie-backports
, plus besoin de retirer les packagesstretch
.-
Réponse originale: Eh bien, voici ma réponse, selon les commentaires: À mon avis, il n'y a pas beaucoup de façons de résoudre ce problème aujourd'hui, 2016/05/09. Fondamentalement, vous devez essayer d'une manière ou d'une autre d'intégrer un système moderne
nginx
dans votre système, compilé par>= openssl 1.0.2~
.Les deux seules options que je vois actuellement: soit vous compilez vous-même, ce que vous ne voulez pas faire, ce qui est tout à fait compréhensible, soit vous extrayez des packages modernes
Debian stretch
dans votre système. Cela implique certains risques, car vous mélangez un environnement stable avec un autre, mais à mon avis, ces risques sont assez faibles, car vous utilisezDebian
.Alors allons-y et essayons ceci:
Ajoutez le
Debian stretch
référentiel à votreapt sources
. Ne l'utilisez pas/etc/apt/sources.list
pour cela, mais utilisez plutôt un fichier dédié à l'intérieur/etc/apt/sources.list.d/
pour le garder propre, personnellement j'utilisestretch.list
.Mettez ces lignes à l'intérieur:
Configurez l' épinglage apt pour vous assurer de ne retirer que les packages
Debian stretch
dont vous spécifiez. Le fichier à utiliser pour cela est/etc/apt/preferences
, à l'intérieur, mis:(Vous devrez peut-être modifier les suites et les priorités en fonction de votre environnement.)
Exécutez
apt-get update
(viasudo
/ asroot
) pour mettre à jour le cache du package.Installez à
nginx
partir deDebian stretch
:apt-get install -t stretch nginx
(faites ceci viasudo
/ asroot
). Profit!Comme je l'ai décrit dans mes commentaires, pour réduire encore plus les risques impliqués, vous pouvez utiliser quelque chose comme un chroot ou une solution de conteneur comme LXC . Au cas où vous voudriez aller dans ce
chroot
sens, vous devez mettre en place une interface réseau à l'intérieur: Pour ce faire, jetez un œil à ce blogpost par exemple , qui donne une introduction ànetwork namespaces
.J'espère que cela t'aides; au cas où vous auriez plus de questions, n'hésitez pas à me contacter. J'apprécierais les commentaires et je suis intéressé par la façon dont cela se passe.
la source
ALPN
déjà vérifié le support?nginx -V
Donne également des informations, que la version est compilée avec openssl 1.0.2+. Je pense donc que cela fonctionne correctement.Une autre méthode consiste à installer OpenSSL 1.0.2 à partir de jessie-backports et à utiliser les builds Ubuntu 16.04 LTS à partir du propre référentiel de nginx. De cette façon, vous utilisez au moins un package OpenSSL conçu pour Jessie.
Ajouter à
/etc/apt/sources.list
:Exécutez ensuite:
Cela vous met évidemment dans une configuration officiellement non prise en charge, mais c'est peut-être mieux que de ne pas avoir de package du tout - et cela a fonctionné pour moi. De plus, l'utilisation du dépôt de nginx signifie que vous obtenez de nouvelles mises à jour.
la source
Une autre méthode consiste à utiliser jessie-backports puis à reconstruire facilement nginx
ajouter à /etc/apt/sources.list backports
puis exécutez en tant que root
puis reconstruisez nginx. Suivez les instructions sur https://wiki.debian.org/BuildingAPackage
la source
Pour moi, le moyen le plus simple de résoudre ce problème était d'utiliser une autre image Nginx Docker, voir la version officielle de Nginx sur Docker Hub . La version par défaut de Docker Nginx utilise Debian Jessie, ce qui ne résoudra pas votre problème, mais ils offrent également une version alternative basée sur Alpine Linux . Ses dernières versions utilisent OpenSSL 1.0.2!
Cette solution suppose donc que vous avez installé Docker et que Nginx fonctionne correctement au
Alpine Linux
lieu deDebian Jessie
.Pour démarrer votre conteneur Nginx:
Brève explication pour démarrer avec Docker:
docker run
: télécharge l'image Docker (dans ce casnginx:1.11-alpine
) si vous ne l'avez pas encore et démarre un conteneur Docker basé sur cette image--name nginx-container
: donne un nom au conteneur Docker (vous pouvez afficher tous les conteneurs Docker en cours d'utilisationsudo docker ps
ou utilisersudo docker ps -a
pour afficher également les conteneurs arrêtés)-p 80:80 -p 443:443
: lie les ports 80 et 443 de votre machine hôte aux ports 80 et 443 respectivement dans le conteneur Docker-v /path/to/your/nginx/directory/:/etc/nginx/
: monte le répertoire sur votre système hôte qui contient votre configuration Nginx dans le/etc/nginx/
répertoire du conteneur Docker/path/to/your/files/to/serve/:/usr/share/nginx/html/
: monte un répertoire sur votre système hôte contenant les fichiers que Nginx doit servir-d
: démarre le conteneur en arrière-plan (vous pouvez arrêter l'utilisation du conteneurdocker stop nginx-container
)nginx:1.11-alpine
: utilisez cette image pour démarrer votre conteneur (les images officielles de Nginx Docker sont répertoriées ici )Aussi utile:
sudo docker exec nginx-container <command>
pour exécuter une commande dans le conteneur, par exemplesudo docker exec nginx-container nginx -s reload
pour recharger Nginx après avoir modifié les fichiers de configuration sur le système hôtesudo docker exec -it nginx-container bash
pour entrer un shell bash dans le conteneur afin que vous puissiez y travailler directement (non recommandé, mais parfois utile)la source
Une autre solution consiste à utiliser BoringSSL à la place, ce qui ne nuit pas à l'environnement OpenSSL. Voici les détails auxquels se référer, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie
la source
Dans ma situation, j'ai utilisé le référentiel apt Dotdeb. Les instructions de ce site Web donnent la possibilité d'ajouter un référentiel qui vous permet d'installer Nginx avec un support HTTP2 «complet». La version actuelle est 1.14, ce qui est un mineur derrière la dernière version, vous ne serez donc pas trop loin (le backport actuel est 1.10).
la source