>  기사  >  백엔드 개발  >  Nginx+PHP 프로덕션 환경을 구축하려면 php-fpm을 설치하고 구성하세요.

Nginx+PHP 프로덕션 환경을 구축하려면 php-fpm을 설치하고 구성하세요.

不言
不言원래의
2018-06-02 10:19:2012929검색

이 글에서는 주로 Nginx+PHP 프로덕션 환경을 구축하기 위해 php-fpm을 설치하고 구성하는 방법을 소개합니다. php-fpm의 기능은 FastCGI 프로세스 관리를 PHP 패키지에 통합하는 것입니다. 필요한 친구는

nginx를 참조할 수 있습니다. 자체적으로는 처리할 수 없습니다. PHP는 단지 웹 서버일 뿐입니다. 요청이 수신되면 PHP 요청인 경우 처리를 위해 PHP 인터프리터로 전송되고 결과가 클라이언트에 반환됩니다.

nginx는 일반적으로 처리를 위해 fastcgi 관리 프로세스에 요청을 보냅니다. fascgi 관리 프로세스는 결과를 처리할 cgi 하위 프로세스를 선택하고 이를 nginx로 반환합니다.

이 기사에서는 만드는 방법을 소개하기 위해 php-fpm을 예로 사용합니다. nginx 지원 PHP

1. php-fpm

컴파일 및 설치PHP-FPM

PHP-FPM은 PHP FastCGI 관리자로, PHP에만 사용되며 http://php- fpm.org/download.

PHP-FPM은 실제로 FastCGI 프로세스 관리를 PHP 패키지에 통합하도록 설계된 PHP 소스 코드에 대한 패치입니다. PHP 소스 코드에 패치해야 하며, PHP를 컴파일하고 설치한 후에 사용할 수 있습니다.

새 버전의 PHP에는 php-fpm이 통합되어 있습니다. 더 이상 타사 패키지를 사용하는 것이 좋습니다. PHP-FPM은 더 나은 PHP 프로세스 관리 방법을 제공하고, 메모리와 프로세스를 효과적으로 제어할 수 있으며, PHP 구성을 원활하게 다시 로드할 수 있습니다. 이는spawn-fcgi보다 더 많은 장점을 가지고 있어 공식적으로 PHP에 포함됩니다. ./configure의 –enable-fpm 매개변수를 사용하여 PHP-FPM을 켤 수 있습니다. 다른 매개변수는 php에 대해 구성됩니다. 옵션의 구체적인 의미는 여기에서 확인할 수 있습니다.

설치 전 준비
centos에서 실행

yum -y install gcc automake autoconf libtool make

yum -y install gcc gcc-c++ glibc

yum -y install libmcrypt-devel mhash-devel libxslt-devel

libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel 
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel 
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel 
krb5 krb5-devel libidn libidn-devel openssl openssl-devel

새 버전의 php-fpm 설치(권장 설치 방법)

wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt

--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath 
--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets 
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex 
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli 
--with-gd --with-jpeg-dir

make all install

위의 두 가지 php-fpm은 어떤 방법으로든 설치할 수 있습니다. 설치 후 내용은 /usr/local/php 디렉토리에 위치합니다

201615100155789.png (300×41)

위로 php-fpm 설치가 완료됩니다.

다음은 php-fpm 실행 사용자를 설정하는 것입니다

cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf

Modification

user = www-data
group = www-data

www-data 사용자가 존재하지 않으면 www-data 사용자를 먼저 추가하세요

groupadd www-data
useradd -g www-data www-data

2. nginx를 컴파일하고 설치합니다

3. php-fpm을 지원하도록 nginx 구성 파일을 수정합니다

nginx 설치가 완료된 후 nginx 구성 파일을 nginx.conf

로 수정합니다. 서버 섹션에 다음 구성을 추가하고 빨간색 콘텐츠 구성 표시에 주의하세요. 그렇지 않으면 입력 파일이 지정되지 않습니다.

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

IV. 테스트 PHP 파일 만들기

PHP 파일 만들기

/usr/local/nginx/html 아래에 index.php 파일을 생성하고, 다음 내용을 입력하세요.

<?php
  echo phpinfo();
?>

5. 서비스 시작

php-fpm 및 nginx 시작

/usr/local/php/sbin/php-fpm 
#手动打补丁的启动方式/usr/local/php/sbin/php-fpm start

sudo /usr/local/nginx/nginx

php-fpm 닫았다가 다시 시작하면 글 끝부분 참조

6. 브라우저 접속

http://your server ip/index.php에 접속하시면 php 정보를 보실 수 있습니다.

201615100326710.png (300×120)


7. 오류 해결
Nginx를 사용하다 보면 502 Bad Gateway 및 504 Gateway Time-out 오류가 자주 발생합니다. Nginx+PHP-FPM을 사용하여 이러한 두 가지 일반적인 오류를 분석해 보겠습니다. 오류의 해결책.

1.502 잘못된 게이트웨이 오류

php.ini와 php-fpm.conf에는 각각 max_execution_time과 request_terminate_timeout이라는 두 가지 구성 항목이 있습니다.
이 두 항목은 PHP 스크립트의 최대 실행 시간을 구성하는 데 사용됩니다. 이 시간을 초과하면 PHP-FPM은 스크립트 실행을 종료할 뿐만 아니라 스크립트를 실행하는 작업자 프로세스도 종료합니다. 따라서 Nginx는 자신과 통신하기 위한 연결이 끊어진 것을 발견하고 클라이언트에 502 오류를 반환합니다.

PHP-FPM의 request_terminate_timeout=30초를 예로 들면, 502 Bad Gateway 오류의 구체적인 정보는 다음과 같습니다.

1) Nginx 오류 액세스 로그:

   2013/09/19 01:09:00 [error] 27600#0: *78887 recv() failed (104: Connection reset by peer) while reading response header from upstream, 
   client: 192.168.1.101, server: test.com, request: "POST /index.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", 
   host: "test.com", referrer: "http://test.com/index.php"

2) PHP-FPM 오류 로그 :


   WARNING: child 25708 exited on signal 15 (SIGTERM) after 21008.883410 seconds from start

그러므로 긴 실행 시간으로 인해 PHP 스크립트가 종료되는 것을 방지하려면 이 두 항목의 값을 늘리면 됩니다. request_terminate_timeout은 max_execution_time을 재정의할 수 있습니다.

따라서 전역 php.ini를 변경하지 않으려면 PHP-FPM의 구성을 변경하면 됩니다.

또한 Nginx 업스트림 모듈의 max_fail 및 failure_timeout 항목을 참고하세요. 때때로 Nginx와 업스트림 서버(예: Tomcat, FastCGI) 사이의 통신이 실수로 중단될 수 있습니다. 그러나 max_fail이 상대적으로 작은 값으로 설정된 경우 다음 fall_timeout 시간에 Nginx는 업스트림 서버가 다운된 것으로 간주합니다. 502 실수를 반환합니다.

그래서 max_fail을 늘리고 failure_timeout을 줄일 수 있습니다.

2.504 게이트웨이 시간 초과 오류

PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置factcgi_connect/read/send_timeout。

以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:

   2013/09/19 00:55:51 [error] 27600#0: *78877 upstream timed out (110: Connection timed out) while reading response header from upstream, 
   client: 192.168.1.101, server: test.com, request: "POST /index.php HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", 
   host: "test.com", referrer: "http://test.com/index.php"

调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。

配置举例:

location ~ \.php$ {
        root          /home/cdai/test.com;
        include         fastcgi_params;
        fastcgi_connect_timeout   180;
        fastcgi_read_timeout      600;
        fastcgi_send_timeout      600;
        fastcgi_pass      unix:/dev/shm/php-fcgi.sock;
        fastcgi_index      index.php;
        fastcgi_param     SCRIPT_FILENAME /home/cdai/test.com$fastcgi_script_name;
   }

위 내용은 Nginx+PHP 프로덕션 환경을 구축하려면 php-fpm을 설치하고 구성하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.