반응형

PHP와 nginx의 연동 

FastCGI를 사용해 PHP를 nginx와 연동해 보려고 합니다. 기본적으로 PHP는 FastCGI 프로코콜을 지원합니다.PHP는 스크립트를 처리하며 nginx와 socket으로 연동할 수 있습니다. 바로 PHP-FPM으로도 알려진 FastCGI 프로세스 관리자를 사용하면 됩니다.

PHP-FPM

PHP 프로세스를 관리하는 스크립트로서 nginx의 요청을 받은 후 스크립트를 수행합니다. 
  • PHP의 자동 데몬 프로세스화(백그라운드 프로세스로 전환)
  • chroot로 격리된 환경에서 스크립트를 수행
  • 로그개선, IP주소제한, Pool분리등

PHP 설치 및 빌드

공식문서 : www.php.net/manual/en/install.unix.nginx.php

다운로드 및 압축을 푼다

  • yum install libevent-devel libxml2-devel
  • wget www.php.net/distributions/php-7.4.14.tar.gz
  • tar xzf php-7.4.14.tar.gz

빌드과정을 수행한다

  • ./configure --enable-fpm --with-mysqli
    • 에러 발생 시 .. No package 'sqlite3' found
      • sudo yum -y install sqlite-devel 
  • make
  • make install

기본설정 파일을 복사한다

  • cp php.ini-development /usr/local/php/php.ini
  • cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
  • cp sapi/fpm/php-fpm /usr/local/bin

보안을 위해 php.ini 파일을 수정한다

  • vim /usr/local/php/php.ini
  • cgi.fix_pathinfo=0

php-fpm.conf 파일을 수정한다

vi /usr/local/etc/php-fpm.d/www.conf
  • user = www-data
  • group = www-data

php-fpm 실행

 /usr/local/sbin/php-fpm -c /usr/local/etc/php.ini --pid /usr/local/var/run/php-fpm.pid --fpm-config=/usr/local/etc/php-fpm.d/www.conf -D
  • -c /usr/local/etc/php.ini    #PHP 구성파일의 경로지정
  • --pid /usr/local/var/run/php-fpm.pid    #초기화 스크립트에서 프로세스를 제어하는 데 유용한 PID 파일의 경로지정
  • --fpm-config=/usr/local/etc/php-fpm.d/www.conf    #PHP-FPM이 특정 구성파일을 사용하도록 강제지정
  • -D    #PHP-FPM을 데몬화

Nginx 설정 수정

user www-data;

http {
	server {
    	listen 80;
        server_name localhost;
        
        location / {
            root html;
            index index.php index.html index.htm;
        }
        
        location ~* \.php$ {
            fastcgi_index   index.php;
            fastcgi_pass    127.0.0.1:9000;
            include         fastcgi_params;
            fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param   SCRIPT_NAME $fastcgi_script_name;
            fastcgi_param   PATH_INFO $fastcgi_script_name;
        }
    }
}

Nginx 실행

/usr/local/nginx/sbin/nginx  또는 /usr/local/nginx/sbin/nginx -s reload

 

반응형

+ Recent posts