NGINX + PHP-FPM + APC

9139 단어 nginxapcphp-fpm
배경
지난 2 년 여 동안 우리 사 이 트 는 아파 치 + mod 를 운영 해 왔 다.php 모듈 은 대부분 이 조합 이 대처 할 수 있 지만 데이터 가 증가 함 에 따라 우 리 는 Apache 가 이미 힘 들 어 보이 고 메모리 에 미 친 듯 이 먹 기 시 작 했 으 며 CPU 도 모두 빼 앗 겼 다 는 것 을 알 게 되 었 다. 우 리 는 더 빠 른 방법 을 찾 아 문 제 를 해결 해 야 한다.
Nginx 는 I / O, CPU, 메모리, 요청 수 / 초 등 많은 지표 가 아파 치 를 초과 하 는 좋 은 선택 이다. 필요 하 다 면 언제든지 구 글 에서 관련 정 보 를 검색 할 수 있다.제 개인 적 인 테스트 결 과 를 보면 Nginx 와 Apache 간 의 차이 가 매우 뚜렷 합 니 다. 죄송합니다. 비공 식 테스트 이기 때문에 관련 숫자 를 발표 하지 않 겠 습 니 다. 이것 도 본 고의 중점 이 아 닙 니 다.더 자신 있 는 것 은 몇 가지 절차 만 있 으 면 아파 치 를 훨씬 뛰 어 넘 을 수 있다 는 것 이다.
PHP-FPM?
많은 사람들 이 Nginx 를 설정 할 때 LightTPD 프로젝트 에서 온 spawn - fcgi 를 선택 하여 PHP 를 해석 할 수 있 지만, spawn - fcgi 를 사용 하 는 데 문제 가 있어 서 다른 방법 을 찾 으 려 고 합 니 다.PHP - FPM 은 PHP FastCGI Process Manager 의 줄 임 말 입 니 다. 즉, PHP FastCGI 프로 세 스 관리자 입 니 다. 실제로 PHP 의 패 치 입 니 다. FastCGI 프로 세 스 관 리 를 PHP 패키지 에 통합 하 는 데 목적 을 둡 니 다.
주의: 아파 치 를 꾸준히 사용 하 더 라 도 mod 를 뛰 어 넘 는 이유 가 많 습 니 다.php, FastCGI 를 통 해 직접 PHP 를 해석 합 니 다.mod 사용php 에서 아파 치 는 PHP 를 불 러 오 는 모든 요청 을 처리 할 때 모든 라 이브 러 리 를 불 러 옵 니 다. 이것 은 엄 청 난 비용 입 니 다.FastCGI 를 사용 하면 PHP 의 행동 은 응용 프로그램 서버, PHP - FPM, spawn - fcgi 처럼 필요 에 따라 PHP 인 스 턴 스 를 불 러 오고 죽 이 는 것 이 좋 습 니 다. 그 중에서 중요 한 것 은 메모리 비용 을 줄 이 는 것 입 니 다.
시작 해 보도 록 하 겠 습 니 다.
우 리 는 새로 설 치 된 우 분투 8.10 인 트 레 피 드 를 사용 하 는데, 첫 번 째 는 모든 의존 팩 을 설치 하 는 것 이다.
sudo apt-get install make bison flex gcc patch autoconf subversion locate  sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev

가방 에 의존 할 준 비 를 한 후에 우 리 는 시작 할 수 있다.
PHP 컴 파일
우리 가 다운로드 한 것 은 PHP 5.2.8 소스 패키지 와 대응 하 는 PHP - FPM 패 치 입 니 다. 우 리 는 먼저 패 치 를 한 다음 에 컴 파일 합 니 다.
cd /usr/local/src/  sudo wget http://us.php.net/get/php-5.2.8.tar.gz/from/this/mirror  sudo tar zvxf php-5.2.8.tar.gz  sudo wget http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz  sudo gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | sudo patch -d php-5.2.8 -p1  cd php-5.2.8  sudo ./configure --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --disable-pdo --with-pgsql --with-curl --disable-debug --enable-pic --disable-rpath --enable-inline-optimization --with-bz2 --with-xml --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-xslt --enable-memcache --enable-zip --with-pcre-regex  sudo  make all install  sudo  strip /usr/local/bin/php-cgi

위의 명령 을 실행 하 는 중 오류 가 발생 하면 가방 에 의존 하지 않 아 발생 할 수 있 습 니 다.또한 특정 PHP 설정 옵션 을 올 바 르 게 사용 하거나 사용 하지 않도록 합 니 다.이어서 우 리 는 PECL 을 통 해 사용 할 모듈 을 설치 했다.
sudo pecl install memcache  sudo pecl install apc  sudo pecl install syck-beta

apc 모듈 을 설치 할 때 Apache 옵션 을 꼭 닫 으 십시오. 닫 지 않 으 면 알려 줍 니 다.다음은 우리 가 자주 사용 하 는 php. ini 를 복사 합 니 다.
sudo cp /usr/local/src/php-5.2.8/php.ini-recommended /usr/local/lib/php.ini

마지막 으로 우 리 는 심 볼 릭 링크 를 만 듭 니 다.
sudo mkdir /etc/php/  sudo ln -s /usr/local/lib/php.ini /etc/php/php.ini  sudo ln -s /usr/local/etc/php-fpm.conf /etc/php/php-fpm.conf

PHP 컴 파일 은 여기 서 끝 납 니 다. 남 은 일 은 php - fpm. conf 설정 을 수정 하 는 것 입 니 다. 텍스트 편집기 로 / etc / php / php - fpm. conf 를 열 고 프로 세 스 의 주 사용 자 를 www - data 로 수정 하 는 것 입 니 다. 이 파일 은 비교적 크기 때문에 검색 기능 을 사용 하 는 것 이 좋 습 니 다. 제 가 수정 하고 싶 은 값 은 각각 51, 52, 63, 66 줄 에 있 습 니 다.
<value name="owner">www-datavalue> <value name="group">www-datavalue> <value name="user">www-datavalue> <value name="group">www-datavalue>

Nginx
컴 파일 PHP 와 마찬가지 로 매우 간단 합 니 다:
cd ..  sudo wget http://sysoev.ru/nginx/nginx-0.6.35.tar.gz  sudo tar zxvf nginx-0.6.35.tar.gz  sudo rm -f nginx-0.6.35.tar.gz  cd nginx-0.6.35  sudo ./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_stub_status_module  sudo make && sudo make install

링크 만 들 기:
sudo ln -s /usr/local/nginx/conf /etc/nginx

다음 단 계 는 있어 도 되 고 없어 도 되 지만, 나 는 지금까지 사용 해 왔 으 니 말 해도 무방 하 다./ etc / nginx / nginx. conf 를 열 고 최종 수정 결 과 는 다음 과 같 습 니 다.
user  www-data;  worker_processes  6;   events {      worker_connections  1024;  }   http {      include       mime.types;      default_type  application/octet-stream;      sendfile        on;      keepalive_timeout  10 10;       gzip  on;      gzip_comp_level 1;      gzip_proxied any;      gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;           log_format main '$remote_addr - $remote_user [$time_local] '                    '"$request" $status  $body_bytes_sent "$http_referer" '                    '"$http_user_agent" "$http_x_forwarded_for"';           access_log  /var/log/nginx_access.log  main;           error_log  /var/log/nginx_error.log debug;           include /usr/local/nginx/sites-enabled/*;  }

PHP 가 체 하지 않 고 Nginx 503 오 류 를 피 할 수 있 도록 FastCGI 인 자 를 설 정 했 습 니 다. / etc / nginx / fastcgi 를 엽 니 다.params, 다음 인자 추가:
fastcgi_connect_timeout 60;  fastcgi_send_timeout 180;  fastcgi_read_timeout 180;  fastcgi_buffer_size 128k;  fastcgi_buffers 4 256k;  fastcgi_busy_buffers_size 256k;  fastcgi_temp_file_write_size 256k;  fastcgi_intercept_errors on;

마지막 으로 SystemV 스타일 의 시작 스 크 립 트 를 만 들 고 / etc / init. d / nginx 로 저장 합 니 다.
#! /bin/sh  ### BEGIN INIT INFO  # Provides:          nginx  # Required-Start:    $all  # Required-Stop:     $all  # Default-Start:     2 3 4 5  # Default-Stop:      0 1 6  # Short-Description: starts the nginx web server  # Description:       starts nginx using start-stop-daemon  ### END INIT INFO   PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  DAEMON=/usr/local/sbin/nginx  NAME=nginx DESC=nginx  test -x $DAEMON || exit 0   # Include nginx defaults if available  if [ -f /etc/default/nginx ] ; then          . /etc/default/nginx  fi   set -e   case "$1" in    start)          echo -n "Starting $DESC: "          start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \                  --exec $DAEMON -- $DAEMON_OPTS          echo "$NAME."          ;;    stop)          echo -n "Stopping $DESC: "          start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \                  --exec $DAEMON          echo "$NAME."          ;;    restart|force-reload)          echo -n "Restarting $DESC: "          start-stop-daemon --stop --quiet --pidfile \                  /usr/local/nginx/logs/$NAME.pid --exec $DAEMON          sleep 1          start-stop-daemon --start --quiet --pidfile \                  /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS          echo "$NAME."          ;;    reload)        echo -n "Reloading $DESC configuration: "        start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \            --exec $DAEMON        echo "$NAME."        ;;    *)          N=/etc/init.d/$NAME          echo "Usage: $N {start|stop|restart|force-reload}" >&2          exit 1          ;;  esac   exit 0

실행 가능 한 권한 을 설정 하 는 것 을 잊 지 마 세 요.
사이트 설정
이 단계 의 일 은 주로 당신 의 습관 에 따라 완성 되 는데, 여 기 는 대략적인 소개 만 할 수 있 습 니 다.우선 웹 사이트 프로필 을 저장 하기 위해 디 렉 터 리 를 만 듭 니 다.
sudo mkdir /usr/local/nginx/sites-enabled  sudo ln -s /usr/local/nginx/sites-enabled /etc/sites

다음은 저희 사이트 에 conf 파일 / etc / sites / default. conf 를 추가 합 니 다. 내용 은 다음 과 같 습 니 다.
server {          listen *:80;           location / {                  root   /var/www/default/pub;                  index index.php;                   # if file exists return it right away                  if (-f $request_filename) {                          break;                  }                   # otherwise rewrite the fucker                  if (!-e $request_filename) {                          rewrite ^(.+)$ /index.php$1 last;                          break;                  }           }           # if the request starts with our frontcontroller, pass it on to fastcgi          location ~ ^/index.php          {                  fastcgi_pass 127.0.0.1:9000;                  fastcgi_param SCRIPT_FILENAME /var/www/default/pub$fastcgi_script_name;                  fastcgi_param PATH_INFO $fastcgi_script_name;                  include /usr/local/nginx/conf/fastcgi_params;          }  }

위의 conf 파일 은 웹 사이트 의 전단 스타일 을 제어 합 니 다. 워드 프레스, cake 등 을 포함 하고 정적 내용 은 FastCGI 를 통 해 해석 되 지 않 습 니 다.또한, / var / www / default 파일 을 수정 하고 사이트 파일 의 기본 위 치 를 설정 해 야 할 수도 있 습 니 다.
시동 을 걸다
우리 의 일이 끝 났 으 니 시동 을 걸 어 효 과 를 보 자.
sudo php-fm start  sudo /etc/init.d/nginx start

지금 당신 의 사 이 트 를 테스트 해서 그것 이 어떻게 일 하 는 지 볼 수 있 습 니 다. 만약 어떤 의문 이 있 으 면 언제든지 제기 하 세 요.

좋은 웹페이지 즐겨찾기