Estou executando o debian jessie no meu servidor e atualizei recentemente para o novo servidor web nginx com suporte a http / 2 (nginx 1.10). Como hoje, ele funciona muito bem e o servidor da web está fornecendo conteúdo com o protocolo http2.
Eu li que o chrome está descartando o suporte a NPN e só permite o ALPN após 15.5.2016. ALPN é uma extensão, que requer o openssl 1.0.2 instalado, mas no debian jessie é apenas o openssl 1.0.1 (também nos backports do debian e em outros repositórios, não há versão do openssl 1.0.2 para este debian).
E existe o problema - eu atualizei do SPDY para o http2 e, em alguns dias, terei que desativar o http2 e não poderá usar o SPDY porque esta versão do nignx possui apenas http2. Eu também li que esta versão do debian continuará com o openssl 1.0.1 e somente o debian stretch terá o openssl 1.0.2. Mas, para a data de lançamento, há quase um ano e o chrome estará desativando o suporte em breve, então não quero perder o benefício do protocolo http2.
Existe alguma solução, como instalar o openssl 1.0.2 neste sistema, sem criar uma compilação própria (manutenção incorreta) ou esperar pelo repositório de backports? Também não quero duas versões do openssl no meu sistema se uma delas precisar ser vinculada e mantida manualmente.
Obrigado por qualquer ajuda.
apt pinning
e usaropenssl
fora deDebian stretch
.1.0.2
emjessie
apenas logo após o congelamento (que foi rejeitada na época): ". Esta versão deve ser compatível com a versão 1.0.1 Eu não espero nada para passar de 1.0.1 para 1.0.2. " (Eu seria mais conscientes delibc6
.)apt-get install -t stretch nginx
(em uma de baunilhaDebian jessie
comnginx
instalado) vai puxar em: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
. (Estes são os dez pacotes ..)Respostas:
Atualização 08/08/2016:
nginx
injessie-backports
(a versão1.9.10-1~bpo8+3
foi criadaopenssl >= 1.0.2~
. Começar aALPN
trabalhar agora se a execuçãojessie
exigir apenas os pacotesjessie-backports
, não há mais necessidade de extrair pacotesstretch
.-
Resposta original: Bem, aqui está a minha resposta, de acordo com os comentários: Na minha opinião, não existem muitas maneiras de resolver isso até hoje, 09/05/2016. Basicamente, você deve tentar, de alguma forma, criar um
nginx
sistema moderno em seu sistema, compilado>= openssl 1.0.2~
.As únicas duas opções que vejo atualmente: Ou você compila por si mesmo, o que não deseja, o que é bastante compreensível, ou extrai pacotes modernos do
Debian stretch
seu sistema. Isso envolve alguns riscos, porque você está misturando um ambiente estável com outro, mas, na minha opinião, esses riscos são bastante baixos, porque você está usandoDebian
.Então, vamos tentar isso:
Adicione o
Debian stretch
repositório ao seuapt sources
. Não use/etc/apt/sources.list
para isso, mas use um arquivo dedicado/etc/apt/sources.list.d/
para mantê-lo limpo, pessoalmente, estou usandostretch.list
.Coloque estas linhas lá dentro:
Configure o apt pinning para garantir que você apenas puxe pacotes dos
Debian stretch
quais você está especificando. O arquivo a ser usado para isso é/etc/apt/preferences
, lá dentro, coloque:(Pode ser necessário alterar os pacotes e as prioridades para se adequar ao seu ambiente.)
Execute
apt-get update
(viasudo
/ asroot
) para atualizar o cache do pacote.Instale
nginx
deDebian stretch
:apt-get install -t stretch nginx
(faça isso porsudo
/ asroot
). Lucro!Como descrevi no (s) meu (s) comentário (s), para reduzir ainda mais os riscos envolvidos, você pode usar algo como um chroot ou uma solução de contêiner como o LXC . Caso você queira seguir o
chroot
caminho, é necessário configurar uma interface de rede lá dentro: Para fazer isso, dê uma olhada neste post do blog, por exemplo , que fornece uma introdução aonetwork namespaces
.Espero que isto ajude; Caso tenha mais dúvidas, entre em contato comigo. Gostaria de receber feedback e estou interessado em como vai.
fonte
ALPN
já procurou por suporte?nginx -V
fornece informações de que a versão é compilada com o openssl 1.0.2+. Então, eu acho que está funcionando corretamente.Outro método é instalar o OpenSSL 1.0.2 a partir do jessie-backports e usar as versões Ubuntu 16.04 LTS do próprio repositório do nginx. Dessa forma, você está usando pelo menos um pacote OpenSSL criado para Jessie.
Adicionar a
/etc/apt/sources.list
:Então corra:
Obviamente, isso coloca você em uma configuração oficialmente não suportada, mas talvez seja melhor do que não ter um pacote - e funcionou para mim. Além disso, o uso do repositório nginx significa que você recebe atualizações novas.
fonte
Outro método é usar o jessie-backports e reconstruir facilmente o nginx
adicione ao /etc/apt/sources.list backports
e depois execute como root
e depois recrie o nginx. Siga as instruções em https://wiki.debian.org/BuildingAPackage
fonte
Para mim, a maneira mais fácil de corrigir isso era usar uma imagem diferente do Nginx Docker, consulte a compilação oficial do Nginx no Docker Hub . A versão padrão do Docker Nginx usa o Debian Jessie para que não resolva o problema, mas eles também oferecem uma versão alternativa baseada no Alpine Linux . Suas versões mais recentes usam o OpenSSL 1.0.2!
Portanto, esta solução pressupõe que você instalou o Docker e que está bem ao executar o Nginx em
Alpine Linux
vez deDebian Jessie
.Para iniciar seu contêiner Nginx:
Breve explicação para você começar com o Docker:
docker run
: baixa a imagem do Docker (neste casonginx:1.11-alpine
) se você ainda não a possui e inicia um contêiner do Docker com base nessa imagem--name nginx-container
: nomeia o contêiner do Docker (você pode exibir todos os contêineres do Docker em execução usandosudo docker ps
ou usesudo docker ps -a
também para exibir os contêineres parados)-p 80:80 -p 443:443
: liga as portas 80 e 443 na máquina host às portas 80 e 443, respectivamente, no contêiner do Docker-v /path/to/your/nginx/directory/:/etc/nginx/
: monta o diretório em seu sistema host que contém sua configuração do Nginx no/etc/nginx/
diretório no contêiner do Docker/path/to/your/files/to/serve/:/usr/share/nginx/html/
: monta um diretório em seu sistema host que contém arquivos que você deseja que o Nginx sirva-d
: inicia o contêiner em segundo plano (você pode parar o contêiner usandodocker stop nginx-container
)nginx:1.11-alpine
: use esta imagem para iniciar seu contêiner (as imagens oficiais do Nginx Docker estão listadas aqui )Também é útil:
sudo docker exec nginx-container <command>
para executar um comando no contêiner, por exemplo,sudo docker exec nginx-container nginx -s reload
para recarregar o Nginx depois de alterar os arquivos de configuração no sistema hostsudo docker exec -it nginx-container bash
para inserir um shell bash no contêiner para que você possa trabalhar diretamente lá (não recomendado, mas às vezes útil)fonte
Uma maneira alternativa é usar o BoringSSL, o que não prejudica o ambiente do OpenSSL. A seguir, detalhes para consultar, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie
fonte
Na minha situação, usei o repositório apt do Dotdeb. As instruções deste site oferecem a opção de adicionar um repositório que permite instalar o Nginx com suporte HTTP2 "completo". A versão atual é a 1.14, que é um pouco menor do que a última versão, portanto você não ficará muito atrás (o backport atual é a 1.10).
fonte