WEB Server - NGINX PHP 5.2 연동하기 - CentOS 7
WEB Server - NGINX PHP 연동하기 - CentOS 7
이번 포스팅에서는 NGINX와 PHP 연동 관련으로 알아보겠습니다.
이전 글 :
서버와 클라이언트 그리고 HTTP - https://server-talk.tistory.com/291
CGI 와 FastCGI 알아보기 |
CGI와 FastCGI 알아보기 - https://server-talk.tistory.com/308
NGINX 와 PHP 연동에 앞서 CGI와 FastCGI를 먼저 선행적으로 학습하시고 오셔야 보다 쉽게 이해할수 있습니다
NGINX와 FastCGI 그리고 PHP-FPM |
NGINX는 Apache와 다르게 전용 PHP 모듈을 설치하지 않고 FastCGI를 사용하여 PHP와 NGINX를 연동하게 됩니다
FastCGI를 사용하여 PHP와 연동하려면 PHP 설치할경우에 --enable-fpm 옵션을 지정만하면 다른 추가작업 하지않아도 됩니다
설치과정에서 NGINX와 연동 방식을 이해하는것이 가장 중요합니다
PHP는 기본적으로 FastCGI 프로토콜을 지원하고 PHP는 스크립트를 처리하여 NGINX와 소켓으로 연동할 수 있습니다 이러한 FastCGI와 PHP가 소켓통신을 하려면 PHP-FPM과 연동이 필요합니다
PHP-FPM 은 PHP 프로세스를 관리하는 스크립트 입니다 FPM은 NGINX에서 수신을 기다렸다가 FastCGI를 통해 PHP 를 실행하게 됩니다
PHP 5.2 설치 및 PHP-FPM 연동 설정 |
1. libmcrypt-2.5.8 설치
1) libmcrypt-2.5.8.tar.gz 압축해제
[root@nginx ~]# tar zxf libmcrypt-2.5.8.tar.gz
2) libmcrypt-2.5.8 소스 트리 구성
[root@nginx ~]# ./configure --prefix=/usr/local/
3) libmcrypt-2.5.8 설치 시작
[root@nginx ~]# make && make install
4) libmcrypt-2.5.8 설치 시작
2. PHP-FPM 다운로드
PHP 5.2 이하버전은 기본적으로 FPM을 지원하지 않으므로 패치를 진행해야됩니다.
PHP-FPM 다운로드 URL : https://php-fpm.org/downloads/
위 URL로 버전에 맞는 PHP-FPM을 다운로드를 진행하시면 됩니다.
3. PHP 설치하기
1) 심볼릭 링크 설정
[root@nginx php-5.2.15]# ln -s /usr/lib64/libjpeg.so /usr/lib/ [root@nginx php-5.2.15]# ln -s /usr/lib64/libpng.so /usr/lib/
2) PHP 압축해제
[root@nginx ~]# tar zxf php-5.2.15.tar.gz
3) PHP, PHP-FPM 패치
[root@nginx ~]# gzip -cd php-5.2.15-fpm-0.5.14.diff.gz | patch -d php-5.2.15 -p1
4) 패치파일 이동 및 패치
[root@nginx ~]# mv libxml29_compat.patch php-5.2.15 [root@nginx ~]# cd php-5.2.15 [root@nginx php-5.2.17]# patch -p0 < ./libxml29_compat.patch
5) PHP 소스트리 구성
CentOS 7 APM 컴파일 설치 (php 5.2.x) - https://server-talk.tistory.com/59
- 소스 트리구성에 MySQL 옵션이 설정되어 있습니다 MySQL 설치되지 않았을 경우 위 URL에서 MySQL를 설치하시고 진행 바랍니다.
[root@nginx php-5.2.17]# ./configure --prefix=/usr/local/php \ --with-mysql=/server/mysql \ --with-mysqli=/server/mysql/bin/mysql_config \ --with-curl \ --disable-debug \ --enable-safe-mode \ --enable-sockets \ --enable-sysvsem=yes \ --enable-sysvshm=yes \ --enable-ftp \ --enable-magic-quotes \ --with-ttf \ --enable-gd-native-ttf \ --enable-inline-optimization \ --enable-bcmath \ --with-zlib \ --with-gd \ --with-gettext \ --with-jpeg-dir=/usr \ --with-png-dir=/usr/lib \ --with-freetype-dir=/usr \ --with-libxml-dir=/usr \ --enable-exif \ --enable-sigchild \ --enable-mbstring \ --enable-fastcgi \ --enable-fpm \ --with-openssl \ --enable-soap
5) PHP 설치시작
[root@nginx php-5.2.17]# make && make install
6) PHP 설정파일 복사
[root@nginx php-5.2.17]# cp -a php.ini-dist /usr/local/php/lib/php.ini
7) PHP-FPM 구동 스크립트
[root@nginx ~]# cd /etc/init.d/ [root@nginx ~]# ln -s /usr/local/php/sbin/php-fpm /etc/init.d/php-fpm
8) PHP-FPM 설정파일 데몬 계정 주석 해제 - 63번 66번 줄 주석해제
FILE : /usr/local/php/etc/php-fpm.conf
<value name="user">nobody</value> <value name="group">nobody</value>
9) PHP-FPM IP와 Port 설정 - 41번줄
<value name="listen_address">192.168.85.177:9000</value>
10) PHP-FPM이 허용하게될 FastGCI의 IP를 입력 - 137번줄
<value name="allowed_clients">192.168.85.177</value>
11) PHP-FPM 실행
[root@nginx ~]# /etc/init.d/php-fpm start
NGINX에서 PHP 파일을 PHP-FPM 에 전달과정 |
NGINX와 PHP 연동하기전 NGINX가 PHP파일을 사용자에게 요청받았을때 어떻게 처리하고 PHP-FPM에게 전달하는 과정을 알아야 됩니다.
NGINX에 PHP파일을 요청받게되면 PHP 처리가 정의 되어 있는 LOCATION 안에 제어문을 처리하게 됩니다.
LOCATION 제어문 안에 있는 fastcgi_param 지시어로 $document_root(웹사이트 경로)변수와 $fastcgi_script_name(사용자가 요청한 파일)변수를 SCRIPT_FILENAME 변수에 넣어주게 됩니다
처리해야될 파일에 위치 담아있는 SCRIPT_FILENAME 변수에 fastcgi_pass 지시어 있는 접속정로 PHP-FPM에게 전달하게 됩니다
fastcgi_pass 지시어로 SCRIPT_FILENAME 에 처리해야될 파일을 전달 받은 PHP-FPM는 PHP가 실행할수 있도록 합니다.
NGINX에서 FastCGI를 통해 PHP-FPM 연동 |
PHP-FPM 정보 : 192.168.85.177:9000
PHP 설치 및 PHP-FPM 설정이 완료 되었다면 NGINX와 연동을 해야됩니다 정의는 SERVER 블록에 설정을 해야됩니다
server { listen 192.168.85.177:80; server_name server-talk.com; root /home/server_talk/public_html; access_log /usr/local/nginx/logs/server-talk.com.access.log; error_log /usr/local/nginx/logs/server-talk.com.error.log; location / { include /usr/local/nginx/conf/naxsi.rules; index index.html index.htm; error_log server-talk.com_naxsi_err.log } error_page 500 502 503 504 /usr/local/nginx/html/50x.html; location = /usr/local/nginx/html/50x.html { root html; } # 사용자 요청파일이 php 확장자 파일을 요청할때 사용됩니다. location ~ \.php$ { #PHP-FPM에서 지정한 IP와 포트를 입력합니다. fastcgi_pass 192.168.85.177:9001; #PHP-FPM에 전달하게될 스크립트 파일명 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #FastCGI 관련 구성 설정 정보를 포함합니다. include fastcgi_params; } }
PHP 연동하실 NGINX의 웹사이트의 SERVER 블록에 LOCATION 블록에 PHP 확장자를 접근했을때 처리하는 구문을 설정하면 됩니다
PHP LOCATION 제어문
location ~ \.php$ : 사용자가 PHP 파일을 요청했을때 사용됩니다
fastcgi_pass [IP]:[Port] : 사용자가 요청한 PHP파일을 PHP-FPM에게 주소 입니다
fastcgi_param SCRIPT_FILENAME [웹 사이트 경로][사용자가 요청한 파일] : 사용자가 요청한 디렉토리와 사용자가 요청한 파일을 조합해서 SCRIPT_FILENAME 이라는 이름으로 fastcgi_pass 정의 되어 있는 방법을 이용하여 PHP-FPM 에게 PHP_FILENAME 변수에다가 처리해야될 파일의 위치를 전달하여 처리합니다
include fastcgi_params : FastCGI 관련 구성 설정 정보를 포함합니다.
PHP LOCATION 제어문 변수
$document_root : 사용자가 접속한 웹사이트 경로가 담겨 있습니다
$fastcgi_script_name : 사용자가 요청한 파일이 담겨 있습니다
SCRIPT_FILENAME : fastcgi_param 지시어로 사용자가 접속한 경로와 요청한 파일의 위치가 담겨지게 됩니다