NPN 대신 ALPN을 사용하기 위해 openssl 1.0.2의 데비안 jessie nginx


14

내 서버에서 debian jessie를 실행 중이고 최근에 http / 2 지원 (nginx 1.10)을 사용하여 새로운 nginx 웹 서버로 업그레이드했습니다. 오늘날처럼 잘 작동하고 웹 서버는 http2 프로토콜로 콘텐츠를 제공하고 있습니다.

나는, 읽고 크롬 NPN 지원을 떨어지고 만 2016년 5월 15일 후 ALPN 수 있습니다. ALPN은 확장이며, openssl 1.0.2가 설치되어 있어야하지만 데비안에서는 jessie는 openssl 1.0.1 만 있습니다 (데비안 백 포트 및 다른 저장소에도이 데비안 용 openssl 1.0.2 버전이 없습니다).

그리고 문제가 있습니다-SPDY에서 http2로 업그레이드했으며 며칠 안에 http2를 꺼야 하며이 버전의 nignx에는 http2 만 있기 때문에 SPDY를 사용할 수 없습니다. 또한이 버전의 데비안은 openssl 1.0.1을 고수하고 데비안 스트레치 만 openssl 1.0.2를 갖게됩니다. 그러나 날짜를 발표하기 위해 거의 연도가 있으며 크롬은 곧 지원을 중단 할 것이므로 http2 프로토콜의 이점을 잃고 싶지 않습니다.

자체 빌드 (나쁜 유지 관리)를 구축하거나 백 포트 리포지토리에 대기하지 않고이 시스템에 openssl 1.0.2를 설치하는 방법이 있습니까? 또한 하나의 시스템에 두 개의 버전의 openssl이 수동으로 연결되고 유지 관리되어야하는 경우에는 원하지 않습니다.

도움을 주셔서 감사합니다.


당신이 사용할 수있는 apt pinning사용이 openssl밖으로 Debian stretch.
gf_

@gf_ 시스템을 손상시킬 위험이 매우 높습니다. 많은 것들이 OpenSSL에 의존합니다.
Michael Hampton

@MichaelHampton 글쎄, 위험 수준에 대해 판단 할 수 없다. 나는 유지 보수 담당자 중 한 명인 Kurt Roeckx와 함께 동결 직후에 1.0.2들어 오려고했습니다 jessie. "이 버전은 1.0.1 버전과 호환되어야합니다. 1.0.1에서 1.0.2 로의 이동이 중단되었습니다. " (나는 더 알고있을 것이다 libc6.)
gf_

해당 컨텍스트에서 @gf_ "Getting in"은 OpenSSL을 사용하는 모든 것을 다시 컴파일해야합니다. 나는 그것이 거부되었다는 사실에 놀라지 않았다. 데비안은 오래되고 안정된 것을 좋아합니다. 귀하의 제안과 관련하여 OpenSSL을 사용하는 모든 스트레치 패키지를 가져 오는 것도 의미합니다.
Michael Hampton

@MichaelHampton 저는 데비안 정책을 잘 알고 있으며, 당시에 거부 당했다는 사실에 놀라지 않았습니다. 그러나 (어쩌면 내 표현은 정확) : 수행 apt-get install -t stretch nginx(바닐라에 Debian jessienginx에 끌어 설치) 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. (이것은 10 개의 패키지입니다.)
gf_

답변:


16

2016/08/08 업데이트 : nginx in jessie-backports(버전 1.9.10-1~bpo8+3은에 대해 빌드되었습니다 openssl >= 1.0.2~. ALPN실행 jessie하기 위해 패키지를 필요로하는 경우 지금 작업 jessie-backports하려면 더 이상 패키지를 꺼내지 않아도 stretch됩니다.

-

원래 답변 : 글쎄, 여기에 내 의견에 따르면, 의견에 따르면 : 내 의견으로는 오늘 2016/05/09 현재 이것을 해결하는 방법은 많지 않습니다. 기본적으로 당신은 어떻게 든 현대 nginx에 당신의 시스템에 들어가서에 대해 컴파일 하려고 시도했습니다 >= openssl 1.0.2~.

현재 내가 볼 수있는 유일한 두 가지 옵션 : 당신이하고 싶지 않은, 스스로 이해할 수 있거나 컴파일 할 수 있거나 현대적인 패키지를 Debian stretch시스템으로 가져 오는 것입니다 . 다른 하나 안정적인 환경을 혼합하고 있기 때문에, 약간의 위험을 수반하지만, 내 의견으로는 이러한 위험은 매우 낮은 때문에 사용중인 Debian.

자, 이것을 시도해 봅시다 :

  • Debian stretch저장소를 추가 하십시오 apt sources. 이것을 사용하지 말고 /etc/apt/sources.list대신 전용 파일을 사용하여 파일 /etc/apt/sources.list.d/을 깨끗하게 유지하십시오 stretch.list. 개인적으로 사용하고 있습니다.

    이 줄을 안에 넣으십시오.

    deb http://httpredir.debian.org/debian/ stretch main contrib non-free
    deb-src http://httpredir.debian.org/debian/ stretch main contrib non-free
    
    deb http://security.debian.org/ stretch/updates main contrib non-free
    deb-src http://security.debian.org/ stretch/updates main contrib non-free
    
    # stretch-updates, previously known as 'volatile'
    deb http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
    deb-src http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
    
  • 설정 쉽다 고정을 당신이 단지에서 패키지로 끌어 만들 수 Debian stretch있는 당신이있는 거 지정합니다. 이것에 사용할 파일은 /etc/apt/preferences안에 있습니다.

    Package: *
    Pin: release n=jessie
    Pin-Priority: 900
    
    Package: * 
    Pin: release a=jessie-backports
    Pin-Priority: 500
    
    Package: *
    Pin: release n=stretch
    Pin-Priority: 100
    

    환경에 맞게 제품군 및 우선 순위를 변경해야 할 수도 있습니다.

  • /를 apt-get update통해 실행 하여 패키지 캐시를 업데이트하십시오.sudoroot

  • 설치 nginx에서 Debian stretch: apt-get install -t stretch nginx(통해이 작업을 수행 sudo으로 / root). 이익!

  • 필자의 의견에서 설명했듯이 관련 위험을 낮추려면 chroot 또는 LXC 와 같은 컨테이너 솔루션을 사용할 수 있습니다 . 경우에 당신은 가고 싶어 chroot,이 작업을 수행하려면보고있다 : 당신은 내부가 네트워크 인터페이스를 설정해야합니다, 방법을 예를 들어이 블로그 게시물에 대한 소개를 제공 network namespaces.

  • 도움이 되었기를 바랍니다; 더 궁금한 점이 있으면 언제든지 문의 해주세요. 의견을 보내 주시면 감사하겠습니다.


귀하의 답변 설명으로 오늘 nginx를 설치했으며 모든 것이 잘 작동하는 것 같습니다! nginx 저장소에서 nginx 1.10을 가지고 있고 해당 버전이 데비안 저장소 패키지와 호환되지 않기 때문에 여분의 작업을 수행 해야하는 유일한 방법은 이전 nginx 설치를 제거하는 것이 었습니다 (그러나 debian nginx에서 업그레이드 할 때도이 작업을 수행했습니다) 1.10까지이므로 문제가되지 않았습니다. 귀하의 노력과 도움에 감사드립니다!
Juraj Nemec

@JurajNemec 좋아요! 의견을 보내 주셔서 감사합니다! ALPN이미 지원 을 확인 했습니까 ?
gf_

예. ALPN 지원이 있는지 http2 testSSL Labs test로 확인했습니다 . 또한 nginx -V버전이 openssl 1.0.2 이상으로 컴파일되었다는 정보를 제공합니다. 그래서 제대로 작동한다고 생각합니다.
Juraj Nemec

@JurajNemec 좋아, 좋아 보인다! 가능하다면이 설정을 한 4-4 주 정도 실행 한 후에 작은 업데이트를 받고 싶습니다. 감사!
gf_

@JurajNemec 구글이 스위치를 만들고 NPN을 제거한 것으로 보인다. 설정이 여전히 예상대로 작동합니까?
gf_

11

또 다른 방법은 jessie-backports에서 OpenSSL 1.0.2를 설치하고 nginx의 자체 저장소 에서 Ubuntu 16.04 LTS 빌드를 사용하는 것 입니다. 그렇게하면 적어도 Jessie 용으로 작성된 OpenSSL 패키지를 사용하고 있습니다.

추가 /etc/apt/sources.list:

# jessie-backports, from stretch-level but with no dependencies
deb http://httpredir.debian.org/debian/ jessie-backports main contrib non-free
deb-src http://httpredir.debian.org/debian/ jessie-backports main contrib non-free

# Nginx repository - use Ubuntu 16.04 LTS Xenial to get packages compiled with OpenSSL 1.0.2
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

그런 다음 다음을 실행하십시오.

apt-get update
apt-get install -t jessie-backports openssl
apt-get install nginx

이것은 분명히 당신을 공식적으로 지원되지 않는 구성으로 만들지 만 패키지를 전혀 갖지 않는 것보다 낫습니다. 그리고 그것은 나를 위해 일했습니다. 또한 nginx의 저장소를 사용하면 새로운 업데이트를받을 수 있습니다.


왜이 길을 가는지 자세히 설명해 주시겠습니까? "플러스, nginx의 저장소를 사용한다는 것은 새로운 업데이트를 얻는다는 것을 의미합니다.": 설명 된 방법을 사용하여 "새 업데이트"를 받고 있습니다.
gf_

nginx의 패키지는 데비안의 릴리스 프로세스가 아니라 릴리스 프로세스의 일부이기 때문에 릴리스와 같은 날 업데이트됩니다. 안정 패키지가 아닌 메인 라인 패키지를 포함했지만 위의 경로에서 / mainline을 제거하면 안정적으로 얻을 수 있습니다. 당신이 선호하는 것은 당신에게 달려 있습니다.
GreenReaper

위의 내용을 확장하려면 : stretch는 현재 '테스트'릴리스이므로 테스트에서 이동하는 데 걸리는 시간에 따라 최소 지연이 있습니다 . 예를 들어, 1.10.0이되었다 - 그리고 즉시 불안정으로 만드는 가정 사용자들은 4월 26일을 발표 하지만, 불안정 4월 29일에 밀려5월 5일에 스트레칭으로 마이그레이션 ( PTS 참조 ).
GreenReaper

1
나는 이러한 사실을 잘 알고 있습니다. 감사합니다. :) 나는 안정적인 서비스를 제공하려고 할 때 "새로운 패키지"가 필요하다면 (질문 때문에) 문제가 사라진다고 생각합니다. AFAIK, 많은 사람들이 데비안을 선택합니다 (그리고 이것이 문제가되는 OS입니다). 새로운 버전의 소프트웨어를 실행하는 데는 약간의 위험이 있습니다. 그러나 어쨌든 환경, 기대 및 요구가 다르기 때문에 어떻게 처리하는 일반적인 규칙이 없다고 생각합니다. 게다가 : 귀하의 의견에 감사드립니다, 그것은 사람들에게 가치가 있다고 확신합니다; 내 선은 어떤 종류의 공격도 의미하지 않습니다.
gf_

1
당신이 말했듯이, 그것은 정도의 문제입니다. 당신이 최첨단에 있고 싶다면 매일 빌드를 컴파일 할 수 있습니다. 내 경우에 적어도되는 주요 기술 현명한 가장자리 것은 플러스입니다. ALPN 자체는 아마도 대부분의 사이트 에서 필요 하지는 않지만 HTTP / 2를 사용하려는 사람들에게 특히 바람직합니다 (특히 NPN을 사용하는 동안 이전에 사용했던 경우). 또한이 목표 그룹은 안정 전에 메인 라인 nginx에 나타나는 기능에 관심이있을 가능성이 높습니다. 10 개의 캐시 노드를 관리하고 일반적으로 더 작은 노드에서 시도하여 추가 롤아웃 전에로드 상태에서 테스트합니다.
GreenReaper

0

또 다른 방법은 jessie-backports를 사용하고 쉽게 nginx를 다시 빌드하는 것입니다

/etc/apt/sources.list 백 포트에 추가

deb http://ftp.debian.org/debian jessie-backports main

그런 다음 루트로 실행

apt-get update
apt-get install -t jessie-backports openssl

그런 다음 nginx를 다시 빌드하십시오. https://wiki.debian.org/BuildingAPackage의 지침을 따르십시오.


"[...] 당신이하고 싶지 않은 당신 자신을 위해 컴파일합니다 [...]"
gf_

0

나를 위해 가장 쉬운 방법은 다른 Nginx Docker 이미지를 사용하는 것 입니다 .Docker Hub공식 Nginx 빌드를 참조하십시오 . 기본 Docker Nginx 빌드는 Debian Jessie를 사용하여 문제를 해결하지는 않지만 Alpine Linux 기반의 대체 빌드도 제공합니다 . 최신 빌드는 OpenSSL 1.0.2를 사용합니다!

따라서이 솔루션은 Docker설치 했으며 Alpine Linux대신 Nginx를 실행하는 것이 좋습니다 Debian Jessie.

Nginx 컨테이너를 시작하려면 :

sudo docker run --name nginx-container -p 80:80 -p 443:443 -v /path/to/your/nginx/directory/:/etc/nginx/ /path/to/your/files/to/serve/:/usr/share/nginx/html/ -d nginx:1.11-alpine

Docker를 시작하는 간단한 설명 :

  • docker run: Docker 이미지 (이 경우 nginx:1.11-alpine)가 없으면 이 이미지를 다운로드 하고이 이미지를 기반으로 Docker 컨테이너를 시작합니다.
  • --name nginx-container: Docker 컨테이너에 이름을 지정합니다 ( 중지 된 컨테이너를 사용 sudo docker ps하거나 sudo docker ps -a중지 하는 데 사용 하는 모든 Docker 컨테이너를 볼 수 있음)
  • -p 80:80 -p 443:443: 호스트 시스템의 포트 80 및 443을 Docker 컨테이너의 포트 80 및 443에 각각 바인딩합니다.
  • -v /path/to/your/nginx/directory/:/etc/nginx/: Nginx 구성을 포함하는 호스트 시스템의 /etc/nginx/디렉토리를 Docker 컨테이너 의 디렉토리에 마운트합니다.
  • /path/to/your/files/to/serve/:/usr/share/nginx/html/: Nginx가 제공 할 파일을 포함하는 디렉토리를 호스트 시스템에 마운트합니다.
  • -d: 백그라운드에서 컨테이너를 시작합니다 (을 사용하여 컨테이너를 중지 할 수 있음 docker stop nginx-container)
  • nginx:1.11-alpine:이 이미지를 사용하여 컨테이너를 시작하십시오 ( 공식 Nginx Docker 이미지는 여기에 나열되어 있습니다 )

또한 유용합니다 :

  • 호스트 시스템에서 구성 파일을 변경 한 후 sudo docker exec nginx-container <command>컨테이너에서 명령을 실행하는 데 사용 ( 예 : sudo docker exec nginx-container nginx -s reloadNginx를 다시로드)
  • 또는 sudo docker exec -it nginx-container bash컨테이너에 bash 쉘을 입력하여 직접 작업 할 수 있습니다 (권장하지 않지만 때로는 유용합니다)


0

내 상황에서는 Dotdeb apt 저장소를 사용했습니다. 이 웹 사이트 의 지침은 “완전한”HTTP2 지원으로 Nginx를 설치할 수있는 저장소를 추가하는 옵션을 제공합니다. 현재 버전은 1.14이며 마지막 릴리스보다 약간 미미하므로 너무 뒤지지 않습니다 (현재 백 포트는 1.10입니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.