YUMSERV
Published 2019. 5. 27. 21:56
NGINX + PHP-FPM 연동 LINUX/WEB
반응형

1. PHP-FPM이란

 

PHP-fpm 은 PHP FastCGI Process Manger의 약자로, CGI보다 빠른 버전이라고 말할 수 있습니다. CGI란, 웹 서버에서 요청을 받아 외부 프로그램에 넘겨주면, 외부 프로그램은 그 파일을 읽어 html로 변환하는 단계를 거치는 것을 말합니다. Fast CGI는 요청할때마다 이미 생성된 프로세스를 가지고 구동하기 때문에 처리가 CGI보다 빠릅니다. Apache에서는 php모듈이 있기 때문에 처리가 가능하지만, nginx에서는 php-fpm을 따로 설치해 연동을 해주어야 합니다.

 

2. Nginx + PHP-FPM 연동

 

nginx와 php와 연동하기 위해서는 기존에 php가 설치되어있을 경우, php-config 파일을 보고 –enable-fpm –with-fpm-user=nobody –with-fpm-goup=nobody가 있는지 확인해보고, 없을 경우 php를 재컴파일해야 합니다.

 

1) mhash 설치

 

# cd /usr/local/src
# wget https://jaist.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
# tar xvfz mhash-0.9.9.9.tar.gz
# cd mhash-0.9.9.9
# ./configure
# make && make install

 

2) libiconv 설치

 

# cd /usr/local/src
# wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
# cd libiconv-1.15
# ./configure
# make && make install


libiconv 에러메시지 발생시 해결 방안

In file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
_GL_WARN_ON_USE (gets, “gets is a security hole – use fgets instead”);
^
make[2]: *** [progname.o] 오류 1
make[2]: Leaving directory /usrlocalsrclibiconv−1.14srclib’make[1]:⋆[all]오류2make[1]:Leav∈gdirec→ry/usrlocalsrclibiconv-1.14srclib′make[1]:⋆[all]오류2make[1]:Leav∈gdirec→ry/usr/local/src/libiconv-1.14/srclib’
make: *** [all] 오류 2

# vi srclib/stdio.in.h
# endif
_GL_CXXALIASWARN (gets);
/* It is very rare that the developer ever has full control of stdin,
so any use of gets warrants an unconditional warning. Assume it is
always declared, since it is required by C89. */
#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, “gets is a security hole – use fgets instead”);

#endif
#endif

 

3) libmcrypt 설치

 

# cd /usr/local/src
# wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
# tar xvfz libmcrypt-2.5.7
# ./configure
# make && make install
# ln -s /usr/local/lib/libmcrypt.so.4 /usr/local/lib64/libmcrypt.so.4
# ln -sf /usr/lib64/libldap.so /usr/lib/libldap.so

 

4) php 설치

 

# cd /usr/local/src 
# wget http://jp2.php.net/get/php-5.6.37.tar.gz/from/this/mirror
# tar xvfz mirror
# cd php-5.6.37/
# ./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--disable-debug \
--enable-fpm \
--enable-bcmath \
--enable-exif \
--enable-ftp \
--enable-gd-native-ttf \
--enable-inline-optimization \
--enable-intl \
--enable-mbregex \
--enable-mbstring \
--enable-mod-charset \
--enable-sigchild \
--enable-soap \
--enable-sockets \
--enable-sysvsem=yes \
--enable-sysvshm=yes \
--enable-xml \
--enable-zip \
--with-bz2 \
--with-iconv=/usr/local/lib \
--with-curl \
--with-zlib \
--with-gd \
--with-gettext \
--with-mcrypt \
--with-mhash \
--with-mysql=/usr/local/mysql \
--with-mysqli \
--with-openssl \
--with-xmlrpc \
--with-freetype-dir=/usr/lib64 \
--with-jpeg-dir=/usr/lib64 \
--with-libxml-dir=/usr/lib64 \
--with-png-dir=/usr/lib64 \
--with-zlib-dir=/usr/lib64 \
--with-fpm-user=nobody \
--with-fpm-group=nobody

# make && make install

 

5) php-fpm 시작 및 확인

 

# /usr/local/php/sbin/php-fpm
# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 10451/php-fpm: mast

 

6) nginx 설정

 

# vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
root /home/public_html; location / {
access_log logs/host.access.log;
error_log logs/host.error.log;
index index.html index.htm index.php info.php;
} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
access_log logs/nginx_php.access.log;
error_log logs/nginx_php.error.log;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME documentrootdocumentrootfastcgi_script_name;
include fastcgi_params;
}

설정 후 nginx 재시작을 해 줍니다. 재시작한뒤에, document_root 경로에 phpinfo 파일을 만든다음에 접속이 잘 되는지 확인합니다.

 

재시작 이후에도 phpinfo 페이지가 뜨지 않을 경우

1) forbidden 에러 메시지
# vi /usr/local/nginx/conf/nginx.conf
user none → user 사용자계정;
2) FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream …
document_root 디렉터리의 권한을 확인한 뒤에, 권한이 755로 되어있지않으면 변경 후 nginx 재시작


반응형

'LINUX > WEB' 카테고리의 다른 글

XE Engine 설치  (0) 2019.05.27
Tomcat 설치  (0) 2019.05.27
Ioncube 설치  (0) 2019.05.27
Cmake 소스설치  (0) 2019.05.27
PHP 모듈 추가  (0) 2019.05.27
profile

YUMSERV

@lena04301

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!