Nginx를 이용한 SSL 설정
프로젝트에서 안드로이드와 서버 api 연결 과정에서 SSL 설정이 권장되고, 설정하지 않는 경우 연결이 가능하도록 코드를 추가해 불안정하게 연결하여야 한다고 하여 SSL를 적용하게 되었다.
1. SSL(Secure Sockets Layer)이란?
- SSL (Secure Sockets Layer)
- 웹 서버와 클라이언트의 통신 암호화 프로토콜
- SSL이 적용되면 통신 패킷이 탈취되어도 복호화 키 없이는 데이터를 확인할 수 없음
- HTTPS (HyperText Transfer Protocol Secure)
- 텍스트 교환인 HTTP(HyperText Transfer Protocol) 통신의 보안 문제를 보완하는 프로토콜
- SSL 프로토콜을 이용해 텍스트를 공개키 암호화 방식으로 암호화함
2. SSL 설정하기
1) EC2 환경 세팅
-
80번 포트를 사용하고 있는 경우 중지
docker stop [컨테이너 ID]
-
nginx 설치
sudo apt update sudo apt install nginx
-
방화벽에서 필요한 포트 열기 : 22, 80, 443
sudo ufw allow [포트] sudo ufw enable # 방화벽 적용 sudo ufw status # 허용 포트 확인
- port 22 : ssh
- port 80 : http
- port 443 : https
-
nginx 상태 확인
systemctl status nginx
2) 서버 설정
-
리버스 프록시 설정
sudo vi /etc/nginx/sites-available/[서버 이름]
server { listen 80; listen [::]:80; server_name [서버 이름] [서버 도메인]; location / { proxy_pass http://127.0.0.1:[포트 번호]; # 프록시 연결을 하고자 하는 포트 번호 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- location의 /로 들어온 요청을 proxy_pass의 http://127.0.0.1:[포트 번호]로 보냄
💡 context path가 설정되어있다면 location에 같이 설정
-
Nginx 가상 호스트 활성화
sudo ln -s /etc/nginx/sites-available/[서버 이름] /etc/nginx/sites-enabled/
sites-available/[서버 이름]
설정 파일에 대한 심볼릭 링크를sites-enabled
에 생성하여 Nginx는 해당 가상 호스트 설정을 활성화/etc/nginx/sites-available/[서버 이름]
:[서버 이름]
인 가상 호스트의 설정 파일이 위치한 경로. 활성화되지 않은 상태/etc/nginx/sites-enabled/
: 활성화된 가상 호스트 설정 파일들이 위치하는 디렉토리
-
Nginx에서 서버 이름을 저장하는 해시 테이블의 크기를 지정하는 설정
sudo vi /etc/nginx/nginx.conf # server_names_hash_bucket_size 64; # 이 부분의 주석을 해제
- 주석 처리된 상태에서는 Nginx가 자동으로 적절한 크기를 선택
-
Nginx 설정 파일 테스트
sudo nginx -t
-
Nginx 설정 적용을 위해 restart
sudo systemctl restart nginx
- Nginx 설정을 변경하는 경우 항상 restart
3) SSL 설정
-
스냅 코어 패키지를 설치
sudo snap install core; sudo snap refresh core
- 스냅 : Linux 소프트웨어 패키지의 형식
-
기존 certbot 제거 후 재설치
sudo apt remove certbot sudo snap install --classic certbot
-
SSL 설정
sudo certbot --nginx -d [서버 도메인]
-
SSL 설정 완료!
참고 자료
Leave a comment