-
nginx에 SSL 인증서 적용하기프로젝트/WebRTC 화상통화 프로젝트 2022. 8. 8. 17:21
지난 시간에 SSL 인증서를 발급받았습니다.
letsencrypt 인증서 발급하고 OpenVidu에 적용하기 :: 매일매일 꾸준히 (tistory.com)
이 인증서를 nginx에 적용하는 법을 알아보겠습니다.
nginx란?
https://junuuu.tistory.com/323
자세히 알고 싶으시면 위의 링크로 이동하시면 좋을 것 같습니다.
간단하게 소개하자면 클라이언트의 요청들을 받아 서버에게 보내주는 로드밸런서 역할을 수행합니다.
변경된 docker-compose.yml
version: "3" services: mydb: image: mysql container_name: mydb environment: MYSQL_DATABASE: zipzong MYSQL_ROOT_PASSWORD: ssafyWEBa805! volumes: - /mydb:/var/lib/mysql ports: - 3306:3306 redis: container_name: redis image: redis ports: - 6379:6379 nginx: image: nginx container_name: nginx ports: - 80:80 - 443:443 volumes: - /etc/letsencrypt:/etc/letsencrypt - ./nginx/conf.d:/etc/nginx/conf.d jenkins: image: jenkins/jenkins:lts container_name: jenkins volumes: - /var/run/docker.sock:/var/run/docker.sock - /jenkins:/var/jenkins_home ports: - 9090:8080 privileged: true user: root
nginx 부분만 유의 깊게 보면 됩니다.
컨테이너의 이름은 nginx 그리고 컨테이너 이미지는 nginx로부터 만들어집니다.
HTTP, HTTPS 프로토콜로 통신하기 위해 80:80, 443:443으로 포트 매핑을 수행합니다.
또한 nginx 도커 컨테이너에는 nginx에 대한 정보와 인증서에 대한 정보가 없습니다.
따라서 volumes 옵션을 통해 host의 파일들을 마운트 해줍니다.
/nginx/conf.g/ 폴더에 app.conf 설정 정보 적어주기
# app.conf server { listen 80; server_name i7a805.p.ssafy.io www.i7a805.p.ssafy.io; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name i7a805.p.ssafy.io; access_log off; ssl_certificate /etc/letsencrypt/live/i7a805.p.ssafy.io/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/i7a805.p.ssafy.io/privkey.pem; location / { proxy_pass http://i7a805.p.ssafy.io:3000; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Host $server_name; 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; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; } location /api/ { proxy_pass http://i7a805.p.ssafy.io:8080/; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $server_name; 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; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; add_header 'Access-Control-Allow-Origin' '*'; } }
80 포트로 들어오게 되면 https로 redirect 됩니다.
즉, HTTP로 요청이 들어오면 HTTPS로 들어가게 됩니다.
또한 443 포트로 요청이 들어오게 되면 SSL 인증을 수행합니다.
이때 ssl_certificate로 공개키와 개인키를 설정해줍니다.
ssl_certificate /etc/letsencrypt/live/도메인주소/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인주소/privkey.pem;이후 /로 요청이 들어오면 react인 3000번 포트로 이동시키고 /api로 요청이 들어오면 스프링 부트인 8080으로 이동시킵니다.
만약 /api/members/duplicate/{user-id}로 요청이 들어오게 되면 nginx가 이를 http://i7a805.p.ssafy.io:8080/member/duplicate/{user-id}로 요청을 변환하여 보내게 됩니다.
'프로젝트 > WebRTC 화상통화 프로젝트' 카테고리의 다른 글
Sign In with Apple REST API 문서 정리 (1) 2023.05.16 JPA 동시성 문제 해결하기 (트랜잭션과 락) (0) 2022.08.09 Jenkins로 Gitlab CI/CD 구축하기(Spring + MySQL + JenKins + Redis + Nginx) (0) 2022.08.06 letsencrypt 인증서 발급하고 OpenVidu에 적용하기 (0) 2022.08.05 Ubuntu에서 Spring, MySQL, Redis Docker Compose로 배포하기 (4) 2022.08.04