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의 활성화는 피니시-!
이제 진짜진짜 마지막으로 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설치하는 포스트를 들고올게요! 그럼 안녕!
첫 포스팅이시군요. 반갑습니다. nginx 세팅할 때 도움이 되겠네요.
#kr 태그를 달지 않으시면 한국어 사용자에게 글이 잘 노출되지 않습니다. 스팀잇에 익숙해지실 때까지 #kr-newbie 태그를 사용하시는 것을 추천드립니다. #kr 커뮤니티에서 사용하는 태그 목록은 @myfan 님의 태그 정리글에서 확인하실 수 있습니다.
이지스팀잇 가이드북 을 보시면 앞으로 스팀잇 활동하시는데 도움이 되실겁니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
덧글달아주셔서 감사합니다! 가이드북과 태그정리글 북마크해둬야겠어요. :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @gangsterj! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
You made your First Comment
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @gangsterj! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit