NGINX + HTTPS 적용하기(우분투)
Nginx도 하나의 서버다. Nginx 는 정적파일 생성, 리다이렉팅, 캐싱 등 여러가지 기능을 해준다. 그중에 저희는 Nginx를 기반으로 작동하는 웹 서버에 HTTPS를 적용하는 방법에 대해 알아보겠습니다.
우분투 에서 Nginx 서버랑 Node.js 서버 두개를 서버를 구축 할 것이다.
위 사진은 프론트서버로 예를 들것인데 먼저 저희가 next프레임워크로 구축한 서버를 원래 80번 포트였지만 다시 원래대로 3000포트로 옮기고, nginx 서버를 80번 포트로 실행을 시킬꺼다. 왜냐하면 같은포트로 동시에 두개서버를 열 수 없으니깐 나눠준것이고. 그래서 만약에 외부에서 433포트로 (https 기본포트가 433이다) 로 접근을 하면 nginx 서버가 바로 next포트로 연결을 해 줄것이고. 만약에 외부에서 80번 포트로 접근을 하면 nginx 서버에서 리다이렉트 시켜줘서 433포트로 옮겨서 접근을 시켜 줄 것이다.
앞에 서버하나를 두고 뒤에 또다른서버를 두는 둘 관계를 리버스 프록시라고 한다. 리버스 프록시에 대해서는 쫌 더 공부할 예정이다.(nginx 가 next 서버를 리버스 프록시 해준다.)
우분투에 nginx 설치및 설정
1. nginx 설치
$ sudo apt-get install -y nginx
2. nginx congif 파일 설정 보기
$ vim /etc/nginx/nginx.conf
입력해서 들어가시면
여러 정보들이 보일겁니다.
여기서 저희가 유심히 봐야할 부분은 http 이부분이다.
여기서 http 안에 server에 여러분 도메인(server_name)과 프록시 포트(3000같은 것)로 작성하시면 됩니다.
작성할 내용:
servser{
server_name effectshop-htmlcss.ml;
listen 80;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:3000;
procy_redirect off;
}
}
server_name은 자신의 프로젝트 도메인네임을 작성하시면 됩니다.
proxy_pass 부분은 자신이 리다렉트하고 싶은 local 포트를 설정해 주시면 됩니다.
이렇게 추가를 해 주세요.
3. Let’s Encrypt 를 통해서 무료 CA인증서 발급받기
Let’s Encrypt 를 통해서 3개월 무료 CA인증서를 발급받을 수 있다. 3개월이 만료되면 그때가서 다시 갱신하면 된다. 자동화 갱신은 뒤에서 한번 다뤄 보자 . 자동갱신은 여기 사이트 참조해보자.
제로초 nginx https 적용
설치
$ sudo snap install certbot --classic
$ sudo certbot --nginx
이렇게 해 주시면 자신의 이메일을 입력하고, 약관에 동의한 후 원하는 도메인을 입력하면 인증서가 발급됩니다. 이후 서버를 실행하면 됩니다.
그전에 꼭 port 80번을 비워둬야합니다.
$ sudo lsof -i tcp:80
해당 명령어를 통해서 80번 포트가 할당이 되어있는지 확인하시고 다른 포트가 할당이 되어있다면 kill 해주시고 nginx서버를 80번으로 켜 줘야합니다.
nginx 에러장면 보시면 80포트가 이미 노드가 쓰고있다는걸 확인할 수 있습니다 해당 node 서버를 kill 해 줍시다.
$ sudo npx pm2 kill //모든 pm2 로 실행한 포트 kill 합니다.
다시 80번포트에 다른서버가 구동되는지 확인하시고 없으시면
$ sudo certbot --nginx
다시 입력 해 주시고 도메인 설정하시고 보면 성공적으로 되어있습니다.
위 사진 보시면 해당 공개키랑 개인키의 위치가 나와있다.
다시 /etc/nginx/nginx.conf 부분 들어가서 보시면
추가적으로 ssl 설정이 추가가 되어있는걸 확인할 수 있습니다.
자동 갱신하기
cron 사용하여 갱신하기.
vim /etc/cron.d/certbot 파일을 다음과 같이 수정합니다. 파일이 없다면 생성합니다
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12* * * root certbot -q renew --nginx --renew-hook 'service nginx reload'
이리하여 프론트단 https 적용이 끝났습니다.
nginx 간단한 명령어
// 시작
$ sudo service nginx start
$ sudo systemctl start nginx
$ sudo /etc/init.d/nginx start
// 재시작
$ sudo service nginx restart
$ sudo systemctl restart nginx
$ sudo /etc/init.d/nginx restart
// 중지
$ sudo service nginx stop
$ sudo systemctl stop nginx
$ sudo /etc/init.d/nginx stop
// 상태
$ sudo service nginx status
$ sudo systemctl status nginx
// 설정 reload
$ sudo service nginx reload
$ sudo systemctl reload nginx
$ sudo nginx -s reload
// 설정파일 문법 체크
$ sudo nginx -t
// 재시작 전에 80번 포트 중지
$ sudo fuser -k 80/tcp
express프레임워크를 사용하는경우
app.js 아네 app.set('trust proxy', 1); //프록시 뒤에 express 사용할 때 해줘야하는 설정.추가를 해주자.
Author And Source
이 문제에 관하여(NGINX + HTTPS 적용하기(우분투)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sungmin-choi/NGINX-HTTPS-적용하기우분투저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)