HTTP/2를 Let's Encrypt를 사용해 NGINX에 적용하는 법
HTTP/2 이용을 위해서 NGINX와 Let's Encrypt를 설치해보도록 하겠습니다.
설치는 openSSL, NGINX, Certbot 순서로 설치할거에요.
작업은 항상 root권한에서 실행해줍시다!
커맨드라인부분은 복붙이 쉽도록 #따위는 붙이지 않을겁니다. 하하!
저는 V사 가상서버 업체의 Centos6 에서 진행할거지만, 대부분 다 동일할거라 보고 있어요.
만약 게시글에 대한 오류나 문의는 덧글이나 question@oup.kr로 문의 부탁드려요.
- 첫번째.
자 우리 한번 시작해볼까요?
먼저 터미널을 열거나 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 YOUR@EMAIL.ADDRESS --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의 활성화는 피니시-!
이제 진짜진짜 마지막으로 listen에 http2만 추가해주면 끝-!
요로코롬요!
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설치하는 포스트를 들고올게요! 그럼 안녕!