일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DFS
- 정렬
- web
- 객체지향설계
- 완전탐색
- aws
- 구현
- DP
- 그리디
- hashcollision
- DIP
- OCP
- 개방주소법
- BFS
- 자료구조
- multi module
- localdatetime
- 탄력적 ip
- 해시충돌
- SW마에스트로
- 멀티모듈
- EC2
- C++
- 서버
- google calendar api
- 에러로깅
- STL
- 서버타임존설정
- ZonedDateTime
- 비즈니스요구사항
- Today
- Total
레츠고✨
[AWS] EC2 서버 구축하기 - (2) Nginx, Php, Mysql 설치 및 도메인 연결 본문
안녕하세요! 지난 게시글에서 AWS EC2를 생성하고 접속하는 방법까지 알아보았는데요.
이번 게시글에서는 EC2에 N,P,M를 설치하고, 서버 설정을 한 뒤에
도메인을 구입해 연결하는 방법까지 알아보겠습니다!
목차
0. N,P,M 알아보기
1. EC2에 N,P,M 설치하기
2. EC2 서버 설정(Nginx와 Php 연동 테스트)
3. 도메인 구입 및 연결, 리다이렉션 설정
N, P, M 알아보기
NPM은 Nginx, Php Mysql 3가지가 연동되어 운영되도록 만든 환경입니다!
(보통 Apache, Php, Mysql 을 줄여서 APM이라고 많이들 부르는데, 저는 Apache 대신 Nginx를 다운받을 것이기 때문에 NPM이라고 혼자 줄여서 부르곤 했답니다. 하지만 이제보니 node package manager(npm)이랑 혼동될 가능성도 있겠네요! Nginx와 Apache의 차이점에 대해서는 다른 게시글에서 포스팅해보겠습니다.)
어쨋든 하나씩 뭔지 간단하게 짚고 넘어가자면,
- Nginx : 웹서버, 웹 서비스를 제공해주는 서버, Apache 웹 서버의 성능 제한을 해결하기 위해 작성되었다.
- Php : 백앤드 언어, 웹 페이지를 구성하는 서버 사이드 스트립트 언어이다. 동적 웹 페이지를 쉽고 빠르게 만들 수 있게 한다.
- Mysql : 데이터베이스 서버, 웹 페이지에서 사용할 데이터들을 저장하고 관리한다.
1) Client 측에서는 사용자가 원하는 데이터를 서버에서 받아오기 위해 데이터를 요청한다 .
2) 웹서버(Apache, Nginx)는 승인된 접속자에게 해당 정보를 제공하기 위해서 PHP에게 스크립트 실행을 요청한다.
3) PHP는 미리 작성된 프로그램을 통해 데이터베이스에게 상황에 맞는 쿼리를 질의한다.
4) Mysql은 받은 질의에 대한 데이터를 DB에서 가져온 후 결과를 PHP에게 보낸다.
5) PHP는 스크립트 실행결과(PHP 코드를 HTML형태로 변환)를 웹서버에게 전달한다.
6) 웹서버는 전달받은 HTML 파일을 클라이언트에게 전송한다.
따라서 EC2 서버에서 사용자의 요청을 받고 그에 맞는 응답을 해주기 위해서는 웹서버, PHP, DB서버 구축이 필요한 것입니다.
1. EC2에 N,P,M 설치하기
이제 EC2 인스턴스에 왜 N,P,M을 설치해야 하는지 알았으니
바로 설치를 시작해봅시다!
먼저, EC2에 접속해주세요
그리고 본격적으로 설치를 시작하기 전에 apt를 update 해주겠습니다
1) 설치 전
sudo apt update
설치 순서는 Nginx -> Mysql -> Php 입니다. php 설치 시에 nginx 및 mysql 관련 설정이 들어가기 때문입니다.
2) Nginx 설치
sudo apt install nginx
nginx -v
중간에 나오는 질문들은 모두 Yes 입력해주세요
3) MySql 설치
sudo apt install mysql-server
sudo mysql_secure_installation #mysql 보안설정
mysql_secure_installation 을 입력하면 다음과 같은 질문들이 나옵니다.
Q. Would you loke to setup VALIDATE PASSWORD component? # (password 설정을 할 것인지?)
A. yes
ㄴ 보안레벨은 어떻게 할 것인지? low : 0 / medium : 1 / strong : 2
ㄴ 선택한 보안레벨에 맞는 password 입력
Q. Do you wish to continue with the password provided?
A. yes로 했을 때 에러났음(권한 오류인듯함)
mysql에서 root 유저의 패스워드를 설정해서 해결함
Q. Remove anonymous users?
A. yes
Q. Disallow root login remotely? # (원격 로그인을 차단할것인지?)
A. No (추후 원격 로그인을 해야하기 때문에 No)
Q. Remove test database and access to it?
A. yes
Q. Reload privilege tables now?
A. yes
sudo mysql -u root -p # 비밀번호 입력하면 mysql 접속 가능
exit
모두 설치한 뒤 설정한 password로 접속 테스트를 해본 뒤 문제가 없다면 mysql 설치 완료!
4) PHP 설치
sudo apt install php-fpm php-mysql
php -v
* php-fpm 설치 이유
: php-fpm은 FastCGI의 하나로, 웹서버와 외부 프로그램의 상호작용을 도와주는 프로토콜입니다.
php-fpm을 이용하면 동적인 웹 페이지 구현이 가능하고
nginx의 경우, 아파치와는 다르게 따로 php-fpm을 설치하고 연동시키는 과정이 필요합니다.
php 설치하고 나오는 버전을 기억해두세요. 이후에 설정파일에서 버전을 입력해야 합니다.
이제 Nginx, Mysql, Php 설치가 모두 완료되었습니다.
2. EC2 서버 설정 및 Nginx와 Php 연동 테스트
EC2 인스턴스 내에 설정을 해주며
php 파일을 Nginx와 연동하여 웹 페이지에 띄어보는 테스트를 해보겠습니다!
1) phpinfo.php 파일 만들기
HTML 페이지 경로로 이동
cd /var/www/html
phpinfo.php 파일 생성
sudo vi phpinfo.php
<?php
phpinfo();
?>
vi를 사용해 php 파일을 생성해 들어가면 아무것도 작성되지 않는 파일이 나올텐데요.
여기서 i를 누르면 입력가능한 상태가 되어 입력이 가능해집니다. 그 상태에서 위와 같은 파일내용을 입력해준 뒤에
ESC 키를 눌러 명령상태로 돌아간 뒤 :wq 를 입력하고 엔터를 치면 php파일이 저장되게 됩니다.
(간단한 vi 편집기 명령어는 알아두시는 것이 편리합니다!)
[Linux] vi 편집기 사용법 및 명령어
셀 상에서 vi [파일명]을 입력하면 새로운 문서를 편집할 수 있는 환경이 만들어진다. vi의 세 가지 모드 1. 명령 모드 (command mode) vi 명령어를 통해 vi를 시작할 경우 실행되는 모드. 방향키를 통해
velog.io
2) Default 파일 수정하기
이제 nginx 의 파일을 설치한 php 버전에 맞게 수정해주겠습니다.
Nginx 기본 설정경로로 이동 후 default 파일 편집
cd /etc/nginx/sites-available
sudo vi default
default 파일에 들어가면 위와 같은 server 블록이 보입니다.
내용에 대해 간단히 설명하자면,
listen 80 은 80포트가 열려 있다는 의미입니다.
index는 웹에 접속시 처음 나오는 화면의 파일을 가리키고 root는 그 파일의 경로를 나타냅니다.
server_name은 간단히 말하면 웹 주소인데, 도메인을 연결할 때 수정해주겠습니다.
그 다음 location / 블록은 파일을 요청했을 때, 찾지 못하면 404를 보낸다는 의미입니다.
빨간 표시를 한 location php 블록은 처음에는 주석처리가 되어 있습니다.
이 부분의 주석을 해제하여 주세요. 그리고 php의 버전을 우리가 설치한 버전에 맞게 수정해주세요.
정리하자면 , 이 단계에서 해야 할 것은 default 파일의 php location 블록 주석 해제 및 버전에 맞게 수정하는 것입니다.
3) Nginx.conf 파일 수정
Nginx 기본 폴더로 이동하여 nginx.conf 파일을 열어주고
server_name_hash_bucket_size 64; 주석을 해제해줍니다.
sudo vi nginx.conf
4) Nginx 실행 후 페이지 접속
이제 설정파일에서 php 연동은 다 되었습니다.
Nginx 설정 파일을 건드렸기 때문에 Nginx 테스트 후 재시작해보겠습니다.
sudo nginx -t
sudo service nginx restart
그리고 EC2의 탄력 IP주소에 phpinfo.php uri를 덧붙여 접속하면
탄력IP/phpinfo.php 접속
위와 같은 phpinfo 파일이 웹 페이지를 통해 보여지게 됩니다.
잘 작동한다면 Nginx와 php 연동이 잘 확인된 것입니다!
3. 도메인 구입 및 연결, 리다이렉션 설정
하지만 웹 페이지에 접속할 때마다 탄력적 IP를 입력해서 접속할 수는 없겠죠?
따라서 IP대신 입력할 수 있는 도메인을 구입하여 연결해보겠습니다
1) 도메인 구입 및 DNS 레코드 수정
웹을 넘어 클라우드로. 가비아
그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브
www.gabia.com
저는 가비아에서 도메인을 구입하였습니다.
원하는 도메인을 입력하면, 추천 도메인이 뜨게 되고 마음에 드는 도메인을 선택하여 구매해줍니다.
보통 공부용이나 프로젝트의 API 서버 용으로는 저렴한 .shop 이나 .store를 사는 편인데
서비스용 웹사이트라면 .com .co.kr .kr 등이 더 적합할 것 같습니다. 가격은 대여기간에 따라 달라지니까 잘 고려해서 구매하시길 바랍니다.
도메인을 구입하면 My가비아 > 이용 중인 서비스 > 도메인 > DNS 관리툴로 들어가서 DNS 설정을 해주겠습니다
탄력적 IP와 도메인을 연결해주고, 개발에 필요한 dev 서브 도메인도 추가해주었습니다.
2) Nginx 서버설정파일 수정
nginx 의 default 파일에서 server_name에 구입한 도메인을 입력해줍니다.
cd /etc/nginx/sites-available
sudo vi default
3) Nginx 실행 후 접속 테스트
Nginx 파일을 수정했으니 다시 테스트후 재시작합니다.
sudo nginx -t
sudo service nginx restart
이제 도메인주소를 입력해도 접속이 가능해집니다!
4) 리다이렉션 설정
이제는 IP주소로 접속해도 도메인 주소로 리다이렉션될 수 있게 설정해보겠습니다.
Nginx 서버 설정경로로 이동해 default 파일에 리다이렉션용 서버블록을 생성해줍니다.
cd /etc/nginx/sites-available
sudo vi default
default 파일 내에 새로운 서버블록 생성
server {
# 포트번호
listen 80;
# EC2 인스턴스 IP주소
server_name 11.111.111.11;
# 리다이렉션 주소
return 301 http://[도메인]$request_uri;
}
파일 변경 뒤 Nginx test를 한 뒤 실행하는 것을 잊지 말고
sudo nginx -t
sudo service nginx restart
IP 주소로 접속해보면 도메인으로 리다이렉션되어 접속되는 것을 확인할 수 있습니다!
그럼 여기까지 EC2에 Nginx, Php, Mysql을 설치하고,
Nginx와 Php를 연동한 뒤,
도메인을 연결하여 리다이렉션 설정까지 소개해보았습니다.
다음 게시글에서는 dev 서브페이지를 만들어 연결하는 것과
너무 중요한!!! HTTPS 설정(SSL)을 적용하는 방법을 알아보겠습니다!!
'Infra' 카테고리의 다른 글
자동 배포 CI CD 파이프라인 구축기 : AWS S3 + Code deploy (0) | 2024.09.05 |
---|---|
AWS Lightsail 도입에 대한 고민 - Lightsail vs EC2 비교 (2) | 2024.08.26 |
[AWS] EC2 서버 구축하기 - (1) 인스턴스 생성하고 접속(Window) (0) | 2022.08.11 |