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

in http2 •  7 years ago  (edited)

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설치하는 포스트를 들고올게요! 그럼 안녕!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

첫 포스팅이시군요. 반갑습니다. nginx 세팅할 때 도움이 되겠네요.

#kr 태그를 달지 않으시면 한국어 사용자에게 글이 잘 노출되지 않습니다. 스팀잇에 익숙해지실 때까지 #kr-newbie 태그를 사용하시는 것을 추천드립니다. #kr 커뮤니티에서 사용하는 태그 목록은 @myfan 님의 태그 정리글에서 확인하실 수 있습니다.
이지스팀잇 가이드북 을 보시면 앞으로 스팀잇 활동하시는데 도움이 되실겁니다.

덧글달아주셔서 감사합니다! 가이드북과 태그정리글 북마크해둬야겠어요. :)

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

Upvote this notification to help all Steemit users. Learn why here!

Congratulations @gangsterj! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

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:

SteemitBoard - Witness Update
Vote for @Steemitboard as a witness to get one more award and increased upvotes!