이 글은 2년 이상 지난 이야기에요. 읽으실때 참고!
AWS EC2, Nginx, PHP-fpm 환경 구축 텍스트 가이드라인

근래에 작업이 전부 ec2를 이용해 Ubuntu 18.04 환경에 Nginx, PHP-fpm을 세팅하는 경우가 많아 개인 메모장에 정리해두었던 세팅 가이드라인을 여기에도 적어볼까합니다.

 

별도의 가이드 이미지 없이 텍스트 기반 가이드라인입니다.

 

가상 호스팅 세팅

AWS EC2 설정

1. AMI 선택: Ubuntu 18.04 LTS

2. 인스턴스 선택: t3a.nano (자율적으로 세팅, 개인적으로 소규모 웹서버엔 이만한 가성비 좋은 인스턴스가 없는듯)

3. 인스턴스 설정: Network, Subnet 확인. 설정중에 T2/T3 Unlimited 속성은 해제. (서버공격 받으면 인스턴스 연산량 증가로 요금폭탄터짐)

4. 스토리지 추가: 8Gib(최소) 사이즈로 General Purpose SSD를 생성. 디폴트가 30Gib로 되어있을텐데, 의외로 그만큼 쓸일이 없음. 이부분은 줄이는것은 불가능하고 늘리는거만 되니 처음엔 작게시작하자. 용량이늘면 그만큼 돈도 더내야함.

5. Security Group 선택: 기존에 쓰던 설정있으면 그거 쓰는게 좋음. 없으면 새로 만들던지 아니면 디폴트 값 이용하고 나중에 설정을 바꿔주면됩니다.

6. 키페어 선택: 이 또한 생성된 키페어에 연결할지, 아니면 이 인스턴스용으로 키를 따로 발급받을지 선택함.

 

 

Ubuntu 설정

1. ssh로 인스턴스에 접속: chmod 400 을 통해 키 보안등급을 높이고 터미널 혹은 putty를 통해 ssh -i 로 접속을 시도함.

$ chmod 400 key.pem

키파일 보안작업은 1회만 하면 됩니다.

$ ssh -i key.pem ubuntu@domain.com

domain.com에 인스턴스 주소 또는 Ellastic IP로 연결해놓은 도메인주소를 입력합니다.

 

2. apt 패키지 업데이트: nginx, php를 설치하기위한 선행작업

$ sudo apt update
$ sudo apt dist-upgrade

 

3. 서버 로케일 설정: 디폴트가 UTC+0:00 이므로 한국으로 바꿔준다.

$ sudo dpkg-reconfigure tzdata

방향키와 앤터를 이용해 순차적으로 Asia -> Seoul 찾아 앤터하면 로케일이 변경됩니다.

 

4. Nginx 설치

$ sudo apt install nginx

 

5. PHP 설치

$ sudo apt install php7.2
$ sudo apt install php7.2-fpm
$ sudo apt install php7.2-bcmath php7.2-mbstring php7.2-xml php7.2-zip php7.2-mysql

서버 운용시 필요한 PHP 모듈이 있으면 3번째 라인처럼 해당 모듈을 설치하면 됩니다. (Laravel에서 AWS S3 서버를 연동한다면 php7.2-gd 모듈도 설치해야함)

 

6. zip/unzip 설치: 일부 라이브러리, 모듈에서 사용됨

$ sudo apt install zip unzip

 

7. Nginx - PHP-fpm 연동

$ sudo nano /etc/nginx/sites-available/default

nginx 서버 설정 경로입니다. nano 에디터로 수정합니다. 각자 편하신 에디터 툴 이용하시면 됩니다.

# /etc/nginx/sites-available/default
 
...
 
index index.html index.htm index.php;
 
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
 
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
 
...

index 항목에 index.php 추가합니다.

그리고 아래에 location { ... } 구문을 추가해 PHP-fpm 모듈을 Nginx에 연동시킵니다.

수정이 완료되면 nano editor 기준으로 Ctrl+O(저장), Ctrl+X(나가기)를 통해 변경사항을 저장합니다. vi editor는 :wq로 저장 후 닫기를 해 변경사항을 반영할 수 있습니다.

$ sudo service nginx reload

마지막으로 Nginx 서비스 설정이 반영될 수 있도록 reload를 진행합니다.

 

8. 연동작업 확인

$ sudo nano /var/www/html/index.php

웹 서버 루트위치에 index.php 파일을 생성하고 안에 phpinfo()를 출력해봅니다.

<?php
phpinfo();

다음을 파일에 기록하고 저장 후 닫기를 합니다. 그리고 웹 서버의 주소로 로그인하면 php 정보페이지를 확인해 환경세팅을 마무리 합니다.

 

 

웹 서버 환경 세팅

호스팅 서버 환경 세팅과 더불어 실질적으로 서버를 활용할 때 추가로 세팅하는 몇가지에 대해 미리 설정을 해둘  수 도 있습니다.

 

업로드 용량 제한 변경

우선 php.ini의 설정을 바꿔줍니다.

$ sudo nano /etc/php/7.2/fpm/php.ini

nano editor는 Ctrl+w으로 키워드 검색을 할 수 있습니다. 검색을 통해 아래 값을 자신이 원하는 세팅으로 적절히 바꿔줍니다.

# /etc/php/7.2/php.ini
 
...
 
upload_max_filesize = 20M
 
...
 
post_max_size = 21M
 
...

post_max_size > upload_max_filesize 가 되도록 업로드 용량 사이즈를 조절하면 됩니다.

 

더불어 Nginx에서는 client_max_body_size도 PHP의 post_max_size와 같거나 크게 설정해주어야합니다.

sudo nano /etc/nginx/nginx.conf
# /etc/nginx/nginx.conf
 
...
 
http {
    client_max_body_size 21M;
    ...

http { ... } 구문의 맨 윗줄에 client_max_body_size를 설정해줍니다.

 

모든 설정 파일 수정이 끝나면 변경이 있었던 Nginx와 PHP-fpm 서비스에 대해 설정 reload를 실시합니다.

$ sudo service nginx reload
$ sudo service php7.2-fpm reload

 

D.2020-07-02 V.309