Ubuntu에 Nginx 설정과 SSL 인증서를 발급해서 적용해보겠다.
sudo apt-get install nginx
nginx -v
sudo apt-get install letsencrypt
sudo systemctl stop nginx
sudo letsencrypt certonly --standalone -d www제외한 도메인 이름
순서대로 명령어를 입력한 후 "Congratulations!"로 시작하는 문구가 보이면, 인증서 발급이 완료된 것입니다.
/etc/nginx/sites-available로 이동한 후, 적절한 이름의 파일을 생성하여 파일에 다음과 같이 작성한다.
// 파일 생성하는 명령어
vi [파일명]
server {
location /{
proxy_pass http://localhost:3000;
}
location /api {
proxy_pass http://localhost:8080/api;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/[도메인 이름]/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/[도메인 이름]/privkey.pem; # managed by Certbot
# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = [도메인 이름]) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name [도메인 이름];
return 404; # managed by Certbot
}
location / 블록: 웹 서버로 들어오는 모든 요청을 http://localhost:3000으로 프록시 전달합니다. 이는 Node.js 애플리케이션이 3000 포트에서 실행 중이라고 가정합니다.
location /api 블록: /api 경로로 들어오는 요청을 http://localhost:8080/api로 프록시 전달합니다. 이는 또 다른 서버나 서비스가 8080 포트에서 실행 중이라고 가정합니다.
listen 443 ssl: 443 포트에서 HTTPS를 사용하도록 설정합니다. 이때, SSL 인증서가 적용됩니다.
ssl_certificate: SSL 인증서 파일의 경로를 지정합니다. 여기서는 Let's Encrypt가 발급한 인증서의 fullchain.pem 파일을 사용합니다.
ssl_certificate_key: SSL 인증서의 개인 키 파일의 경로를 지정합니다. 여기서는 Let's Encrypt가 발급한 인증서의 privkey.pem 파일을 사용합니다.
if ($host = [도메인 이름]): 만약 요청의 호스트가 [도메인 이름]과 일치하는 경우에만 아래의 블록을 실행합니다.
return 301 https://$host$request_uri;: 모든 HTTP 요청을 HTTPS로 리다이렉트시킵니다.
listen 80: 80 포트에서 HTTP를 사용하도록 설정합니다.
server_name [도메인 이름];: 서버의 이름을 [도메인 이름]로 설정합니다. 이 호스트로 들어오는 HTTP 요청은 위의 if 블록에서 처리됩니다.
return 404;: 기본적으로 모든 HTTP 요청에 대해 404 Not Found 응답을 반환합니다. 따라서 위의 if 블록에 일치하는 경우만 리다이렉트됩니다.
sudo ln -s /etc/nginx/sites-available/[파일명] /etc/nginx/sites-enabled/[파일명]
# 다음 명령어에서 successful이 뜨면 nginx를 실행할 수 있다.
sudo nginx -t
sudo systemctl restart nginx
이렇게 실행하면, http로 80포트 접근시, 443 포트(https)로 리다이렉트 된다. 그리고 백엔드 url을 /api/**로 분기처리할 수 있다. https://도메인주소 로 접근하면 배포한 웹 페이지에 접속할 수 있게된다.
HTTP File Upload로 발급받음
이때 8080 포트로 접근하게 되어서 컨테이너의 서비스를 포트 번호 없이 접근하는 방법을 모색함
docker run -p 80:8080 imageName
✔ 해당 명령어에서 -p 80:8080은 호스트의 80번 포트를 컨테이너의 8080번 포트로 매핑하는 것을 의미한다.
✔ 호스트의 80번 포트로 들어오는 요청은 Docker 컨테이너의 8080번 포트로 전달되며, 컨테이너 내의 서비스는 8080번 포트에서 실행된다.
✔ 컨테이너 내의 서비스는 8080번 포트에서 실행되지만, 클라이언트는 도메인 또는 포트 번호를 명시하지 않고도 컨테이너에 접근할 수 있게 됩니다.
참고 : https://shanepark.tistory.com/442