Настройка Web-сервера

Для работы web-сервера будем использовать связку nginx + php-fpm

Перед сборкой подтягиваем необходимые пакеты:

root@otp01:/tmp# apt-get install bzip2 gcc libxml2-dev libcurl4-openssl-dev libz-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev libmcrypt-dev libmm-dev libpcre3-dev libperl-dev

nginx

Скачиваем исходный код с сайта Игоря Сысоева, распаковываем и конфигурируем:

./configure --prefix=/usr/local/nginx-0.7.61 \
  --with-pcre \
  --with-rtsig_module \
  --with-select_module \
  --with-poll_module \
  --with-http_sub_module \
  --with-http_stub_status_module \
  --with-http_ssl_module \
  --with-http_realip_module \
  --with-http_addition_module \
  --with-http_dav_module \
  --with-http_flv_module \
  --with-http_perl_module

После сборки и установки создадим конфигурацию для logrotate

/var/log/nginx/*.log {
    compress
    delaycompress
    daily
    dateext
    missingok
    notifempty
    rotate 14
    sharedscripts
    postrotate
        test ! -f /usr/local/nginx-0.7.61/logs/nginx.pid || kill -USR1 `cat /usr/local/nginx-0.7.61/logs/nginx.pid`
    endscript
}

Для перехвата кодов HTTP-ошибок от FastCGI-бэкенда в секцию http конфигурационного файла добавляем

fastcgi_intercept_errors on;

При использовании awstats может выясниться, что формат лога невозможно распарсить с помощью имеющихся в awstats.conf настроек. Для этого перед началом реальной работы сервера вводим дополнительный формат логирования:

    log_format  main2 '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

Теперь awstats сможет его разбирать с конфигурационным форматом

LogFormat='%host - %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %otherquot'

php

Собираем php, предварительно наложив патч php-fpm

./configure --prefix=/usr/local/php-5.3.0-fpm \
  --enable-fastcgi \
  --enable-fpm \
  --disable-ipv6 \
  --with-zlib \
  --with-zlib-dir \
  --enable-bcmath \
  --with-curl \
  --with-curlwrappers \
  --disable-dom \
  --enable-ftp \
  --enable-mbstring \
  --with-gd \
  --with-jpeg-dir=/usr \
  --with-xpm-dir=/usr \
  --enable-gd-native-ttf \
  --with-ttf \
  --with-freetype-dir=/usr \
  --with-mhash \
  --with-mysql \
  --with-mysql=mysqlnd \
  --with-mysqli=mysqlnd \
  --with-pdo-mysql=mysqlnd \
  --disable-reflection \
  --with-mm \
  --with-mcrypt \
  --enable-sockets \
  --enable-sysvmsg \
  --enable-sysvsem \
  --enable-sysvshm \
  --enable-xml \
  --enable-libxml \
  --disable-simplexml \
  --disable-xmlreader \
  --disable-xmlwriter \
  --with-pear \
  --with-zend-vm


При сборке php версии 5.2.10 могут возникнуть проблемы при инсталляции PEAR. В этом случае в скрипте конфигурации заменяем --with-pear на --without-pear и проводим сборку без PEAR, после чего устанавливаем его вручную:
andrew@otp01:/tmp$ wget http://pear.php.net/go-pear
andrew@otp01:/tmp$ /usr/local/php-5.2.10-fpm/bin/php go-pear

...

 1. Installation prefix ($prefix) : /usr/local/php-5.2.10-fpm
 2. Temporary files directory     : /tmp/php-pear
 3. Binaries directory            : $prefix/bin
 4. PHP code directory ($php_dir) : /usr/local/php-5.2.10-fpm/lib/php
 5. Documentation base directory  : $php_dir/docs
 6. Data base directory           : $php_dir/data
 7. Tests base directory          : $php_dir/tests

...

Далее инсталлятор всё сделает автоматически или задаст простые вопросы.

Здесь тоже, как и для nginx, нужна конфигурация logrotate

/var/log/php/error.log /usr/local/php-5.3.0-fpm/logs/*.log {
    compress
    delaycompress
    daily
    dateext
    missingok
    notifempty
    rotate 14
    sharedscripts
    postrotate
        test ! -f /usr/local/php-5.3.0-fpm/logs/php-fpm.pid || kill -USR1 `cat /usr/local/php-5.3.0-fpm/logs/php-fpm.pid`
    endscript
}

APC и memcache

Для работы под нагрузкой понадобятся APC и драйвер memcache

andrew@otp01:/var/tmp/memcache-2.2.5$ /usr/local/php-5.2.9-fpm/bin/phpize
andrew@otp01:/var/tmp/memcache-2.2.5$ ./configure --help

andrew@otp01:/var/tmp/APC-3.1.2$ /usr/local/php-5.2.9-fpm/bin/phpize
andrew@otp01:/var/tmp/APC-3.1.2$ ./configure --enable-apc-mmap --with-php-config=/usr/local/php-5.2.9-fpm/bin/php-config

Приведённый выше материал изложен для версий
nginx-0.7.61.tar.gz
php-5.3.0.tar.gz
php-5.2.9-fpm-0.5.10.diff.gz
APC-3.1.2.tgz
memcache-2.2.5.tgz