일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 공학인증
- ABEEK
- StatefulWidget
- 맨붕
- BlurDrawable
- progress
- nginx
- Android
- c
- 플러터
- 앱 기획
- c++
- game engine
- HTML 게임 엔진
- first flutter app
- 호주 이민
- Engineer Australia
- 회전판
- quintus
- OpenGL
- flutter progress dialog
- 기술인증
- flutter
- first_app
- 블러 효과
- reverse proxy
- rotate circle
- ipad
- StatelessWidget
- PowerMockup
- Today
- Total
우동우동우's note
nginx를 활용한 Reverse Proxy 서버 구축 본문
aws를 이용해서 서비스를 운영하다보면 고정ip를 사용하지 않고 사용하게 되는 경우가 있다. 고정 아이피를 사용하려면 추가로 설정을 해야할 때가 많아지는 문제가 있기도 하며, 간단한 서비스를 container로 만든 서비스를 위해서 고정 IP를 부여하기란 쉽지 않은 일이다.
이럴 때 손쉽게 고정 IP를 부여하는 방법은 Reverse Proxy 서버를 구축하는 방법이다. Reverse Proxy Server라는 거창한 이름이 있지만 인터넷에 자료를 찾아보면서 다 구축하는데 걸린 시간은 3시간이 되지 않았다. 생각보다 쉽고 nginx가 그만큼 강력한게 아닌가 생각된다.
구축방법은 간단하고 아래와 같은 순서로 하면된다.
-
EC2 인스턴스 생성 및 도매인 설정
-
nginx 설치
-
certbot 설치
-
certbot으로 certificate 생성
-
crontab에 certbot renew 명령어 추가
-
nginx default host 해제
-
nginx에 reverse proxy 기능 설정
EC2 인스턴스 생성
나는 Ubuntu 20.02 이미지를 사용하였다. 나머지 설정은 필요에 맞춰 생성하시면 될 듯하다.
그 다음에 EIP(Elastic IP)를 설정하시어 고정 IP를 하나 부여해주고 Route53에서 domain을 추가하고 해당 domain이 생성해준 IP를 바라보도록 설정한다. (간단한 설정임으로 요번 포스트에선 생략한다.)
nginx 설치
아래 명령어로 nginx 설치가 가능하다.
$ sudo apt update
$ sudo apt install nginx
설치하면 해당 도매인으로 접속하면 다음과 같은 화면이 나타난다. (nginx 설치가 이렇게 간단한지 처음 알았다.)
certbot 설치
certbot 설치도 간단하다.
$ sudo add-apt-repository -r ppa:certbot/certbot
$ sudo apt update
$ sudo apt-get install python3-certbot-nginx
certbot으로 certificate 생성
certbot으로 domain name을 입력하면 certificate를 생성한다.
$ sudo certbot --nginx -d {domain name}
다음 명령어를 입력하면 certificate가 만들어 졌는지 확인한다.
$ sudo ls -al /etc/letsencrypt/live/{domain name}
여기서 인증서가 잘되는지를 확인하기 위해서는 default virtual host 설정을 변경해야 하는데... 요건 귀찮으니 생략하겠다..참고 문서를 보시면 설명이 있으니 참고하시기 바랍니다.
참고 : https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/
crontab에 certbot renew 명령어 추가
인증서를 발급하였으나 이 certificate는 letsencrypts에서 발급받은 것으로 3개월 까지만 유효하다. 그래서 renewal 해두어야 한다. 먼저 crontab을 수정한다.
$ sudo crontab -e
그 다음에 crontab에 다음을 입력한다. (뜻은 매일 12시에 * 뒤에 있는 명령어를 실행한다는 뜻이다. )
0 12 * * * sudo /usr/bin/certbot renew --quiet
nginx default virtual host 해제
default virtual host를 해제하고 nginx를 다시 켜면 브라우저에서 연결이 안됩니다.
$ sudo unlink /etc/nginx/sites-enabled/default
nginx에 reverse proxy 기능 설정
이제 reverse-proxy 설정을 해준다.
$ sudo vi /etc/nginx/sites-enabled/reverse-proxy.conf
내용은 아래과 같이 입력해준다.
server {
if ($host = {domain name}) {
return 301 https://$host$request_uri;
}
listen 80 default_server;
listen [::] default_server;
server_name {domain name};
return 404;
}
server {
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
server_name {domain name};
ssl_certificate /etc/letsencrypt/live/{domain name}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{domain name}/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
location / {
proxy_pass {proxy destination};
}
}
이상으로 간단한 reverse proxy 설정 방법이었다.
'Infrastructure' 카테고리의 다른 글
DynamoDB에 대한 생각(개인적인 의견) (0) | 2020.11.27 |
---|---|
AWS SAM(Serverless Application Model) 사용 후기 (2) | 2020.11.19 |