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
Copy
키파일 보안작업은 1회만 하면 됩니다.
ssh -i key.pem ubuntu@domain.com
Copy
domain.com
에 인스턴스 주소 또는 Ellastic IP로 연결해놓은 도메인주소를 입력합니다.
2. apt 패키지 업데이트: nginx, php를 설치하기위한 선행작업
$ sudo apt update
$ sudo apt dist-upgrade
Copy
$ sudo dpkg-reconfigure tzdata
Copy
방향키와 앤터를 이용해 순차적으로 Asia -> Seoul 찾아 앤터하면 로케일이 변경됩니다.
4. Nginx 설치
$ sudo apt install nginx
Copy
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
Copy
서버 운용시 필요한 PHP 모듈이 있으면 3번째 라인처럼 해당 모듈을 설치하면 됩니다. (Laravel에서 AWS S3 서버를 연동한다면 php7.2-gd
모듈도 설치해야함)
6. zip/unzip 설치: 일부 라이브러리, 모듈에서 사용됨
$ sudo apt install zip unzip
Copy
7. Nginx - PHP-fpm 연동
$ sudo nano /etc/nginx/sites-available/default
Copy
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;
}
...
Copy
index
항목에 index.php
추가합니다.
그리고 아래에 location { ... }
구문을 추가해 PHP-fpm 모듈을 Nginx에 연동시킵니다.
수정이 완료되면 nano editor 기준으로 Ctrl+O
(저장), Ctrl+X
(나가기)를 통해 변경사항을 저장합니다. vi editor는 :wq
로 저장 후 닫기를 해 변경사항을 반영할 수 있습니다.
$ sudo service nginx reload
Copy
마지막으로 Nginx 서비스 설정이 반영될 수 있도록 reload
를 진행합니다.
8. 연동작업 확인
$ sudo nano /var/www/html/index.php
Copy
웹 서버 루트위치에 index.php
파일을 생성하고 안에 phpinfo()
를 출력해봅니다.
<?php
phpinfo();
Copy
다음을 파일에 기록하고 저장 후 닫기를 합니다. 그리고 웹 서버의 주소로 로그인하면 php 정보페이지를 확인해 환경세팅을 마무리 합니다.
웹 서버 환경 세팅
호스팅 서버 환경 세팅과 더불어 실질적으로 서버를 활용할 때 추가로 세팅하는 몇가지에 대해 미리 설정을 해둘 수 도 있습니다.
업로드 용량 제한 변경
우선 php.ini
의 설정을 바꿔줍니다.
$ sudo nano /etc/php/7.2/fpm/php.ini
Copy
nano editor는 Ctrl+w
으로 키워드 검색을 할 수 있습니다. 검색을 통해 아래 값을 자신이 원하는 세팅으로 적절히 바꿔줍니다.
# /etc/php/7.2/php.ini
...
upload_max_filesize = 20M
...
post_max_size = 21M
...
Copy
post_max_size
> upload_max_filesize
가 되도록 업로드 용량 사이즈를 조절하면 됩니다.
더불어 Nginx에서는 client_max_body_size
도 PHP의 post_max_size
와 같거나 크게 설정해주어야합니다.
sudo nano /etc/nginx/nginx.conf
Copy
# /etc/nginx/nginx.conf
...
http {
client_max_body_size 21M;
...
Copy
http { ... }
구문의 맨 윗줄에 client_max_body_size
를 설정해줍니다.
모든 설정 파일 수정이 끝나면 변경이 있었던 Nginx와 PHP-fpm 서비스에 대해 설정 reload를 실시합니다.
$ sudo service nginx reload
$ sudo service php7.2-fpm reload
Copy