NGINX + HTTPS 적용하기(우분투)

성민개발로그·2022년 3월 30일
0

AWS

목록 보기
4/5
post-thumbnail

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 사용할 때 해줘야하는 설정.추가를 해주자.

0개의 댓글