nginx와 FastCGI를 이용한 PHP 구축 방법은 무엇인가요?
💡 요약 정리
- nginx에서 PHP를 사용하려면 php-fpm(FastCGI Process Manager)을 통한 연동이 필요합니다.
- php는 5.3.3 버전 이상이어야 --enable-fpm 옵션을 사용할 수 있습니다.
- 설정 순서는 MySQL 설치 → PHP 컴파일 → php-fpm 설정 → nginx 설치 및 설정 연동 → 테스트입니다.
- nginx와 php-fpm 서비스를 연동시키기 위해서는 /etc/init.d/nginx에 시작/종료 스크립트를 추가해야 합니다.
- phpinfo 페이지를 이용해 설정이 정상적으로 적용되었는지 확인합니다.
1. mysql 설치
(별도 명령어 생략)
2. php 설치
이전 버전의 PHP는 fpm 패치를 적용해야 하지만, php 5.3.3 이후 버전부터는 php-fpm이 내장되어 있어 --enable-fpm 옵션만 추가해 설치하면 됩니다.
php 5.3.3 이전 버전 사용 시에는 다음 페이지를 참고해 패치를 받아 설치합니다. http://php-fpm.org/download/
[root@localhost src]# tar xvzfp php-5.3.6.tar.gz
[root@localhost src]# cd php-5.3.6
[root@localhost php-5.3.6]# ./configure --prefix=/usr/local/php_fpm --enable-fpm --with-openssl --with-mysql=/usr/local/mysql
[root@localhost php-5.3.6]# make
[root@localhost php-5.3.6]# make test
[root@localhost php-5.3.6]# make install
3. php-fpm.conf 파일 수정
[root@localhost php-5.3.6]# cd /usr/local/php_fpm/etc/
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
[root@localhost etc]# vi php-fpm.conf
다음 항목의 주석을 제거합니다:
listen.owner = nobody
listen.group = nobody
listen.mode = 0666
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
rlimit_files = 1024
4. php-fpm 데몬 실행 및 테스트
[root@localhost etc]# /usr/local/php_fpm/sbin/php-fpm
[root@localhost etc]# ps ax | grep php-fpm
6387 ? Ss 0:00 php-fpm: master process (/usr/local/php_fpm/etc/php-fpm.conf)
6388 ? S 0:00 php-fpm: pool www
6389 ? S 0:00 php-fpm: pool www
6390 ? S 0:00 php-fpm: pool www
6391 ? S 0:00 php-fpm: pool www
6392 ? S 0:00 php-fpm: pool www
6393 ? S 0:00 php-fpm: pool www
6394 ? S 0:00 php-fpm: pool www
6395 ? S 0:00 php-fpm: pool www
6396 ? S 0:00 php-fpm: pool www
6397 ? S 0:00 php-fpm: pool www
6398 ? S 0:00 php-fpm: pool www
6399 ? S 0:00 php-fpm: pool www
6400 ? S 0:00 php-fpm: pool www
6401 ? S 0:00 php-fpm: pool www
6402 ? S 0:00 php-fpm: pool www
6403 ? S 0:00 php-fpm: pool www
6404 ? S 0:00 php-fpm: pool www
6405 ? S 0:00 php-fpm: pool www
6406 ? S 0:00 php-fpm: pool www
6407 ? S 0:00 php-fpm: pool www
6410 pts/1 R+ 0:00 grep php-fpm
5. nginx에 필요한 패키지 설치
[root@localhost src]# yum install gcc pcre-devel bzip2-devel openssl-devel
6. nginx 설치
[root@localhost src]# tar xvzfp nginx-1.0.5.tar.gz
[root@localhost src]# cd nginx-1.0.5
[root@localhost nginx-1.0.5]# ./configure --prefix=/usr/local/nginx
nginx 컴파일 로그 중 주요 확인 정보:
checking for OS
+ Linux 2.6.18-238.12.1.el5xen x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.1.2 20080704 (Red Hat 4.1.2-50)
...
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ md5: using system crypto library
+ sha1: using system crypto library
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http fastcgi temporary files: "fastcgi_temp"
[root@localhost nginx-1.0.5]# make
[root@localhost nginx-1.0.5]# make install
7. nginx 실행 스크립트 생성
[root@localhost nginx-1.0.5]# vi /etc/init.d/nginx
상세 스크립트는 원본 그대로 유지하며, PHP-FPM과 함께 시작/종료되도록 구성되어 있습니다.
8. nginx와 PHP 연동 설정
[root@localhost nginx-1.0.5]# vi /usr/local/nginx/conf/nginx.conf
다음 블록의 주석을 해제합니다:
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
9. 서비스 시작 및 php-fpm 자동 연동 설정
[root@localhost nginx-1.0.5]# /etc/init.d/nginx start
[root@localhost nginx-1.0.5]# /usr/local/php_fpm/sbin/php-fpm
nginx 시작 시 php-fpm도 자동 실행되도록 스크립트를 수정합니다:
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
/usr/local/php_fpm/sbin/php-fpm
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
killall php-fpm
return $retval
}
[root@localhost nginx-1.0.5]# /etc/init.d/nginx restart
10. phpinfo 확인
php 동작 확인을 위해 phpinfo를 작성합니다.
[root@localhost nginx-1.0.5]# cd /usr/local/nginx/html/
[root@localhost html]# cat index.php
<?php
phpinfo();
?>
웹 브라우저에서 해당 파일을 확인하세요.
11. htm/html 확장자에서 PHP 코드 실행 허용
php-fpm.conf 파일에서 다음 설정을 변경해야 합니다.
; Default Value: .php
security.limit_extensions = .php .php3 .php4 .php5 .htm .html
변경 후 php-fpm 데몬을 재시작합니다.