NGINX + PHP-FPM + APC
지난 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
지금 당신 의 사 이 트 를 테스트 해서 그것 이 어떻게 일 하 는 지 볼 수 있 습 니 다. 만약 어떤 의문 이 있 으 면 언제든지 제기 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.