inblog logo
|
neeke
    Linux

    AWS, RDS, domain, https 실습

    Sep 05, 2023
    AWS, RDS, domain, https 실습
    Contents
    환경NGINX 설치MYSQL 설치PHP 설치 잡았다요놈 Datagrip으로 Mysql 외부 접속두구두구두구두구certbot 설치DNS 레코드 추가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

    RSS·Powered by Inblog