- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- mongoose
- single quote
- nginx
- til
- flutter
- MYSQL
- TailwindCSS
- https
- Nodejs
- wil
- findByIdAndDelete
- async
- clipBehavior
- Find
- jsonwebtoken
- css
- JavaScript
- moment
- certbot
- sequelize
- EC2
- RDS
- Node.js
- mongodb
- Express
- atlas
- double quote
- AWS
- await
- TypeScript
기억 휘발 방지소
AWS EC2에 배포한 서버에 Certbot으로 https 인증받기 (2/2) 본문
이전글 보기 👇
저번 글에서 EC2와 도메인 연결이 끝났고
이번 글에서는 nginx 설치부터 certbot으로 ssl 인증서 발급해서 적용하는 것까지 해보도록 하겠습니다.
📌 Nginx 설치
sudo apt-get install nginx
설치가 끝났으면 기본설정을 해주어야합니다.
vi 편집기를 사용해 편집해주겠습니다.
sudo vi /etc/nginx/sites-avaiable/default
위에 명령어를 입력하여 vi로 파일을 열고
server_name에 DNS명을 적어주고
proxy_pass에 'http://127.0.0.1:포트번호'를 적어주겠습니다.
server {
# SSL configuration
#
# listen 443 ssl default_server
# listen [::]:443 ssl default_server
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
server_name example.site;
location / {
# First attempt to serve request as file, then
# as directory, then fail back to displaying a 404.
# try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:8080;
}
}
📌 Certbot 설치 및 인증서 발급
certbot 설치
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot 설행
sudo certbot --nginx
Certbot 실행을 하면 먼저 이메일을 적으라고 나온다. 본인 이메일을 적어주면 된다.
약관동의: y
EFF 소식받기: n
마지막은 캡처를 못했는데
Which name would you like to activate HTTPS for? 라는 질문이 나오고 아까 위에서 /etc/nignx/sites-available/default에서 server_name에 적어준 DNS 주소가 나오는데 그 주소를 선택 후 엔터를 치면 끝납니다.
간혹 다음과 같이 나올 수도 있는데 그 때는 DNS 주소를 직접 입력해주면 됩니다.
제대로 발급되면 pem 키가 생성되고 해당 키를 사용하면 됩니다.
만료기한은 22년 11월 16일
📌 서버에 적용하기
위에서 발급한 키를 서버에 적용해주면 됩니다.
const express = require('express')
const http = require('http')
const https = require('https')
const fs = require('fs')
const app = express()
app.get('/', (req, res) => {
res.send('hello world')
})
const httpsOptions = {
ca: fs.readFileSync('/etc/letsencrypt/live/~~~.site/fullchain.pem'),
key: fs.readFileSync('/etc/letsencrypt/live/~~~.site/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/~~~.site/cert.pem'),
}
http.createServer(app).listen(8080, () => {
console.log('http')
})
https.createServer(httpsOptions, app).listen(8090, () => {
console.log('https')
})
❗ 인증서에 대한 permission denied
다시 EC2에 배포 후 실행시켜보면 발급받은 pem 키에 대한 permission denied 가 발생하는데 이건 다음과 같이 해결해주었습니다.
sudo chown ubuntu -R /etc/letsencrypt
❗443번 포트 사용할 수 없음
배포한 서버에 443번 포트를 사용하게 되면 Error: listen EACCES: permission denied 0.0.0.0:443 에러가 발생할 수 있습니다.
유닉스계열 시스템에서는 root가 아닌 사용자는 1024보다 낮은 포트로 바인딩할 수 없기 때문이라고 합니다.
이 문제는 서버 포트를 1024보다 높은 번호로 설정을 하고 443번 포트로 들어오는 요청을 서버포트로 리다이렉트 시켜주면 해결할 수 있습니다.
443번 포트로 들어오는 요청을 8090번 포트로 리다이렉트 시켜주었습니다.
sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8090
'AWS' 카테고리의 다른 글
AWS EC2에 배포한 서버에 Certbot으로 https 인증받기 (1/2) - EC2와 도메인 연결 (0) | 2022.08.18 |
---|---|
AWS EC2 RDS 연결 (0) | 2022.02.09 |
AWS RDS DB 생성부터 Workbench 연결까지 (0) | 2022.02.09 |