Ubuntu에서 Apache에서 HTTP/2를 활성화하는 방법

월드 와이드 웹 (www)가 처음 시작된 이후, HTTP 프로토콜은 시간이 흐름에 따라 발전하여 인터넷을 통해 안전하고 빠른 디지털 콘텐츠를 제공하게 되었습니다.

가장 널리 사용되는 버전은 HTTP 1.1이며, 이전 버전의 단점을 해결하기 위한 기능 향상과 성능 최적화가 포함되어 있지만, HTTP/2에서 해결된 몇 가지 다른 중요한 기능이 부족합니다.

HTTP/1.1의 한계는 무엇인가요?

HTTP/1.1 프로토콜은 특히 고트래픽 웹 서버를 운영할 때 이상적이지 않게 만드는 다음과 같은 단점이 있습니다:

  1. 긴 HTTP 헤더로 인한 웹 페이지 로딩 지연.
  2. HTTP/1.1은 TCP 연결 당 각 파일에 대해 하나의 요청만 보낼 수 있습니다.
  3. HTTP/1.1은 각 TCP 연결에 대해 하나의 요청을 처리하기 때문에 브라우저는 요청을 동시에 처리하기 위해 병렬 TCP 연결을 대량으로 보내야 합니다. 이는 TCP 혼잡과 궁극적으로 대역폭 낭비와 네트워크 저하로 이어집니다.

위에서 언급한 문제들은 종종 성능 저하와 대역폭 사용량의 높은 오버헤드 비용으로 이어졌습니다. HTTP/2는 이러한 문제를 해결하기 위해 등장하였으며 이제 HTTP 프로토콜의 미래입니다.

HTTP/2 사용의 장점은 무엇인가요?

다음과 같은 장점을 제공합니다:

  1. 클라이언트 요청을 최소화하는 헤더 압축으로 대역폭 소비를 줄입니다. 그 결과로 페이지 로드 속도가 빨라집니다.
  2. 하나의 TCP 연결을 통해 여러 요청을 다중화합니다. 서버와 클라이언트 모두 HTTP 요청을 여러 프레임으로 분할하고 다른 쪽에서 다시 그룹화할 수 있습니다.
  3. 더 빠른 웹 성능은 SEO 순위 향상으로 이어집니다.
  4. 대부분의 주류 브라우저가 HTTPS를 통해 HTTP/2를 로드하기 때문에 보안이 개선되었습니다.
  5. 헤더 압축 기능 덕분에 HTTP/2는 더 모바일 친화적입니다.

그럼 이제 HTTP/2Apache에 활성화하겠습니다. Ubuntu 20.04 LTSUbuntu 18.04 LTS에서 말이죠.

사전 준비:

시작하기 전에 HTTPS를 Apache 웹 서버에 활성화한 후 HTTP/2를 활성화해야 합니다. 이는 모든 주류 웹 브라우저가 HTTP/2HTTPS를 통해 지원하기 때문입니다. Ubuntu 20.04의 인스턴스로 가리키는 도메인 이름이 있으며, 이는 Apache 서버를 실행하고 있으며 Let’s Encrypt 인증서를 사용하여 보안이 유지되고 있습니다.

또한, Apache 2.4.26 이상 버전을 가지고 있는 것이 HTTP/2로 전환하려는 프로덕션 서버에 추천됩니다.

Apache의 버전을 확인하려면 다음 명령을 실행하십시오:

$ apache2 -v
Check Apache Version in Ubuntu

출력에서 볼 수 있듯이, 이 문서를 작성하는 시점에서 사용 중인 최신 버전은 Apache 2.4.41입니다.

Apache 가상 호스트에서 HTTP/2 활성화

시작하려면 먼저 웹서버가 HTTP/1.1을 실행 중인지 확인하세요. 이를 확인하려면 브라우저에서 Ctrl +SHIFT + I 조합을 사용하여 개발자 도구 섹션을 열면 됩니다. ‘네트워크’ 탭을 클릭한 다음 ‘프로토콜’ 열을 찾으세요.

Confirm HTTP Protocol Version

다음으로, 다음 명령을 실행하여 Ubuntu에서 HTTP/2 모듈을 활성화하세요.

$ sudo a2enmod http2
Enable HTTP/2 on Ubuntu

다음으로, Let’s Encrypt를 사용하여 HTTPS를 활성화했다면 SSL 가상 호스트 파일을 찾아서 편집하세요. 새 파일이 le-ssl.conf 접미사로 생성됩니다.

$ sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf

<VirtualHost *:443> 태그 뒤에 아래 지시문을 삽입하세요.

Protocols h2 http/1.1
Enable HTTP/2 on Apache

변경 사항을 저장하려면 Apache 웹서버를 다시 시작하세요.

$ sudo systemctl restart apache2

HTTP/2가 활성화되었는지 확인하려면 다음 curl 명령을 사용하여 HTTP 헤더를 가져오세요.

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Support in Apache

표시된 출력을 받아야 합니다.

HTTP/2 200

브라우저에서 사이트를 다시로드한 다음 개발자 도구로 돌아가 ‘프로토콜’ 열에서 h2 레이블로 표시되는 HTTP/2가 확인되는지 확인하세요.

Confirm HTTP/2 Protocol Version

Apache에서 mod_php 모듈을 사용하는 경우

만약 Apachemod_php 모듈을 함께 실행 중이라면, PHP-FPM으로 전환해야 합니다. 이는 mod_php 모듈이 HTTP/2에서 지원되지 않는 prefork MPM 모듈을 사용하기 때문입니다. prefork MPM을 제거하고 HTTP/2에서 지원될 mpm_event 모듈로 전환해야 합니다.

예를 들어 PHP 7.4 mod_php 모듈을 사용 중이라면, 다음과 같이 비활성화하십시오.

$ sudo a2dismod php7.4 
Disable mod_php Module

그 후 prefork MPM 모듈을 비활성화하십시오.

$ sudo a2dismod mpm_prefork
Disable Prefork MPM in Apache

모듈을 비활성화한 후에는 Event MPM, Fast_CGI, 그리고 setenvif 모듈을 다음과 같이 활성화하십시오.

$ sudo a2enmod mpm_event proxy_fcgi setenvif
Enable Event MPM in Apache

Ubuntu에 PHP-FPM 설치

다음으로, 다음과 같이 PHP-FPM을 설치하고 시작하십시오.

$ sudo apt install php7.4-fpm 
$ sudo systemctl start php7.4-fpm

그런 다음 PHP-FPM이 부팅 시 시작되도록 활성화하십시오.

$ sudo systemctl enable php7.4-fpm

다음으로 PHP-FPM을 Apache의 PHP 핸들러로 활성화하고 변경 사항을 적용하기 위해 Apache 웹 서버를 다시 시작하십시오.

$ sudo a2enconf php7.4-fpm

Apache Ubuntu에서 HTTP/2 지원 활성화

그런 다음 이전과 같이 HTTP/2 모듈을 활성화하십시오.

$ sudo a2enmod http2

모든 변경 사항을 동기화하기 위해 Apache를 다시 시작하십시오.

$ sudo systemctl restart apache2

마지막으로 curl 명령어를 사용하여 서버가 HTTP/2 프로토콜을 사용하는지 테스트할 수 있습니다.

$ curl -I --http2 -s https://domain.com/ | grep HTTP
Check HTTP/2 Protocol in Apache

당신은 앞서 문서화된 대로 Google Chrome 브라우저의 개발자 도구를 사용하여 확인할 수도 있습니다. 이 가이드의 끝까지 왔으니, 정보가 유용했기를 바라며 HTTP/2Apache에서 쉽게 활성화할 수 있기를 희망합니다.

Source:
https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/