Не для кого не откроется секрет, если я напишу о том, что Apache foundation выпускает отличный http-сервер. Один недостаток - прожорлив он уж очень. Это обуславливается самим принципом работы апача. Но и найти ему достойную замену не всегда удаётся. И проблема тут не в ущербности претендентов, а в том, что большинство веб-приложений (например тот же Drupal) изначально ориентированны именно на апач. Главная проблема апача - отдача сгенерированных страниц и статики клиентам. Попробуем это обойти, добавив прокси в виде Nginx.
Для начала ставим apache и php:
# aptitude install apache2 php5 libapache2-mod-rpafДалее правим /etc/apache2/apache2.conf с целью уменьшения количества одновременно запущенных процессов apache:
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 2
MaxClients 50
MaxRequestsPerChild 0
</IfModule>Как можно заметить, значения для каждой модели работы апача задаются отдельно. В данном случае поправлялись значения для mpm-prefork модели, используемой вместе с php. Соответственно в других случаях надо будет редактировать значения для иных используемых моделей.
В /etc/apache2/ports.conf изменяем следующие строки:
NameVirtualHost *:8080
Listen 8080Дабы заменить прослушиваемые сервером порты.
Примерный листинг для файла настройки виртуального хоста апача /etc/apache2/sites-enabled/000-default:
<VirtualHost *:8080>
ServerName somedomain.org
ServerAlias www.somedomain.org
ServerAdmin webmaster@somedomain.org
DocumentRoot /var/www
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>Настраиваем модуль апача для работы через прокси, листинг /etc/apache2/mods-enabled/rpaf.conf:
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 realip [realip1]
</IfModule>Рестартуем апач:
# /etc/init.d/apache2 restartЕсли всё нормально, ставим nginx:
# aptitude install nginxЛистинг /etc/nginx/nginx.conf:
user www-data;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}Листинг /etc/nginx/sites-enabled/default:
server {
# Тут порты, которые будет слушать сервак
listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6
# Имена виртуального хоста
server_name aliech.ru www.aliech.ru;
# Лог доступа
access_log /var/log/nginx/localhost.access.log;
# Описание прокси
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
# Отдаём апачу в заголовке начальный адрес для mod_rpaf
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# ну и отдача статики средствами самого Ngnix
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ {
root /var/www;
}
}Собственно это всё, дальше надо только рестартануться:
# /etc/init.d/nginx restartСобственно на этом всё. Профит.


Может ли это быть из-за директивы limit_zone?Ведь не пишет же что ошибка, только предупреждает...