서버 설치 · 4 min read · Jan 23, 2026
Scientific Linux 6.3에서 PHP5(및 PHP-FPM) 및 MySQL 지원으로 Nginx 설치하기 - 2페이지
5 PHP5 설치하기
Nginx에서 PHP5를 PHP-FPM을 통해 작동시킬 수 있습니다(PHP-FPM(FastCGI Process Manager)은 모든 규모의 사이트, 특히 바쁜 사이트에 유용한 몇 가지 추가 기능이 있는 대체 PHP FastCGI 구현입니다). 다음과 같이 php-fpm과 php-cli 및 MySQL을 PHP 스크립트에서 사용하려면 필요한 php-mysql과 같은 일부 PHP5 모듈을 함께 설치할 수 있습니다:
yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidyAPC는 PHP 중간 코드를 캐싱하고 최적화하기 위한 무료 오픈 PHP opcode 캐셔입니다. 이는 eAccelerator 및 Xcache와 같은 다른 PHP opcode 캐셔와 유사합니다. PHP 페이지 속도를 높이기 위해 이러한 것 중 하나를 설치하는 것이 강력히 권장됩니다.
APC는 다음과 같이 설치할 수 있습니다:
yum install php-pecl-apc그런 다음 /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'을 선택했습니다.… 브라우저에서 PHP 스크립트를 호출할 때 /var/log/php-fpm/www-error.log에서 발생하는 경우, /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 서버를 실행하는 데몬 프로세스입니다(초기 스크립트 /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; [...] |
가상 호스트는 /etc/nginx/conf.d 디렉토리의 server {} 컨테이너에 정의됩니다. 기본 vhost( /etc/nginx/conf.d/default.conf)를 다음과 같이 수정합시다:
vi /etc/nginx/conf.d/default.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$ { root /usr/share/nginx/html; try_files $uri =404; 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 ;는 이를 기본 캐치올 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;). 0-day 익스플로잇을 방지하기 위해 try_files $uri =404; 라인을 추가했습니다( http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP 및 http://forum.nginx.org/read.php?2,88845,page=3 참조). 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 reload다음으로 nginx 구성 및 모든 vhost를 확인하고 fastcgi_pass 127.0.0.1:9000; 라인을 fastcgi_pass unix:/tmp/php5-fpm.sock;로 변경합니다. 예를 들어 다음과 같이:
vi /etc/nginx/conf.d/default.conf| [...] location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; 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/
- Scientific Linux: https://www.scientificlinux.org/
저자 소개
Falko Timme는 Timme Hosting(초고속 nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 주요 유지 관리자(2005년부터)이며 ISPConfig의 핵심 개발자 중 한 명(2000년부터)입니다. 그는 또한 O’Reilly의 “Linux System Administration” 책에 기여했습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.