티스토리 뷰
아마존 리눅스 이미지 인스턴스의 nginx 설정도 기존에 nginx 설정과 크게 다르지 않습니다. 이전에 글을 작성한 기록이 있으니 참고하셔도 좋을 것 같아요.
1. Amazon Linux Nginx 설치하기
sudo amazon-linux-extras install nginx1
2. Nginx 시작하기
sudo service nginx start
3. HTTPS (SSL 설정하기)
이제 서버에 인증서를 설치하여야 합니다. certbot 이라는 무료 소프트웨어를 사용하여 인증서를 등록하고 다운로드 받을 것인데, 이 작업을 하기 전에 도메인을 먼저 구입해두어야 합니다. 저는 글작성의 편의성 domain.com 이라고 하겠습니다.
3-1. epel 설치
epel은 Extra Package for Enterprise Linux의 약자로 리눅스를 사용하는 사용자들에게 추가 패키지를 제공하는 도구입니다. wget을 이용하여 다운로드 받아서 쉽게 설치합니다.
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
3-2. rpm 설치
다음으로 rpm 이라는 명령어를 설치하여 nginx 설치 도구를 사용할 준비를 합니다.
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
3-3. epel 활성화
sudo yum-config-manager --enable epel*
4. certbot 설치
certbot을 설치하면서 python2 도 같이 설치합니다. 이는 certbot의 패키지입니다.
설치가 다 되면 nginx을 설치합니다.
sudo yum install -y certbot python2-certbot-apache
sudo yum install certbot-nginx
5. Letsencrypt 서비스 시작
sudo certbot --nginx -d domain.com
위의 명령어를 타이핑하면 서버 1대당 한 번씩 이메일을 등록하고 이용 약관을 동의하냐는 질문을 하게 됩니다. 이메일 주소를 입려가고 A를 누르면 다음으로 넘어갑니다. 여기서 -d 옵션은 사용하고자 하는 도메인을 등록하는 옵션입니다.
인증이 다 되면 아래와 같은 메시지가 출력됩니다. 여기에선 nginx에서 사용할 인증서 2개가 출력됩니다. fullchain.pem과 privkey.pem의 Key File 2개가 자동으로 생성되는데 이 경로를 이따가 nginx.conf 설정에서 사용하게 됩니다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://domain.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=api.woodaebbang.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/domain.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/domain.com/privkey.pem
Your cert will expire on 2022-08-15. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
6. 인증서 자동갱신
인증서는 3개월을 주기로 만료가 됩니다. 그래서 만료 1달전에는 위에서 적은 이메일로 인증서를 갱신하라는 이메일이 오는데, 그렇게 할 필요 없이 인증서 자동 갱신 설정을 해두면 됩니다.
sudo vi /etc/crontab
위의 명령어를 치고 cron 식을 사용하여 저장합니다.
50 1 * * * root certbot renew --no-self-upgrade
스케줄은 매일 새벽 1시 50분에 root 권한으로 처리되고 -no-self-upgrade 플래그를 사용하면 Certbot이 사용자의 개입 없이 자체 업그레이드하지 않습니다.
그리고 서비스를 재시작합니다.
sudo systemctl restart crond
7. Nginx 설정
Amazon Linux 운영체제의 nginx 설정 파일은 /etc/nginx/nginx.conf 파일에 위치하고 있습니다. ubuntu에서는 /etc/nginx/sites-available/default 파일로 운영되는데, nginx 문법이므로 원리는 같습니다.
http {
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
root /usr/share/nginx/html;
server_name domain.com; # 여기에 사용할 도메인을 씁니다.
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://localhost:8080; # 여기서 라우팅될 포트를 사용합니다.
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;
add_header Front-End-Https on;
proxy_set_header Host $http_host;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
이제 위에서 추가할 부분은 ssl_certificate의 fullchain.pem 연결과 privkey.pem 파일을 연결해주어야 하고, location 에서 proxy할 포트로 전환하는 설정을 해줍니다.
설정이 다 되었으면 nginx service 를 재시작합니다.
sudo service nginx restart
'Server' 카테고리의 다른 글
[Java] JPA Boolean/LocalDate Soft Delete 구현하기 (1) | 2022.06.20 |
---|---|
ECR 사용해서 Jenkins 배포하기 (0) | 2022.06.08 |
Amazon Linux Jenkins Docker Image 구성하기 (1) | 2022.05.28 |
AWS의 DockerHub 인 ECR 에 대해 알아보자 (0) | 2022.05.27 |
AWS CLI 설치하기 (0) | 2022.05.27 |
ARM Amazon Linux2 Docker Compose 설정하기 (0) | 2022.05.27 |