This post is from a low-reputation account and contains an unverified outbound link. Be cautious before clicking external links.

HTTP/2를 Let's Encrypt를 사용해 NGINX에 적용하는 법

Words
553
Reading
3 min
Listen
Play
8y

HTTP/2를 Let's Encrypt를 사용해 NGINX에 적용하는 법

HTTP/2 이용을 위해서 NGINX와 Let's Encrypt를 설치해보도록 하겠습니다.

설치는 openSSL, NGINX, Certbot 순서로 설치할거에요.

작업은 항상 root권한에서 실행해줍시다!

커맨드라인부분은 복붙이 쉽도록 #따위는 붙이지 않을겁니다. 하하!

저는 V사 가상서버 업체의 Centos6 에서 진행할거지만, 대부분 다 동일할거라 보고 있어요.

만약 게시글에 대한 오류나 문의는 덧글이나 [email protected]로 문의 부탁드려요.

- 첫번째.

자 우리 한번 시작해볼까요?

먼저 터미널을 열거나 ssh에 연결해줍시다.

벌써 첫번째 단계가 끝났어요! 참 쉽죠? 하하핳하!!!

죄... 죄송해요....

이제 우리는 openSSL을 설치할거에요.

아래의 명령어를 터미널에 복붙해줍시다. 하나하나 치기 너무 귀찮잖아요?

cd /usr/local/src

wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz

tar xvzf openssl-1.0.2h.tar.gz

cd openssl-1.0.2h

./config

make depend

make

make test

make install

mv /usr/bin/openssl /usr/bin/openssl_1.0.1e

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

openssl version

만약 openssl version 이라고 명령을 줬을때 OpenSSL 1.0.2h 3 May 2016 가 나온다면 openSSL의 설치는 완벽히 된거랍니다!

야호!

- 두번째.

와아-! 벌써 두번째 단계에요!!!

어때요? 복붙만 하니 정말 쉽죠?

이제는 NGINX를 설치할 차례에요.

다시한번 아래의 명령을 복붙해줍시다.

cd /usr/local/src

wget http://nginx.org/download/nginx-1.14.0.tar.gz

tar xvzf nginx-1.14.0.tar.gz

cd nginx-1.14.0

./configure --prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-openssl=/usr/local/src/openssl-1.0.2h \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_v2_module

make

make install

useradd --shell /sbin/nologin —no-create-home nginx

nginx -v

만약 nginx -v 라고 명령을 줬을때 nginx version: nginx/1.14.0 라는 출력이 나온다면 NGINX의 설치도 끄읏-!

- 세번째.

어서와 Let's Encrypt는 처음이지?

이 단계를 거치치 않는다면 HTTP/2는 커녕 TLS적용도 불가능하다구요!

이번 단계는 복붙만 한다면 문제가 생길 수 있으니 내용을 잘 보고 복붙을 해야되어요!

cd /usr/local/src

git clone https://github.com/certbot/certbot

cd certbot

sudo ./certbot-auto --os-packages-only 

./tools/venv.sh

# 만약 `./tools/venv.sh`명령에서 에러가 나온다면 A와 B 모두 진행해주시구요,
# 에러따위 없다면 B부터 진행해주면 되어요!

# A ----------

cd /usr/local/src

wget http://python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz

tar xf Python-2.7.14.tar.xz

cd Python-2.7.14

./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

make && make altinstall

strip /usr/local/lib/libpython2.7.so.1.0

which python2.7 #example output is '/usr/local/bin/python2.7'.

which python #example output is '/usr/bin/python'.

cd /usr/bin

rm -rf python python2

ln -s /usr/local/bin/python2.7 ./python2

ln -s ./python2 ./python

vi /usr/bin/yum # `#!/usr/bin/python` -> `#!/usr/bin/python2.6`

wget https://bootstrap.pypa.io/ez_setup.py -O - | python

easy_install pip

pip install virtualenv

cd /usr/local/src/certbot

./tools/venv.sh

# Please proceed to A followed by B.

# B ----------

source ./venv/bin/activate

sudo ./venv/bin/certbot -d *.YOUR.DOMAIN --email [email protected] --text --agree-tos --server  https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly

마지막 명령을 입력하고 나면 TXT값이 화면에 출력될거에요.

네임서버에 TXT값을 적용시켜주시면 돼요. 이건 제가 알려드리지 않아도 되죠?

여기까지 하셨다면 3개월짜리 SSL인증서가 발급된것입니다! 너무 쉽지 않아요?

- 네번째.

끝날때까지 끝난게 아니다-

마지막으로 NGINX에 발급된 인증서를 적용시켜주어야되어요!

우리 같이 NGINX의 설정을 바꿔줘봅시다.

/etc/nginx/nginx.conf파일을 수정해줄거에요.

/etc/nginx/nginx.conf파일 안의 # HTTPS server밑부분부터 시작할거에요.

일단 # HTTPS server 아래의 주석을 모두 지워주세요.

이렇게요.

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      cert.pem;
    ssl_certificate_key  cert.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

어때요? 어렵지 않죠?

이제 아까 발행했었던 SSL인증서를 적용시켜보자구요

ssl_certificate에는 fullchain.pem의 경로를, ssl_certificate_key에는 privkey.pem의 경로를 입력해주세요!

이렇게요.

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /etc/letsencrypt/live/YOUR.DOMAIN/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/YOUR.DOMAIN/privkey.pem;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

SSL의 활성화는 피니시-!

이제 진짜진짜 마지막으로 listenhttp2만 추가해주면 끝-!

요로코롬요!

server {
    listen       443 ssl http2;
    server_name  localhost;

    ssl_certificate      /etc/letsencrypt/live/YOUR.DOMAIN/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/YOUR.DOMAIN/privkey.pem;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

nginx에 설정한 내용을 적용시켜주기 위해서 nginx를 재시작해줄거에요.

nginx는 nginx서버를 시작시키구요, nginx -s stop는 nginx서버를 종료시켜요.

껐다 켜주면 되겠죠? 이렇게요!

nginx -s
nginx

Tada-! 축하드려요! 이제 브라우저에서 확인해보면 HTTP/2가 적용된걸 보실 수 있을거에요!

저는 다음 주제로 PHP와 MYSQL설치하는 포스트를 들고올게요! 그럼 안녕!

HTTP/2를 Let's Encrypt를 사용해 NGINX에 적용하는 법 | Ecency