티스토리 뷰
들어가며
http 보안에 취약하다. 예를 들어 중간에 로그인하는 과정에 아디, 비번 탈취당하거나 해커를 확인하지 않고 통신할 수 있기 때문에 위장이 가능하여 큰 문제점을 야기한다. 이러한 문제점을 해결하기 위해서 무료로 제공하는 Letsencrypt과 https 연결시켜주는 nginx 사용하였다.
1. HTTP vs HTTPS 차이
기본적인 사항은 HTTP와 거의 동일하지만, HTTP 메세지에 포함되는 콘텐츠 정보에 암호화가 추가되는 것이 가장 큰 차이점이다. https 공개키와 비밀키로 구성되어 있다. 브라우저에는 불특정 다수가 들어올 수 있기 때문에 공개 키가 주어지고 서버에는 비밀키가 담겨있다. 해커는 공개 키의 암호화된 비밀키를 알아낼 수 없기 때문에 안전하다.
2. NGINX
Nginx는 웹서버이다. 간단하게 이 웹서버는 클라이언트로부터 요청이 발생했을 때
해당하는 파일을 http 통신을 통해 응답해주는 프로그램이다. 주요 역할은 캐싱, 정적 파일 제공, redirect, https 있다.
기존에는 http 통신을 했지만 nginx(웹서버) 통해 인증이 확인된 사용자만 https 통신이 가능하다.
그림을 보면 nginx 80 -> 443으로 redirect 하고 만약 인증되지 않으면 nginx 제공하는 오류 정적 파일을 제공한다.
앞에 서버를 하나를 두고 뒤에 또 다른 서버를 두면 리버스 프록시라고 한다.
3. NGINX + HTTPS 설치하기
개발 환경
1. amazon ubuntu
2. putty
설치 방법
1. sudo yum install epel
2. sudo yum install python2-certbot-nginx
3. sudo yum install nginx1
4. 80 port 종료
5. nginx.conf 설정
경로 - cd /etc/nginx/nginx.conf
server {
server_name lookapi.cf;
location / {
proxy_set_header HOST $host;
proxy_pass http://127.0.0.1:3065;
proxy_redirect off;
}
}
- nginx 80 port && springboot 3065 port 설정
6. sudo certbot --nginx1
- 이메일, 약관 동의, 도메인 등록
7. application.yml port 3065 변경
8. 서버 재실행
// 시작
$ 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
// 에러 확인
$ sudo tail /var/log/nginx/error.log
// tcp 80 포트
sudo lsof -i tcp:80
오류 및 해결방법
1. "No package python2-certbot-apache available"
- 우분투 nginx 설치 에러
- Amazon 우분투에서는 yum을 통한 nginx 설치가 지원되지 않음
해결 방법
1. amazon-linux-extras list | grep nginx
- amazon 에서 nginx 설치하는 이름 검색
2. sudo amazon-linux-extras install -y nginx1
- nginx -> nginx1
3. sudo yml install nginx1
2. "No package python2-certbot-apache available"
- 우분투 certbot 설치 에러
해결 방법
1. EPEL repository 활성화됐는지 확인
2. sudo yum install epel
4. HTTPS 자동 갱신하기
Letsencrypt는 3개월 무료 발급이기 때문에 2주 전에 갱신을 해줘야 한다.
수동으로 하면 불편하기 때문에 자동 갱신으로 설정해주면 알아서 갱신된다.
crontab -l : 예약된 작업리스트
crontab -e : 예약된 작업 수정
crontab -r : 예약된 작업 삭제
0 18 1 * * /usr/bin/certbot renew --renew-hook="sudo systemctl restart nginx" >> /var/log/letsencrypt/letsencrypt-renew.log
이렇게 하면 매월 1일 03시에 갱신을 시도한다.
갱신이 시도하고 있는지 제대로 확인하기 위해서 로그가 필요하다.
// 로그 확인
sudo cat /var/log/cron
// 처리, 에러 확인
sudo view /var/log/letsencrypt/letsencrypt-renew.log
// 우분투 재시작
$ sudo systemctl restart crond
// 일반 재시작
$ sudo systemctl restart cron
https://devlog.jwgo.kr/2019/04/16/how-to-lets-encrypt-ssl-renew/ - 자동갱신 설정방법
https://ksbgenius.github.io/ssl/2020/11/01/letsencrypt-certificates-auto-renewal.html - 자동갱신 로그확인
https://vlee.kr/3440 - certbot 갱신 명령 사용 시 에러 해결
https://freedeveloper.tistory.com/340 - Amazon Linux 2에 nginx 설치
https://www.zerocho.com/category/NodeJS/post/5ef450a5701d8a001f84baeb - nginx와 let's encrypt로 SSL 적용하기
'∙Server' 카테고리의 다른 글
EC2에서 디스크 용량 부족 문제로 발생한 API 오류 해결하기 (0) | 2024.09.10 |
---|---|
Nginx와 헬스체크를 활용한 무중단 배포하기 (0) | 2024.09.02 |
Nginx에서 SSL 인증서 갱신하기 (0) | 2023.11.10 |
Nginx 다중 도메인 서버 설정하기 (0) | 2023.11.07 |
AWS 엑세스키 해킹 후기 (0) | 2022.04.22 |