서버 설치 · 6 min read · Oct 13, 2025
Ubuntu 16.04 LTS에 PHP 7 및 MySQL 5.7 (LEMP)와 함께 Nginx 설치하기
Nginx (“engine x”로 발음됨)는 무료, 오픈 소스, 고성능 HTTP 서버입니다. Nginx는 안정성, 풍부한 기능 세트, 간단한 구성 및 낮은 자원 소비로 유명합니다. 이 튜토리얼에서는 PHP 7 지원(PHP-FPM을 통해) 및 MySQL 5.7 지원과 함께 Ubuntu 16.04 서버에 Nginx를 설치하는 방법을 보여줍니다 (LEMP = Linux + nginx (“ e ngine x”로 발음됨) + MySQL + PHP).
1 사전 노트
이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.1.100을 사용합니다. 이러한 설정은 귀하의 경우 다를 수 있으므로 적절한 곳에서 교체해야 합니다.
저는 이 튜토리얼의 모든 단계를 루트 권한으로 실행하고 있으므로 루트로 로그인되어 있는지 확인하십시오:
sudo -s2 MySQL 5.7 설치하기
MySQL을 설치하기 위해 다음을 실행합니다:
apt-get -y install mysql-server mysql-clientMySQL 루트 사용자에 대한 비밀번호를 제공하라는 메시지가 표시됩니다. 이 비밀번호는 root@localhost 사용자와 [email protected] 모두에 유효하므로 나중에 MySQL 루트 비밀번호를 수동으로 지정할 필요가 없습니다:
MySQL “root” 사용자에 대한 새 비밀번호: <– yourrootsqlpassword
MySQL “root” 사용자에 대한 비밀번호를 반복하십시오: <– yourrootsqlpassword

데이터베이스 서버를 보호하고 익명 사용자 및 테스트 데이터베이스를 제거하려면 mysql_secure_installation 명령을 실행하십시오.
mysql_secure_installation다음 질문이 표시됩니다:
root@server1:~# mysql_secure_installationMySQL 서버 배포를 보호하고 있습니다.사용자 root의 비밀번호를 입력하십시오: <-- MySQL 루트 비밀번호 입력VALIDATE PASSWORD PLUGIN을 사용하여 비밀번호를 테스트하고 보안을 강화할 수 있습니다. 비밀번호의 강도를 확인하고 사용자가 충분히 안전한 비밀번호만 설정할 수 있도록 합니다. VALIDATE PASSWORD 플러그인을 설정하시겠습니까?예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오: <-- 이 기능을 원하시면 y를 누르거나 그렇지 않으면 Enter를 누르십시오.
기존 비밀번호를 사용합니다.
루트 비밀번호를 변경하시겠습니까? ((예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : <-- Enter를 누르십시오... 건너뜁니다.
기본적으로 MySQL 설치에는 익명 사용자가 있으며, 이를 통해 누구나 사용자 계정을 생성하지 않고도 MySQL에 로그인할 수 있습니다. 이는 테스트 용도로만 의도되며 설치를 조금 더 원활하게 진행하기 위해서입니다.
생산 환경으로 이동하기 전에 이를 제거해야 합니다.익명 사용자를 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : <-- y
성공.
보통 루트는 'localhost'에서만 연결할 수 있어야 합니다. 이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.원격으로 루트 로그인을 허용하지 않으시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : <-- y
성공.기본적으로 MySQL에는 'test'라는 데이터베이스가 있으며, 누구나 접근할 수 있습니다. 이는 테스트 용도로만 의도되며, 생산 환경으로 이동하기 전에 제거해야 합니다.
테스트 데이터베이스 및 이에 대한 접근을 제거하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : <-- y
- 테스트 데이터베이스 삭제 중...
성공.- 테스트 데이터베이스에 대한 권한 제거 중...
성공.권한 테이블을 다시 로드하면 지금까지의 모든 변경 사항이 즉시 적용됩니다.권한 테이블을 지금 다시 로드하시겠습니까? (예를 원하시면 y|Y를 누르고, 아니오를 원하시면 다른 키를 누르십시오) : <-- y
성공.모두 완료되었습니다!이제 MySQL이 안전해졌습니다.
3 Nginx 설치하기
이미 Apache2를 설치한 경우, 먼저 다음 명령으로 제거한 후 Nginx를 설치하십시오:
service apache2 stop
update-rc.d -f apache2 remove
apt-get remove apache2Nginx는 Ubuntu 16.04용 패키지로 제공되며, 이를 설치할 수 있습니다.
apt-get -y install nginx그 후 Nginx를 시작합니다:
service nginx start웹 서버의 IP 주소 또는 호스트 이름을 브라우저에 입력하십시오 (예: http://192.168.1.100), 그러면 다음 페이지가 표시됩니다:

Ubuntu 16.04에서 기본 Nginx 문서 루트는 /var/www/html입니다.
4 PHP 7 설치하기
PHP-FPM을 통해 Nginx에서 PHP를 작동시킬 수 있습니다 (PHP-FPM (FastCGI Process Manager)은 모든 규모의 사이트, 특히 더 바쁜 사이트에 유용한 추가 기능이 있는 대체 PHP FastCGI 구현입니다). 다음과 같이 설치합니다:
apt-get -y install php7.0-fpmPHP-FPM은 /run/php/php7.0-fpm.sock 소켓에서 FastCGI 서버를 실행하는 데몬 프로세스입니다 (init 스크립트 php7.0-fpm 포함).
5 Nginx 구성하기
Nginx 구성은 /etc/nginx/nginx.conf에 있으며, 이제 이를 엽니다:
nano /etc/nginx/nginx.conf구성은 이해하기 쉽습니다 (여기에서 더 많은 정보를 배울 수 있습니다: http://wiki.nginx.org/NginxFullExample 및 여기: http://wiki.nginx.org/NginxFullExample2)
먼저 (선택 사항) keepalive_timeout을 합리적인 값으로 조정합니다:
[...]
keepalive_timeout 2;
[...]가상 호스트는 server {} 컨테이너에서 정의됩니다. 기본 vhost는 /etc/nginx/sites-available/default 파일에 정의되어 있습니다. 이를 다음과 같이 수정합시다:
nano /etc/nginx/sites-available/default[...]
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.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;
# php7.0-cgi만 사용하는 경우:
# fastcgi_pass 127.0.0.1:9000;
# php7.0-fpm을 사용하는 경우:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# Apache의 문서 루트와 일치하는 경우 .htaccess 파일에 대한 접근을 거부합니다
#
location ~ \/\.ht {
deny all;
}
}
[...]servername ;는 이를 기본 캐치올 vhost로 만듭니다 (물론 www.example.com과 같은 호스트 이름을 지정할 수도 있습니다).
root /var/www/html;는 문서 루트가 /var/www/html 디렉토리임을 의미합니다.
PHP에 중요한 부분은 location ~ .php$ {} 구문입니다. 이를 주석 해제하여 활성화합니다.
이제 파일을 저장하고 Nginx를 다시 로드합니다:
service nginx reload다음으로 /etc/php/7.0/fpm/php.ini를 엽니다…
nano /etc/php/7.0/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입니다.
; 스크립트를 SCRIPT_FILENAME을 사용하도록 수정해야 합니다.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]PHP-FPM을 다시 로드합니다:
service php7.0-fpm reload이제 문서 루트 /var/www/html에 다음 PHP 파일을 생성합니다:
nano /var/www/html/info.php이제 브라우저에서 해당 파일을 호출합니다 (예: http://192.168.1.100/info.php):

보시다시피, PHP 7이 작동하고 있으며, FPM/FastCGI를 통해 작동하고 있습니다. 서버 API 줄에서 확인할 수 있습니다. 아래로 스크롤하면 PHP에서 이미 활성화된 모든 모듈을 볼 수 있습니다. MySQL은 거기에 나열되어 있지 않으므로 PHP에서 MySQL 지원이 아직 없습니다.
6 PHP 7에서 MySQL 지원 받기
PHP에서 MySQL 지원을 받기 위해 php7.0-mysql 패키지를 설치할 수 있습니다. 애플리케이션에 필요할 수 있는 다른 PHP 모듈도 설치하는 것이 좋습니다. 다음과 같이 사용 가능한 PHP 모듈을 검색할 수 있습니다:
apt-cache search php7.0필요한 모듈을 선택하고 다음과 같이 설치합니다:
apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettextAPCu는 PHP 7과 함께 제공되는 PHP Opcache 모듈의 확장으로, APC 캐시를 지원하는 소프트웨어에 대한 호환성 기능을 추가합니다 (예: Wordpress 캐시 플러그인).
APCu는 다음과 같이 설치할 수 있습니다:
apt-get -y install php-apcu이제 PHP-FPM을 다시 로드합니다:
service php7.0-fpm reload이제 브라우저에서 http://192.168.1.100/info.php를 다시 로드하고 모듈 섹션으로 다시 스크롤하십시오. 이제 MySQL 모듈을 포함하여 많은 새로운 모듈을 찾아야 합니다:

7 PHP-FPM을 TCP 연결로 사용하기
기본적으로 PHP-FPM은 /var/run/php/php7.0-fpm.sock 소켓에서 수신 대기합니다. PHP-FPM이 TCP 연결을 사용하도록 설정하는 것도 가능합니다. 이를 위해 /etc/php/7.0/fpm/pool.d/www.conf를 엽니다…
nano /etc/php/7.0/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 (localhost)의 포트 9000에서 수신 대기하게 됩니다. 시스템에서 사용 중이지 않은 포트를 사용해야 합니다.
그런 다음 PHP-FPM을 다시 로드합니다:
php7.0-fpm reload다음으로 Nginx 구성 및 모든 vhost를 통해 fastcgi_pass unix:/ var/run/ php /php7.0-fpm.soc k; 줄을 fastcgi_pass 127.0.0.1:9000;로 변경합니다. 예를 들어 다음과 같이:
nano /etc/nginx/sites-available/default[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# php7.0-cgi만 사용하는 경우:
fastcgi_pass 127.0.0.1:9000;
# php7.0-fpm을 사용하는 경우:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
[...]마지막으로 Nginx를 다시 로드합니다:
service nginx reload그게 다입니다. Nginx LEMP 서버가 설치되었습니다.
8 링크
- nginx: http://nginx.net/
- nginx 위키: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Ubuntu: http://www.ubuntu.com/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.