반응형

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

 

반응형
반응형

설정 버전 상세 확인

다음의 명령을 통해 상세한 버전 및 모듈에 대해서 확인 가능합니다.

/usr/local/nginx/sbin/nginx -V

 

설정 파일 테스트

설정 파일의 유효성을 테스트를 통해 잘못된 부분이 없는지 확인합니다.

/usr/local/nginx/sbin/nginx/ -t

 

운영중일 때 교체하는 법 1

새 파일을 생성 후 테스트 하고, 교체 후 업데이트 하도록 합니다. master 프로세스의 PID 변경없이 가능합니다.

  • /usr/local/nginx/sbin/nginx -t -c /home/anybody/test.conf
  • cp -i /home/anybody/test.conf /usr/local/nginx/conf/nginx.conf
  • /usr/local/nginx/sbin/nginx -s reload

 

운영중일 때 교체하는 법 2

새 파일을 생성 후 테스트 하고, 교체 후 kill 명령어를 수행합니다.

  • /usr/local/nginx/sbin/nginx -t -c /home/anybody/test.conf
  • cp -i /home/anybody/test.conf /usr/local/nginx/conf/nginx.conf
  • master 프로세스의 PID를 확인한다.
  • kill -USR2 {PID} 명령으로 master 프로세스에게 USR2(12)-시그널을 보낸다.
  • kill -WINCH {PID} 명령으로 master 프로세스에게 WINCH(28)- 시그널을 보낸다.
  • kill -QUIT {PID} 명령으로 master 프로세스에게 WINCH(28)- 시그널을 보낸다.

 

반응형
반응형

설정 파일 목록

Centos에 nginx를 설치하게되면 /usr/local/nginx/conf에 설정파일들이 위치하게 됩니다.

파일명 설명
nginx.conf 웹 서버의 기본 구성
mime.types 파일 확장자와 연관된 MIME 타입의 목록
fastcgi_params Fast CGI 관련 구성
proxy.conf 프록시 관련 구성
sites.conf nginx로 제공되는 웹 사이트(v호스트) 구성, 도메인 단위로 분리하기를 권장

 

Base-Module

nginx는 기본적으로 master 프로세스와 worker 프로세스로 동작하기 때문에 기본적인 동작과 설정은 이해할 필요가 있습니다. nginx의 기본적인 기능들을 정의하도록 지시어를 제공하고 크게 3가지로 분류합니다.

  • core-module : 프로세스 관리나 보안같은 필수 기능 및 지시어로 이루어져있다.
    • master_process {on|off};
    • thread_pool {name} threads={number} max_queue={number};
    • worker_processes {number | auto};
  • event-module : 네트워크 기능의 내부 동작 방식을 구성한다.
    • use {select | poll | epoll | kqueue | rtsig | /dev/poll | eventport}
  • configuration-module : 구성을 외부 파일에서 가져와 포함시킨다.

 

꼭 확인해야 할 설정값들

  • user root root;
    • 파일시스템 전체 권한을 nginx에 부여하기 때문에 보안상 취약함
  • worker_processes 1;
    • 멀티코어 환경에서 CPU의 코어1개로 실행됨을 의미한다. auto로 하거나 코어수에 맞춘다.
  • worker_priority 0;
    • 시스템의 다른 프로세스 실행순서를 고려하여 설정하라. -20~19  사이로 설정 가능하며, 커널프로세스가 -5의 우선순위를 갖기 때문에 더 낮은 값은 설정하면 안 된다.
  • log_not_found on;
    • 404 errors 로그를 남길 것인지 아닌지 지정한다. 쓸데없는 로그가 남을 수 있기 때문에 주의해야 한다.
  • worker_connections 1024;
    • worker 프로세스의 수와 함께 서버가 동시에 수용할 수 있는 연결 수를 결정한다. worker당 연결수이다.

 

기본 nginx.conf 예시

더보기

http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    server {

        listen 80;

        server_name localhost;

        location / {

            root html

            index index.html index.htm

        }

        error_page 500 502  503 504 /50x.html;

        location = /50x.html {

            root html;

        }

    }

}

 

 

반응형
반응형

 

필수 구성요소 설치

간단하게 yum install nginx 명령어로 설치가능합니다. 그러나 직접 nginx 설치 파일을 다운로드 받았을 때는 다음의 라이브러리들을 먼저 설치해야 합니다.

  • yum groupinstall "Development Tools"
  • yum install pcre pcre-devel
  • yum install zlib zlib-devel
  • yum install openssl openssl-devel

 

nginx 다운로드

다음의 페이지에서 원하는 버전을 찾아 다운로드하고 압축을 풀어줍니다.

http://nginx.org/en/download.html

  • wget http://nginx.org/download/nginx-1.18.0.tar.gz
  • tar zxf nginx-1.18.0.tar.gz

 

설치 및 설정

참고로 configure 명령을 통해 여러가지 옵션을 줄 수 있습니다.

  • nginx-1.18.0/configure 
  • nginx-1.18.0/make
  • nginx-1.18.0/make install

 

실행 및 종료

Centos에서는 /usr/local/nginx/ 디렉토리에 설치가 완료되어 실행 가능합니다.

참고로 대부분의 유닉스 계열 시스템에서 프로세스는 root 계정으로 TCP 소켓 포트를 열 수 있다. 

  • 실행
    • /usr/local/nginx/sbin/nginx 
    • sudo nginx
  • 종료1 : /usr/local/nginx/sbin/nginx -s stop (TERM 시그널을 사용하여 강제로 종료한다)
  • 종료2 : /usr/local/nginx/sbin/nginx  -s quit (QUIT 시그널을 사용하여 안전하게 종료한다)

 

실행 후 확인

  • 브라우저로 호스트에 접근하여 welcome 페이지를 확인한다.
  • ps -ef | grep nginx 로 프로세스를 확인한다.
반응형

+ Recent posts