알파 테스트를 위한 베포를 준비하는 과정에서 프론트앤드에서 CORS가 발생한다는 이슈를 전달해 주었습니다. 프론트앤드에서는 https를 백엔드 서버는 http를 사용하다보니 발생한 CORS라는 것을 확인할 수 있었고 이를 해결하기 위해 SSL을 적용하게 되었습니다.
SSL 적용을 위한 첫번째 과정으로 도메인이 필요합니다. 무료 도메인을 발급받거나 유료 도메인을 구매하여 사용할 수 있습니다.
무료 도메인은 언제 유로 도메인에 비해 상대적으로 관리가 느슨하고 관리하는 회사 임의로 유료로 전환할 수도 있다는 단점이 존재하므로 가비아에서 유료 도메인을 구매해서 사용하기로 결정했습니다.
DNS 설정은 가비아의 DNS 설정 기능을 활용해서 진행했다. EC2 주소를 매핑해줌으로써 DNS 설정을 마무리 할 수 있었습니다.
Certbot + NGNIX로 SSL 발급을 시도해보았으나 실패했습니다. 원인을 찾아보니 가비아에서는 DNS challenge를 지원해주지 않아 위 방식으로 SSL 인증서를 발급받을 수 없었습니다.
이에 개별적으로 SSL 인증서를 발급받고 NGNIX에서 처리하는 방식으로 구현 방향을 선회했습니다. ZeroSSL에서 무료 SSL 인증서 발급을 진행했습니다.
sudo apt-get install ngnix
sudo systemctl enable ngnix
, sudo systemctl start ngnix
이후 NGNIX 설정을 변경합니다.
/etc/nginx/nginx.conf
...
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 이하부터 추가
server {
server_name 서버 이름;
location /{
proxy_pass http://127.0.0.1:8080; ## 도커를 사용하므로 proxy pass를 활용하여 위치 지정을 해준다.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
listen 443 ssl;# 443 포트로 ssl 인증을 on한 상태에서 요청 받기
ssl_certificate /etc/ssl/certificate.crt;# 인증 정보 저장 위치 <- 여기에 아까 ZeroSSL 에서 인증받은 값 입력하기
ssl_certificate_key /etc/ssl/private.key;# 인증 정보 저장 위치 <- 여기에 아까 ZeroSSL 에서 인증받은 값 입력하기
}
server {
if ($host = 도메인 이름) { # 호스트가 도메인 이름이면
return 301 https://$host$request_uri; # https로 Redirect 요청 보내기
}
listen 80; # 80포트에 대한 요청 받기
server_name 서버 이름;
return 404; # 아니면 404!
}
...
이후 sudo /etc/init.d/nginx restart
명령어를 통해 NGNIX를 재시작 해줍니다.
정상적으로 SSL 인증이 적용된 것을 확인할 수 있었습니다.
추가적으로 웹소켓을 활용하는 채팅의 경우도 ws://에서 wss://로 SSL 인증이 적용되었습니다.