AWS, RDS, domain, https 실습

Sep 05, 2023
AWS, RDS, domain, https 실습
 

환경

클라우드 서버 : AWS EC2 인스턴스
OS : Ubuntu 22.04 LTS
WebServer : Nginx
BL : PHP
DBMS : MySQL
 
 
1. AWS Elastic IP 적용하여 http 외부접속 가능하게 Nginx, php, mysql 설치
 
notion image
AWS에 접속하여 회원가입을 하고 인스턴스를 생성하였다
 
notion image
!
 
notion image
AWS에서 빌린 서버의 폴더구조를 이와 같이 볼수있다
 
notion image
PUTTY로 명령어 창을 키고 이제 NGINX, PHP, MYSQL을 설치해보자 레쯔고
 
 
 

NGINX 설치

$ sudo apt update $ sudo apt install nginx
nginx 설치 코드
 
notion image
설치 완료
 
이제 재부팅을 해주고
 
notion image
주소로 접속해보니 연결할 수 없단다
당연함, 80포트 설정안해줌^^
 
 
notion image
인바운드 규칙 추가를 해주자
notion image
추가 완료
 
 
notion image
다시 주소로 연결해보면 제대로 NGINX가 뜬다 짝짝짝
 
 
 

MYSQL 설치

$ sudo apt install mysql_server $ sudo mysql
 
notion image
mysql도 설치완료~!
 

PHP 설치

php 설치 시 먼저 nginx와 php가 연결될 수 있도록 하는 php-fpm을 반드시 설치해주고, 이 설정을 nginx conf 파
일에서 해주어야한다.
$ sudo apt install php-fpm php-mysql // 설치 $ cd /var/www/html $ sudo vi index.php <?php phpinfo(); ?>
php 파일을 하나 만들어주고
 
$ sudo vi /etc/nginx/sites-available/default
 
notion image
php 주석을 해제해주고 다시 ip/index.php로 접속해보았는데
 
notion image
ㅋ?
whyrano.. 🤦🏻‍♂️
 
 
구글링을 오지게 해본결과 이건 버전 문제다 싶어서 php-fpm의 버전확인을 해봤다
notion image
notion image

잡았다요놈

실습 영상(7.2)과는 다르게 ubuntu22.04에는 8.1이 깔렸던것이다. 고쳐주자,,
 
notion image
 
버전 수정해주고
$ sudo service nginx restart
nginx를 재시작하면?!
 
 
notion image
php 설치완료!
 
 
2. RDS로 데이터베이스 (MySQL) 생성 후 외부(DataGrip, Workbench 등)에서 접속가능하게 만들기
 
$ sudo mysql mysql> show databases; mysql> use mysql; mysql> show tables; mysql> select user, host from user; mysql> create user 'neeke'@'%' identified by '비밀번호';
 
notion image
외부에서 접속할 사용자를 생성해주었다
 
mysql> create database TESTDB;
 
notion image
DB를 생성해주고
 
 
아까 생성한 사용자에게 권한을 부여해보자
mysql> grant all privileges on TESTDB.* to 'neeke'@'%'; // TESTDB의 모든 권한을 줌 mysql> flush privileges; // DBMS에 적용 mysql> show grants for 'neeke'@'%'; // 권한 확인
 
 
notion image
권한 부여 완료
 
 

MYSQL 외부 접속 설정

 
$ cd /etc/mysql/mysql.conf.d $ sudo vi mysqld.cnf
 
notion image
 
mysqld.cnf의 파일을 열어 bind-address를 모두 접속 가능하게 0.0.0.0으로 바꿔준다
그리고 mysql 재부팅 고고
 
 

Datagrip으로 Mysql 외부 접속

 
notion image
인스턴스 서버 인바운드 규칙에 mysql을 추가해주었다
 
 
Datagrip을 다운받고 실행시켜 새로운 프로젝트 생성 후 database → mysql 선택
아까 생성한 DB 정보, user 정보들을 입력해준다
 
가보자고
 
 
 
notion image
TEST CONNECTION이 Succeeded가 뜨면 성공
 
 
notion image

mysql 외부 연결 성공👊

 
 
3. domain 연결 (가비아, 후이즈 등)
 
 
지금까지 AWS 인스턴스 IP주소를 통해 접속해왔는데 이번엔 도메인을 구매하여 연결해주려고 한다.
나는 가비아라는 사이트에서 구매했다!
 
notion image
500원어치로 질렀다.
 
notion image
 
레코드 설정에서 레코드를 추가해준다
타입은 A(DNS의 레코드 중 하나, 웹서버의 IPv4의 주소를 매칭할 때 사용)
호스트는 www
값/위치는 A
 
nginx 재부팅해주고 구매한 도메인으로 접속해보면
 
 

두구두구두구두구

 
notion image

 
 
notion image
 

😆도메인 적용 완료 😆

 
 
4. https 적용(Let's Encrypt)
 
※ 보안상 당연히, 무조건 https는 적용해놓아야 한다 명심하도록.
 
  • HTTP: 클라이언트와 서버 양쪽에서 통신할 수 있도록 하는 기본 통신 프로토콜이다. 앞서 인바운드 규칙 설정을 통해 HTTP 프로토콜의 포트인 80번 포트로 접속하도록 설정을 해놓았다. HTTP는 브라우저와 서버 사이에서 정보를 평문으로 전송하므로 정보가 전달되는 네트워크에서 전송되는 정보를 제 3자가 엿볼 수가 있다.
  • HTTPS: 이처럼 제 3자가 엿보는 것을 예방하기 위해 클라이언트와 서버가 먼저 암호화 통신 채널을 설정한 다음 평문 HTTP 메시지를 전송함으로써 정보 유출을 막는 HTTPS가 등장했다. 암호화 채널은 SSL(TLS) 프로토콜을 사용해서 만든다.
  • Let's encrypt: Let's Encrypt는 무료의 TLS/SSL 인증서를 쉽게 가져오고 설치할 수 있는 방법을 제공하는 CA(인증 기관)으로, 웹 서버에서 암호화된 HTTPS를 무료로 이용할 수 있다. 이러한 방법은 사용자에게 Certbot라는 소프트웨어를 제공함으로써 구현한다.
 
 

certbot 설치

저장소를 최신으로 업그레이드 하고 certbot을 위한 저장소를 추가한다
$ sudo apt update $ sudo apt upgrade $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt install python3-certbot-nginx
 
$ sudo vi /etc/nginx/sites-available/default
설정파일로 가서 인증서를 적용할 도메인 이름을 넣어준다
 
 
notion image
작성완료
notion image
 
$ sudo nginx -t
이상이 없는지 테스트도 해준다
 
notion image
이상 읎음!
 
 
$ sudo systemctl reload nginx
설정 파일 적용을 위해 nginx를 reload 해준다
 
 

DNS 레코드 추가

notion image
HTTPS 구축 전 AWS 인스터스에 인바운드 규칙으로 HTTPS를 추가해줬다
 
 
$ sudo certbot --nginx -d [도메인] -d [도메인]
위 코드로 SSL 인증서를 획득하려 했으나
 
 
 
notion image
응 오류
 
 
 
 
오류 뜨는 이유가 DNS 레코드에 www 호스트만 설정했기 때문인것같다
가비아 사이트에 DNS 레코드를 추가해주자
 
notion image
 
 
@는 www가 없을 때 들어오는 설정
 
다시 SSL 인증서를 받으러 가보자
 
 
 
notion image
드디어 받아냈다
 
 
 
다시 도메인으로 접속해보면
notion image

notion image

HTTPS 적용 완료 🤸🏻

 
 
 
Share article

neeke