На днях попросили поставить связку веб-сервер + PHP. А php чтобы 5.2 ветки был. Условие - чтобы как можно легче и быстрее работал. Тюнингом пока не занимались - ждем нагрузки.
Коротко по каким инструкциям делал.
- OS - fedora 14
- Web-server - nginx
- php - 5.2.17 + php-fpm
Доустановим для начала необходимые пакеты в базовую установку fedora 14.
yum install screenyum install mcyum install mcyum install httpd-develyum install libjpeg-develyum install libpng-develyum install freetype-develyum install libgnuintl.so.8
Скачиваем php, патч php-fpm разворачиваем архив в /usr/local/src (я так привык).
tar jvfz php-5.2.17.tar.bz2
cd php-5.2.17
Патчим php с помощью патча php-fpm (такие действия необходимы для php-5.2, php-5.3 стал из репозитариев без проблем с использованием yum)
patch -p1 < ../php-5.2.17-fpm-0.5.14.diff
Опции configure для php (у нас были некоторые требования и нет необходимости подключать дополнительные модули):
./configure --with-gd --enable-gd-native-ttf --with-ttf --enable-safe-mode --enable-magic-quotes --with-gettext --with-zlib --with-curl --enable-soap --enable-sockets --with-openssl --enable-mbstring --with-gdbm --enable-fastcgi --enable-fpm --enable-dba --with-libdir=/usr/lib64 --enable-shared
Компилируем и устанавливаем:
make && make install
Выкинуло что куда поставило:
Installing PHP SAPI module: cgi
Installing PHP CGI binary: /usr/local/bin/Installing FPM config: /usr/local/etc/php-fpm.conf (installing as php-fpm.conf.default)Installing init.d script: /usr/local/sbin/php-fpmInstalling PHP CLI binary: /usr/local/bin/Installing PHP CLI man page: /usr/local/man/man1/Installing build environment: /usr/local/lib/php/build/Installing header files: /usr/local/include/php/Installing helper programs: /usr/local/bin/ program: phpize program: php-configInstalling man pages: /usr/local/man/man1/ page: phpize.1 page: php-config.1Installing PEAR environment: /usr/local/lib/php/[PEAR] Archive_Tar - already installed: 1.3.7[PEAR] Console_Getopt - already installed: 1.2.3[PEAR] Structures_Graph- already installed: 1.0.3[PEAR] XML_Util - already installed: 1.2.1[PEAR] PEAR - already installed: 1.9.1Wrote PEAR system config file at: /usr/local/etc/pear.confYou may want to add: /usr/local/lib/php to your php.ini include_pathInstalling PDO headers: /usr/local/include/php/ext/pdo/
Диффы конфига php-fpm: /usr/local/etc/php-fpm.conf
# diff php-fpm.conf php-fpm.conf.default
51,52c51,52
< nginx
< nginx
---
>
>
63c63
< nobody
---
>
66c66
< nobody
---
>
Конфиг nginx: /etc/nginx/nginx.conf
#######################################################################
#
# This is the main Nginx configuration file.
#
# More information about the configuration options is available on
# * the English wiki - http://wiki.nginx.org/Main
# * the Russian documentation - http://sysoev.ru/nginx/
#
#######################################################################
#----------------------------------------------------------------------
# Main Module - directives that cover basic functionality
#
# http://wiki.nginx.org/NginxHttpMainModule
#
#----------------------------------------------------------------------
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
#----------------------------------------------------------------------
# Events Module
#
# http://wiki.nginx.org/NginxHttpEventsModule
#
#----------------------------------------------------------------------
events {
worker_connections 1024;
}
#----------------------------------------------------------------------
# HTTP Core Module
#
# http://wiki.nginx.org/NginxHttpCoreModule
#
#----------------------------------------------------------------------
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#
# The default server
#
server {
listen 80;
server_name _;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# Load config files from the /etc/nginx/conf.d directory
include /etc/nginx/conf.d/*.conf;
}
Автостарт nginx:
chkconfig --levels 235 nginx on
/etc/init.d/nginx start
Автостарт php-fpm:
#cp /usr/local/sbin/php-fpm /etc/init.d/
#cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/etc/init.d/php-fpm start
Смотрим как все работает:
# ps axuu|egrep '(php|nginx)'root 12341 0.0 0.0 193368 3344 ? Ss Jun08 0:17 /usr/local/bin/php-cgi --fpm --fpm-config /usr/local/etc/php-fpm.confnobody 12342 0.0 0.0 193368 3708 ? S Jun08 0:00 /usr/local/bin/php-cgi --fpm --fpm-config /usr/local/etc/php-fpm.confnobody 12343 0.0 0.0 193368 4384 ? S Jun08 0:00 /usr/local/bin/php-cgi --fpm --fpm-config /usr/local/etc/php-fpm.confnobody 12344 0.0 0.0 193368 4384 ? S Jun08 0:00 /usr/local/bin/php-cgi --fpm --fpm-config /usr/local/etc/php-fpm.confnobody 12345 0.0 0.0 193368 4384 ? S Jun08 0:00 /usr/local/bin/php-cgi --fpm --fpm-config /usr/local/etc/php-fpm.confnobody 12346 0.0 0.0 193368 4384 ? S Jun08 0:00 /usr/local/bin/php-cgi --fpm --fpm-config /usr/local/etc/php-fpm.confroot 12914 0.0 0.0 98036 1796 ? Ss Jun08 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.confnginx 12915 0.0 0.0 98452 2980 ? S Jun08 0:00 nginx: worker process
# lsof -i|egrep '(php|nginx)'php-cgi 12341 root 6u IPv4 590354 0t0 TCP localhost:cslistener (LISTEN)php-cgi 12342 nobody 0u IPv4 590354 0t0 TCP localhost:cslistener (LISTEN)php-cgi 12343 nobody 0u IPv4 590354 0t0 TCP localhost:cslistener (LISTEN)php-cgi 12344 nobody 0u IPv4 590354 0t0 TCP localhost:cslistener (LISTEN)php-cgi 12345 nobody 0u IPv4 590354 0t0 TCP localhost:cslistener (LISTEN)php-cgi 12346 nobody 0u IPv4 590354 0t0 TCP localhost:cslistener (LISTEN)nginx 12914 root 6u IPv4 592201 0t0 TCP *:http (LISTEN)nginx 12915 nginx 6u IPv4 592201 0t0 TCP *:http (LISTEN)
# grep cslistener /etc/servicescslistener 9000/tcp # CSlistenercslistener 9000/udp # CSlistener
Вроде работает. Ждем нагрузки.
Ссылки: