서버 설정 · 4 min read · Jan 31, 2026
CentOS 6.2에서 PHP5 (및 PHP-FPM) 및 MySQL 지원으로 Nginx 설치하기 - 2페이지
5 PHP5 설치하기
우리는 PHP-FPM을 통해 nginx에서 PHP5를 작동시킬 수 있습니다 (PHP-FPM (FastCGI 프로세스 관리자)은 모든 규모의 사이트, 특히 바쁜 사이트에 유용한 몇 가지 추가 기능이 있는 대체 PHP FastCGI 구현입니다). 다음과 같이 MySQL을 PHP 스크립트에서 사용하려면 php-mysql과 같은 php-cli 및 일부 PHP5 모듈과 함께 php-fpm을 설치할 수 있습니다:
yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy그런 다음 /etc/php.ini를 열고 cgi.fix_pathinfo=0으로 설정합니다:
vi /etc/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://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |
(이렇게 해야 하는 이유를 알아보려면 http://wiki.nginx.org/Pitfalls를 읽어보세요.)
또한, 다음과 같은 오류를 피하기 위해
[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): 시스템의 시간대 설정에 의존하는 것은 안전하지 않습니다. date.timezone 설정 또는 date_default_timezone_set() 함수를 사용해야 합니다. 이러한 방법 중 하나를 사용했지만 여전히 이 경고가 발생하는 경우, 시간대 식별자를 잘못 입력했을 가능성이 높습니다. /usr/share/nginx/html/info.php의 2행에서 'CEST/2.0/DST'에 대해 'Europe/Berlin'을 선택했습니다.… /var/log/php-fpm/www-error.log에서 PHP 스크립트를 브라우저에서 호출할 때, /etc/php.ini에서 date.timezone을 설정해야 합니다:
| [...] [Date] ; 날짜 함수에서 사용하는 기본 시간대를 정의합니다 ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone = "Europe/Berlin" [...] |
시스템에 대한 올바른 시간대를 확인하려면 다음을 실행하십시오:
cat /etc/sysconfig/clock[root@server1 nginx]# cat /etc/sysconfig/clock
ZONE="Europe/Berlin"
[root@server1 nginx]#다음으로 php-fpm의 시스템 시작 링크를 생성하고 시작합니다:
chkconfig --levels 235 php-fpm on
/etc/init.d/php-fpm startPHP-FPM은 포트 9000에서 FastCGI 서버를 실행하는 데몬 프로세스입니다 (init 스크립트 /etc/init.d/php-fpm).
6 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 4; [...] keepalive_timeout 2; [...] |
가상 호스트는 server {} 컨테이너에서 정의됩니다. 기본 vhost (또한 /etc/nginx/nginx.conf에 있음)를 다음과 같이 수정합시다:
| [...] server { listen 80; server_name _; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # 서버 오류 페이지를 정적 페이지 /50x.html로 리디렉션 # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # 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; root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Apache의 문서 루트와 nginx의 문서 루트가 일치하는 경우 .htaccess 파일에 대한 접근 거부 # location ~ /\.ht { deny all; } } [...] |
servername ;는 이것을 기본 catchall vhost로 만듭니다 (물론 www.example.com과 같은 호스트 이름을 여기 지정할 수도 있습니다).
location / 부분에서 index.php를 인덱스 라인에 추가했습니다. root /usr/share/nginx/html;는 문서 루트가 /usr/share/nginx/html 디렉토리임을 의미합니다.
PHP에 중요한 부분은 location ~ .php$ {} 구문입니다. 이를 활성화하려면 주석을 제거하십시오. root 라인을 웹 사이트의 문서 루트로 변경하십시오 (예: root /usr/share/nginx/html;). fastcgi_param 라인을 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;로 변경해야 합니다. 그렇지 않으면 PHP 인터프리터가 브라우저에서 호출하는 PHP 스크립트를 찾지 못합니다 ( $document_root는 /usr/share/nginx/html로 변환됩니다. 이는 우리가 문서 루트로 설정한 것입니다).
기본적으로 PHP-FPM은 127.0.0.1의 포트 9000에서 수신 대기하므로, nginx에 fastcgi_pass 127.0.0.1:9000;로 127.0.0.1:9000에 연결하도록 지시합니다. PHP-FPM이 Unix 소켓을 사용하도록 설정하는 것도 가능합니다 - 이는 7장에서 설명하겠습니다.
이제 파일을 저장하고 nginx를 다시 로드합니다:
/etc/init.d/nginx reload이제 문서 루트 /usr/share/nginx/html에 다음 PHP 파일을 생성합니다…
vi /usr/share/nginx/html/info.php| |
이제 브라우저에서 해당 파일을 호출합니다 (예: http://192.168.0.100/info.php):

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

7 PHP-FPM을 Unix 소켓 사용하기
기본적으로 PHP-FPM은 127.0.0.1의 포트 9000에서 수신 대기하고 있습니다. TCP 오버헤드를 피하기 위해 PHP-FPM이 Unix 소켓을 사용하도록 설정할 수도 있습니다. 이를 위해 /etc/php-fpm.d/www.conf를 열고…
vi /etc/php-fpm.d/www.conf… listen 라인을 다음과 같이 변경합니다:
| [...] ;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock [...] |
그런 다음 PHP-FPM을 재시작합니다:
/etc/init.d/php-fpm restart다음으로 nginx 구성 및 모든 vhosts를 확인하고 fastcgi_pass 127.0.0.1:9000; 라인을 fastcgi_pass unix:/tmp/php5-fpm.sock;로 변경합니다. 예를 들어 다음과 같이:
vi /etc/nginx/nginx.conf| [...] location ~ \.php$ { try_files $uri =404; root /usr/share/nginx/html; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } [...] |
마지막으로 nginx를 다시 로드합니다:
/etc/init.d/nginx reload8 링크
- nginx: http://nginx.org/
- nginx 위키: http://wiki.nginx.org/
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- CentOS: http://www.centos.org/
저자 소개
Falko Timme는 Timme Hosting(초고속 nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 주요 유지 관리자(2005년부터)이며 ISPConfig의 핵심 개발자 중 한 명(2000년부터)입니다. 그는 또한 O’Reilly의 “Linux 시스템 관리” 책에 기여했습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.