서버 설치 · 4 min read · Dec 31, 2025
Debian Squeeze에서 PHP5 및 MySQL 지원으로 Nginx 설치하기
Debian Squeeze에서 PHP5 및 MySQL 지원으로 Nginx 설치하기
버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요
Nginx(발음: “엔진 엑스”)는 무료이며 오픈 소스인 고성능 HTTP 서버입니다. Nginx는 안정성, 풍부한 기능 세트, 간단한 구성 및 낮은 자원 소비로 유명합니다. 이 튜토리얼에서는 PHP5 지원(빠른 CGI를 통해) 및 MySQL 지원과 함께 Debian Squeeze 서버에 Nginx를 설치하는 방법을 보여줍니다.
이것이 당신에게 작동할 것이라는 보장은 하지 않습니다!
1 사전 참고
이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.0.100을 사용합니다. 이러한 설정은 귀하의 경우 다를 수 있으므로 적절한 곳에서 교체해야 합니다.
2 MySQL 5 설치하기
MySQL을 설치하기 위해 다음 명령어를 실행합니다:
apt-get install mysql-server mysql-clientMySQL root 사용자에 대한 비밀번호를 제공하라는 메시지가 표시됩니다. 이 비밀번호는 사용자 root@localhost 및 [email protected]에 유효하므로 나중에 MySQL root 비밀번호를 수동으로 지정할 필요가 없습니다:
MySQL “root” 사용자에 대한 새 비밀번호: <– yourrootsqlpassword
MySQL “root” 사용자에 대한 비밀번호 반복: <– yourrootsqlpassword
3 Nginx 설치하기
Nginx는 Debian Squeeze용 패키지로 제공되며, 다음과 같이 설치할 수 있습니다:
apt-get install nginx그 후 nginx를 시작합니다:
/etc/init.d/nginx start기본 nginx 문서 루트는 /var/www이며, 아직 존재하지 않으므로 다음과 같이 생성해야 합니다:
mkdir /var/www
chown www-data:www-data /var/www웹 서버의 IP 주소 또는 호스트 이름을 브라우저에 입력합니다(예: http://192.168.0.100). 그러면 다음 페이지가 표시됩니다:

/var/www에 인덱스 페이지가 없기 때문에 403 금지 오류가 발생합니다.
4 PHP5 설치하기
PHP5를 nginx에서 FastCGI를 통해 작동하게 만들 수 있습니다. 다행히도 Debian Squeeze는 FastCGI가 활성화된 PHP5 패키지를 제공하며, 이를 다음과 같이 설치합니다(여기에는 MySQL을 PHP 스크립트에서 사용하려면 필요한 php5-mysql과 같은 PHP5 모듈도 포함됩니다):
apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl그런 다음 /etc/php5/cgi/php.ini를 열고 cgi.fix_pathinfo=1 줄의 주석을 제거합니다:
vi /etc/php5/cgi/php.ini| [...] ; 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=1 [...] |
Debian Squeeze에는 독립 실행형 FastCGI 데몬 패키지가 없으므로 lighttpd의 spawn-fcgi 프로그램을 사용합니다. lighttpd를 다음과 같이 설치합니다:
apt-get install lighttpd포트 80이 이미 사용 중이라는 오류 메시지가 표시됩니다:
Starting web server: lighttpd2011-02-24 01:43:18: (network.c.358) can't bind to port: 80 Address already in use
failed!
invoke-rc.d: initscript lighttpd, action "start" failed.nginx가 이미 포트 80에서 수신 대기 중이기 때문에 이렇게 되어야 합니다. 다음 명령어를 실행하여
update-rc.d -f lighttpd removelighttpd가 부팅 시 시작되지 않도록 합니다.
lighttpd를 설치한 이유는 패키지에 포함된 단 하나의 프로그램인 /usr/bin/spawn-fcgi가 필요하기 때문입니다. FastCGI 프로세스를 시작하는 데 사용할 수 있습니다. 다음 명령어를 실행하여
spawn-fcgi --help자세한 내용을 확인하세요.
localhost에서 포트 9000을 수신 대기하고 www-data 사용자 및 그룹으로 실행되는 PHP FastCGI 데몬을 시작하기 위해 다음 명령어를 실행합니다:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid물론 시스템을 부팅할 때마다 이 명령어를 수동으로 입력하고 싶지는 않으므로, 시스템이 부팅 시 자동으로 명령어를 실행하도록 하려면 /etc/rc.local을 열고…
vi /etc/rc.local… 파일의 끝(종료 라인 이전)에 다음 명령어를 추가합니다:
| [...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid [...] |
5 Nginx 구성하기
nginx 구성은 /etc/nginx/nginx.conf에 있으며, 지금 열어보겠습니다:
vi /etc/nginx/nginx.conf구성은 이해하기 쉽습니다(여기에서 더 많은 내용을 배울 수 있습니다: http://wiki.codemongers.com/NginxFullExample 및 http://wiki.codemongers.com/NginxFullExample2)
먼저(선택 사항) 작업자 프로세스 수를 늘리고 keepalive_timeout을 합리적인 값으로 설정합니다:
| [...] worker_processes 5; [...] keepalive_timeout 2; [...] |
가상 호스트는 server {} 컨테이너에서 정의됩니다. 기본 vhost는 /etc/nginx/sites-available/default 파일에 정의되어 있습니다. 이를 다음과 같이 수정합니다:
vi /etc/nginx/sites-available/default| [...] server { listen 80; ## ipv4 수신 대기 listen [::]:80 default ipv6only=on; ## ipv6 수신 대기 server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www; index index.php index.html index.htm; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } #error_page 404 /404.html; # 서버 오류 페이지를 정적 페이지 /50x.html로 리디렉션 # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /var/www/nginx-default; #} # 127.0.0.1:80에서 수신 대기하는 Apache에 PHP 스크립스를 프록시 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # 127.0.0.1:9000에서 수신 대기하는 FastCGI 서버에 PHP 스크립스를 전달 # location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } # Apache의 문서 루트와 nginx의 문서 루트가 일치하는 경우 .htaccess 파일에 대한 접근 거부 # location ~ /\.ht { deny all; } } [...] |
servername ;는 이를 기본 catchall vhost로 만듭니다(물론 www.example.com과 같은 호스트 이름을 여기 지정할 수도 있습니다).
location / 부분에서 index.php를 인덱스 라인에 추가했습니다. root /var/www;는 문서 루트가 /var/www 디렉토리임을 의미합니다.
PHP에 중요한 부분은 location ~ .php$ {} 구문입니다. 이를 활성화하려면 주석을 제거하세요. fastcgi_param 라인을 fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;로 변경해야 합니다(귀하의 vhost의 문서 루트로 /var/www를 교체) 그렇지 않으면 PHP 인터프리터가 브라우저에서 호출하는 PHP 스크립트를 찾지 못합니다.
include와 fastcgi_params 사이에 공백이 있는지 확인하세요. 기본 파일에서는 이 부분이 하나의 단어로 작성되어 있어 버그입니다.
이제 파일을 저장하고 nginx를 재시작합니다:
/etc/init.d/nginx restart이제 문서 루트 /var/www에 다음 PHP 파일을 생성합니다:
vi /var/www/info.php| |
이제 브라우저에서 해당 파일을 호출합니다(예: http://192.168.0.100/info.php):

보시다시피 PHP5가 작동하고 있으며, Server API 줄에 표시된 대로 FastCGI를 통해 작동하고 있습니다. 아래로 스크롤하면 MySQL 모듈을 포함하여 PHP5에서 이미 활성화된 모든 모듈을 볼 수 있습니다:

6 링크
- nginx: http://nginx.net/
- nginx 위키: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- MySQL: http://www.mysql.com/
- Debian: http://www.debian.org/
저자 소개
Falko Timme는 Timme Hosting(초고속 nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 수석 유지 관리자(2005년부터)이며 ISPConfig의 핵심 개발자 중 한 명(2000년부터)입니다. 그는 또한 O’Reilly의 “Linux System Administration” 책에 기여했습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.