Estoy ejecutando debian jessie en mi servidor y recientemente me actualicé al nuevo servidor web nginx con soporte http / 2 (nginx 1.10). Como hoy, funciona muy bien y el servidor web está entregando contenido con el protocolo http2.
He leído que Chrome está dejando de admitir NPN y solo permite ALPN después del 15.5.2016. ALPN es una extensión, que requiere la instalación de openssl 1.0.2, pero en debian jessie solo es openssl 1.0.1 (también en los puertos de Debian y otros repositorios, no hay una versión de openssl 1.0.2 para este debian).
Y está el problema: he actualizado de SPDY a http2 y en unos días tendré que apagar http2 y no puedo usar SPDY porque esta versión de nignx solo tiene http2. También he leído que esta versión de debian se quedará con openssl 1.0.1 y solo debian stretch tendrá openssl 1.0.2. Pero para la fecha de lanzamiento hay casi un año y Chrome pronto dejará de ser compatible, por lo que no quiero perder el beneficio del protocolo http2.
¿Hay alguna solución, cómo instalar openssl 1.0.2 en este sistema, sin construir una compilación propia (mal mantenimiento) o esperar que el repositorio de backports lo tenga? Tampoco quiero dos versiones de openssl en mi sistema si una de ellas debe vincularse y mantenerse manualmente.
Gracias por cualquier ayuda.
apt pinning
y usaropenssl
fuera deDebian stretch
.1.0.2
enjessie
apenas poco después de la congelación (que fue rechazada en aquel entonces.): "Esta versión debe ser compatible con la versión 1.0.1 no espero nada para romper el movimiento de 1.0.1 a 1.0.2 ". (Me gustaría ser más conscientes delibc6
.)apt-get install -t stretch nginx
(en una de vainillaDebian jessie
connginx
instalada) se tire en: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
. (Estos son diez paquetes ...)Respuestas:
Actualización 2016/08/08:
nginx
enjessie-backports
(versión1.9.10-1~bpo8+3
se contraopenssl >= 1.0.2~
.ALPN
Trabajar ahora si se ejecutajessie
solo requiere la eliminación de los paquetesjessie-backports
, ya no es necesario extraer los paquetesstretch
.-
Respuesta original: Bueno, aquí va mi respuesta, según los comentarios: en mi opinión, no hay muchas maneras de resolver esto a partir de hoy, 2016/05/09. Básicamente, debe intentar de alguna manera obtener una versión moderna de
nginx
su sistema, compilada>= openssl 1.0.2~
.Las únicas dos opciones que veo actualmente: o compilas por ti mismo, lo que no quieres hacer, lo cual es bastante comprensible, o sacas paquetes modernos de
Debian stretch
tu sistema. Esto implica algunos riesgos, porque estás mezclando un entorno estable con otro, pero en mi opinión, estos riesgos son bastante bajos, porque lo estás usandoDebian
.Entonces, vamos a probar esto:
Agregue el
Debian stretch
repositorio a suapt sources
. No lo use/etc/apt/sources.list
para esto, sino que use un archivo dedicado dentro/etc/apt/sources.list.d/
para mantenerlo limpio, personalmente lo estoy usandostretch.list
.Pon estas líneas adentro:
Configure apt pinning para asegurarse de que solo extrae paquetes de los
Debian stretch
que está especificando. El archivo a utilizar para esto es/etc/apt/preferences
, dentro, poner:(Es posible que deba modificar las suites y las prioridades para adaptarse a su entorno).
Ejecutar
apt-get update
(víasudo
/ asroot
) para actualizar la caché del paquete.Instalar
nginx
desdeDebian stretch
:apt-get install -t stretch nginx
(hacer esto a través desudo
/ asroot
). ¡Lucro!Como describí en mi (s) comentario (s), para reducir aún más los riesgos involucrados, podría usar algo como un chroot o una solución de contenedor como LXC . En caso de que quiera seguir el
chroot
camino, debe configurar una interfaz de red allí: para hacer esto, eche un vistazo a esta publicación de blog, por ejemplo , que le da una introducciónnetwork namespaces
.Espero que esto ayude; En caso de que tenga más preguntas, no dude en ponerse en contacto conmigo. Agradecería comentarios y estoy interesado en cómo va.
fuente
ALPN
Ya buscó apoyo?nginx -V
da información, que la versión está compilada con openssl 1.0.2+. Entonces creo que está funcionando correctamente.Otro método es instalar OpenSSL 1.0.2 desde jessie-backports y usar las compilaciones Ubuntu 16.04 LTS desde el propio repositorio de nginx. De esa manera, al menos estás usando un paquete OpenSSL creado para Jessie.
Añadir a
/etc/apt/sources.list
:Entonces corre:
Obviamente, esto lo coloca en una configuración oficialmente incompatible, pero tal vez sea mejor que no tener un paquete, y funcionó para mí. Además, usar el repositorio de nginx significa que obtienes actualizaciones nuevas.
fuente
Otro método es usar jessie-backports y luego reconstruir fácilmente nginx
agregar a /etc/apt/sources.list backports
y luego correr como root
y luego reconstruir nginx. Siga las instrucciones en https://wiki.debian.org/BuildingAPackage
fuente
Para mí, la forma más fácil de solucionar esto fue usar una imagen diferente de Nginx Docker, vea la versión oficial de Nginx en Docker Hub . La versión predeterminada de Docker Nginx usa Debian Jessie para que no solucione su problema, pero también ofrecen una versión alternativa basada en Alpine Linux . ¡Sus últimas versiones usan OpenSSL 1.0.2!
Por lo tanto, esta solución supone que instaló Docker y está bien con ejecutar Nginx en
Alpine Linux
lugar de hacerloDebian Jessie
.Para iniciar su contenedor Nginx:
Breve explicación para comenzar con Docker:
docker run
: descarga la imagen de Docker (en este casonginx:1.11-alpine
) si aún no la tiene e inicia un contenedor de Docker basado en esta imagen--name nginx-container
: le da un nombre al contenedor Docker (puede ver todos los contenedores Docker en ejecución usandosudo docker ps
osudo docker ps -a
también para ver los contenedores detenidos)-p 80:80 -p 443:443
: une los puertos 80 y 443 en su máquina host a los puertos 80 y 443 respectivamente en el contenedor Docker-v /path/to/your/nginx/directory/:/etc/nginx/
: monta el directorio en su sistema host que contiene su configuración de Nginx en el/etc/nginx/
directorio en el contenedor Docker/path/to/your/files/to/serve/:/usr/share/nginx/html/
: monta un directorio en su sistema host que contiene los archivos que desea que Nginx sirva-d
: inicia el contenedor en segundo plano (puede detener el contenedor usandodocker stop nginx-container
)nginx:1.11-alpine
: use esta imagen para iniciar su contenedor (las imágenes oficiales de Nginx Docker se enumeran aquí )También útil:
sudo docker exec nginx-container <command>
para ejecutar un comando en el contenedor, por ejemplosudo docker exec nginx-container nginx -s reload
para volver a cargar Nginx después de haber cambiado los archivos de configuración en el sistema hostsudo docker exec -it nginx-container bash
para ingresar un shell bash en el contenedor para que pueda trabajar allí directamente (no recomendado, pero a veces útil)fuente
Una forma alternativa es usar BoringSSL en su lugar, lo que no perjudica a los entornos OpenSSL. Aquí hay detalles para consultar, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie
fuente
En mi situación, he usado el repositorio apt de Dotdeb. Las instrucciones de este sitio web ofrecen la opción de agregar un repositorio que le permite instalar Nginx con soporte HTTP2 "completo". La versión actual es 1.14, que es una menor detrás de la última versión, por lo que no estará muy lejos (el backport actual es 1.10).
fuente