서버 설치 · 6 min read · Feb 03, 2026

Nginx, PHP 및 MariaDB (MySQL 대체) 설치 - LEMP - Ubuntu 15.10 (Wiley Werewolf)

Nginx (“engine x”라고 발음됨)은 무료, 오픈 소스, 고성능 HTTP 서버입니다. Nginx는 안정성, 풍부한 기능 세트, 간단한 구성 및 낮은 자원 소비로 잘 알려져 있습니다. 이 튜토리얼에서는 PHP 지원( PHP-FPM을 통해) 및 MariaDB( MySQL 대체)를 사용하여 Ubuntu 15.10 서버에 Nginx를 설치하는 방법을 보여줍니다. LEMP라는 용어는 다음을 의미합니다: Linux + Nginx + MySQL + PHP.

1 사전 참고

이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.1.100을 사용할 것입니다. 이러한 설정은 귀하의 경우 다를 수 있으므로 적절한 곳에서 교체해야 합니다.

2 MariaDB 설치

MySQL 대신 MariaDB를 설치할 것입니다. MariaDB는 원래 MySQL 창립자인 Monty Widenius가 유지 관리하는 MySQL 포크로, MySQL에 비해 속도 및 기능 개선이 있습니다. MariaDB를 설치하려면 다음을 실행하십시오:

sudo apt-get -y install mariadb-server mariadb-client

현재 MariaDB는 루트 사용자에 대한 비밀번호가 설정되어 있지 않습니다. mysql_secure_installation 명령을 실행하여 비밀번호를 구성하고 테스트 데이터베이스를 제거하십시오.

sudo mysql_secure_installation

다음 질문을 받게 됩니다:

Enter current password for root (enter for none): <-- press enter  
Set root password? [Y/n] <-- y  
New password: <-- Enter the new MariaDB root password here  
Re-enter new password: <-- Repeat the password  
Remove anonymous users? [Y/n] <-- y  
Disallow root login remotely? [Y/n] <-- y  
Reload privilege tables now? [Y/n] <-- y

3 Nginx 설치

Nginx는 Ubuntu 15.10의 패키지로 제공됩니다. 서버에 apache 웹 서버가 설치되어 있을 수 있으며, 이로 인해 충돌이 발생할 수 있습니다. apache가 실행되고 있지 않은지 확인하십시오:

ps aux | grep apache2

이 명령이 결과를 반환하지 않으면 Nginx 설치를 진행하십시오.

위의 명령이 일부 apache 프로세스를 보여주는 경우 apache를 제거하려면 다음 명령을 사용하십시오:

sudo systemctl stop apache2.service  
sudo systemctl disable apache2.service  
sudo apt-get remove apache2

이제 nginx를 설치할 수 있습니다.

sudo apt-get install nginx

그 후 Nginx를 시작하십시오:

sudo systemctl start nginx.service  
sudo systemctl enable nginx.service

웹 서버의 IP 주소 또는 호스트 이름을 브라우저에 입력하십시오(예: http://192.168.1.100), 그러면 다음 페이지가 표시됩니다:

Ubuntu Nginx 기본 페이지.

왜 그 페이지에 Nginx 대신 “Apache2”가 표시됩니까? 페이지의 텍스트는 실제로 실행 중인 웹 서버를 반영하지 않으며, 위의 페이지는 Apache와 Nginx가 사용하는 문서 루트 /var/www/html의 Ubuntu 기본 페이지일 뿐입니다. Nginx가 실제로 이 페이지를 제공하고 있는지 확인하려면 Firefox 네트워크 분석 콘솔에서 HTTP 헤더를 확인하거나:

Nginx http 헤더 확인.

쉘에서 nginx가 실행 중인지 확인하십시오:

ps aux | grep nginx

결과는 다음과 같이 nginx 프로세스를 보여야 합니다:

Nginx 프로세스 확인.

4 PHP5 설치

PHP-FPM을 통해 Nginx에서 PHP5를 작동시킬 수 있습니다. PHP-FPM( FastCGI 프로세스 관리자)은 모든 크기의 사이트, 특히 더 바쁜 사이트에 유용한 몇 가지 추가 기능이 있는 대체 PHP FastCGI 구현입니다. 다음과 같이 설치합니다:

sudo apt-get install php5-fpm

PHP-FPM은 /var/run/php5-fpm.sock 소켓에서 FastCGI 서버를 실행하는 데몬 프로세스입니다.

5 Nginx 구성

Nginx 구성은 /etc/nginx/nginx.conf 파일에 있으며, 이제 nano 편집기에서 엽니다:

sudo nano /etc/nginx/nginx.conf

구성은 이해하기 쉽습니다(자세한 내용은 여기에서 확인할 수 있습니다: http://wiki.nginx.org/NginxFullExamplehttp://wiki.nginx.org/NginxFullExample2)

먼저(선택 사항) keepalive_timeout을 합리적인 값으로 설정하십시오:

[...]  
    keepalive_timeout   2;  
[...]  

가상 호스트는 server {} 컨테이너에서 정의됩니다. 기본 vhost는 /etc/nginx/sites-available/default 파일에 정의되어 있습니다. 다음과 같이 수정합니다:

sudo nano /etc/nginx/sites-available/default
##  
# Nginx 구성 파일을 완전히 활용하기 위해 다음 URL를 참조하십시오.  
# http://wiki.nginx.org/Pitfalls  
# http://wiki.nginx.org/QuickStart  
# http://wiki.nginx.org/Configuration  
#  
# 일반적으로 이 파일을 다른 곳으로 이동하고 깨끗한 파일로 시작하는 것이 좋습니다.  
# 그러나 참조용으로 이 파일을 유지하십시오. 또는 sites-enabled에서 비활성화하십시오.  
#  
# 더 자세한 예는 /usr/share/doc/nginx-doc/examples/를 참조하십시오.  
##  
  
# 기본 서버 구성  
#  
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # SSL 구성  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # 참고: SSL 트래픽에 대해 gzip을 비활성화해야 합니다.  
 # 참조: https://bugs.debian.org/773332  
 #  
 # ssl_ciphers에 대해 읽어보아야 안전한 구성을 보장합니다.  
 # 참조: https://bugs.debian.org/765782  
 #  
 # ssl-cert 패키지로 생성된 자체 서명 인증서  
 # 프로덕션 서버에서는 사용하지 마십시오!  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # PHP를 사용하는 경우 index.php를 목록에 추가하십시오.  
 index index.php index.html index.htm index.nginx-debian.html;  
  
 server_name _;  
  
 location / {  
 # 먼저 요청을 파일로 제공하려고 시도한 다음  
 # 디렉토리로 제공하고, 마지막으로 404를 표시합니다.  
 try_files $uri $uri/ =404;  
 }  
  
 # 127.0.0.1:9000에서 수신 대기하는 FastCGI 서버에 PHP 스크립스를 전달합니다.  
 #  
 location ~ \.php$ {  
  include snippets/fastcgi-php.conf;  
   
  # php5-cgi만으로:  
  # fastcgi_pass 127.0.0.1:9000;  
  # php5-fpm으로:  
  fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
  
 # Apache의 문서 루트와 일치하는 경우 .htaccess 파일에 대한 액세스를 거부합니다.  
 #  
 #location ~ /\.ht {  
 # deny all;  
 #}  
}  
  
# example.com에 대한 가상 호스트 구성  
#  
# 이를 sites-available/의 다른 파일로 이동하고  
# sites-enabled/에 심볼릭 링크를 만들어 활성화할 수 있습니다.  
#  
#server {  
# listen 80;  
# listen [::]:80;  
#  
# server_name example.com;  
#  
# root /var/www/example.com;  
# index index.html;  
#  
# location / {  
# try_files $uri $uri/ =404;  
# }  
#}

servername ;는 이것을 기본 캐치올 vhost로 만듭니다(물론 여기에서 www.example.com과 같은 호스트 이름을 지정할 수도 있습니다).

index.php를 인덱스 라인에 추가했습니다. root /usr/share/nginx/html;는 문서 루트가 /usr/share/nginx/html 디렉토리임을 의미합니다.

PHP에 중요한 부분은 location ~ .php$ {} 구문입니다. 이를 활성화하려면 주석을 제거하십시오. PHP 위치 구문 내에서 “include snippets/fastcgi-php.conf;” 줄을 활성화하는 것이 제로 데이 익스플로잇을 방지하는 데 중요합니다(참조: http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHPhttp://forum.nginx.org/read.php?2,88845,page=3).

이제 파일을 저장하고 nginx를 다시 로드하십시오:

sudo service nginx reload

다음으로 /etc/php5/fpm/php.ini를 열어…

sudo nano /etc/php5/fpm/php.ini

… cgi.fix_pathinfo=0으로 설정하십시오:

[...]  
; cgi.fix_pathinfo는 CGI에 대한 *실제* PATH_INFO/PATH_TRANSLATED 지원을 제공합니다. PHP의  
; 이전 동작은 PATH_TRANSLATED를 SCRIPT_FILENAME으로 설정하고,  
; PATH_INFO가 무엇인지 이해하지 못하는 것이었습니다.  
; PATH_INFO에 대한 자세한 내용은 cgi 사양을 참조하십시오.  
; 이를 1로 설정하면 PHP CGI가 경로를 사양에 맞게 수정합니다.  
; 0으로 설정하면 PHP가 이전과 같이 동작합니다. 기본값은 1입니다.  
; 스크립트를 수정하여 PATH_TRANSLATED 대신 SCRIPT_FILENAME을 사용해야 합니다.  
; http://php.net/cgi.fix-pathinfo  
cgi.fix_pathinfo=0
[...]  

PHP-FPM을 다시 로드하십시오:

sudo service php5-fpm reload

이제 문서 루트 /var/www/html에 다음 PHP 파일을 생성하십시오:

sudo nano /var/www/html/info.php

이제 브라우저에서 해당 파일을 호출하십시오(예: http://192.168.1.100/info.php):

PHP-FPM 정보.

보시다시피, PHP5가 작동하고 있으며, 서버 API 줄에 표시된 대로 FPM/FastCGI를 통해 작동하고 있습니다. 아래로 스크롤하면 PHP5에서 이미 활성화된 모든 모듈을 볼 수 있습니다. MySQL은 거기에 나열되어 있지 않으므로 PHP5에서 MySQL 지원이 아직 없습니다.

6 PHP에서 MariaDB / MySQL 지원 받기

PHP에서 MySQL 지원을 받으려면 php5-mysqlnd 패키지를 설치할 수 있습니다. 애플리케이션에 필요할 수 있는 다른 PHP5 모듈도 설치하는 것이 좋습니다. 사용 가능한 PHP5 모듈을 다음과 같이 검색할 수 있습니다:

apt-cache search php5

필요한 모듈을 선택하고 다음과 같이 설치하십시오:

sudo apt-get install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl

APCu는 PHP 중간 코드를 캐싱하고 최적화하기 위한 무료 PHP opcode 캐셔입니다. eAccelerator 및 Xcache와 같은 다른 PHP opcode 캐셔와 유사합니다. PHP 페이지 속도를 높이기 위해 이러한 것 중 하나를 설치하는 것이 강력히 권장됩니다.

APC는 다음과 같이 설치할 수 있습니다:

sudo apt-get install php5-apcu

이제 PHP-FPM을 다시 로드하십시오:

sudo service php5-fpm reload

이제 브라우저에서 http://192.168.1.100/info.php를 다시 로드하고 모듈 섹션으로 스크롤하십시오. 이제 MySQL 모듈을 포함하여 많은 새로운 모듈을 찾아야 합니다:

PHP-FPM 정보 - 2부

7 PHP-FPM을 TCP 연결로 사용하기

기본적으로 PHP-FPM은 /var/run/php5-fpm.sock 소켓에서 수신 대기합니다. PHP-FPM을 TCP 연결로 사용할 수도 있습니다. 이렇게 하려면 /etc/php5/fpm/pool.d/www.conf를 열어…

sudo nano /etc/php5/fpm/pool.d/www.conf

… listen 줄을 다음과 같이 설정하십시오:

[...]  
;listen = /var/run/php5-fpm.sock  
listen = 127.0.0.1:9000  
[...]  

이렇게 하면 PHP-FPM이 IP 127.0.0.1(로컬호스트)의 포트 9000에서 수신 대기하게 됩니다. 시스템에서 사용 중이지 않은 포트를 사용해야 합니다.

그런 다음 PHP-FPM을 다시 로드하십시오:

sudo php5-fpm reload

다음으로 Nginx 구성 및 모든 vhosts를 살펴보고 fastcgi_pass unix:/var/run/php5-fpm.sock; 줄을 fastcgi_pass 127.0.0.1:9000;로 변경하십시오. 예를 들어 다음과 같이:

sudo nano /etc/nginx/sites-available/default
[...]  
 location ~ \.php$ {  
   include snippets/fastcgi-php.conf;  
  
   # php5-cgi만으로:  
   fastcgi_pass 127.0.0.1:9000;  
   # php5-fpm으로:  
   # fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
[...]  

마지막으로 Nginx를 다시 로드하십시오:

sudo service nginx reload

8 이 튜토리얼의 가상 머신 이미지 다운로드

이 튜토리얼은 VMWare 및 Virtualbox와 호환되는 ovf/ova 형식의 즉시 사용 가능한 가상 머신 이미지로 제공됩니다. 가상 머신 이미지는 다음 로그인 세부정보를 사용합니다:

SSH / 셸 로그인

사용자 이름: administrator
비밀번호: howtoforge

이 사용자는 sudo 권한이 있습니다.

MariaDB 로그인

사용자 이름: root
비밀번호: howtoforge

VM의 IP는 192.168.1.100이며, /etc/network/interfaces 파일에서 변경할 수 있습니다. 위의 모든 비밀번호를 변경하여 가상 머신을 보호하십시오.

9 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.