Нередко из компьютерного железа приходится выжимать максимум возможного. Веб-сервера не исключение - либо сайты "тяжелые" и хорошо посещаемые, либо маловато памяти и процессор слабоват.
И тут нам на помощь приходит связка nginx+apache2. Ее смысл в том, чтобы передать "тупую" и требующую много ресурсов работу по поддержанию коннектов и выдаче статического контента исключительно эффективному и экономному в плане использования ресурсов веб-серверу nginx (используется в качестве front-end) , предоставив возможность apache сконцентрироваться на "тонкой" работе по обработке php-скриптов. В этом ему поможет eAccelerator.
Предполагается, что на системе уже установлен стандартный LAMP-сервер, на деталях его установки и настройки останавливаться не буду.
Итак, правим конфиг сайта по умолчанию, и далее модифицируем его при создании виртуалхостов:
Нашей целью является переориентирование апача на прослушивание адреса/порта 127.0.0.1:81 - именно на этот адрес мы настроим проксирование nginx. Замечу, что зачастую считается достаточным использование записи вида *:81 вместо 127.0.0.1:81; у меня лично при такой сокращенной записи возникали проблемы и я рекомендую использовать "полную" форму адреса. После редактирования файл должен быть похож на вот это:
<VirtualHost 127.0.0.1:81>
ServerAdmin webmaster@твой_сайт
DocumentRoot /var/www/твой_сайт
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<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 All
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
Далее по аналогии настраиваем другие виртуальные хосты. При необходимости делаем ссылки на эти файлы в папке /etc/apache2/sites-enabled/
Далее необходимо настроить апач так, чтобы он записывал в свой лог файл "нвстоящие" адреса клиентов, а не 127.0.0.1. Для этого устанавливаем apache2-mod-rpaf:
aptitude install libapache2-mod-rpaf
И последнее с апачем. Редактируем файл /etc/apache2/ports.conf:
nano /etc/apache2/ports.conf
NameVirtualHost 127.0.0.1:81
Listen 127.0.0.1:81
Теперь устанавливаем nginx. В последних дистрибутивах ubuntu он уже имеется в стандартных репозитория, поэтому не мудрствуем:
apt-get install nginx
Настраиваем nginx. Открываем конфиг:
nano /usr/local/etc/nginx/nginx.conf
все стираем и делаем так:
user www-data;
worker_processes 1; # тут ставим кол-во процессов равное количеству ядер в процессоре).
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 64;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_proxied any;
gzip_min_length 1100;
gzip_http_version 1.0;
gzip_buffers 4 8k;
gzip_comp_level 9;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
include /etc/nginx/proxy.conf; #в этот файл выносим все настройки прокси
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Создаем файл proxy.conf:
proxy_redirect off;
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_buffers 32 4k;
Для виртуальных хостов создаем файлы конфигурации в /etc/nginx/sites-enabled/:
nano /etc/nginx/sites-enabled/example.com
server {
listen 80;
server_name example.com;
access_log /var/log/nginx.access_log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /var/www/test.gigma.ru/;
index index.html index.php;
access_log off;
expires 30d;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://127.0.0.1:81/;
}
}
С такими настройками nginx у нас отдаёт всю статику (картинки, видиое, музыку, css, ява скрипты и др.), а апачь трудиться только над выполнением php.
В противном случае phpadmin у меня отказывается работать.
aptitude install memcached
Следует иметь в виду следующие моменты:
- файл /etc/default/memcached содержит настройки типа вкл/выкл;
- в файле /etc/memcached.conf крайне необходимо из соображений безопасности включить строчку
-l 127.0.0.1
- перезагрузка memcached осуществляется /etc/init.d/memcached restart
Устанавливаем eAccelerator.
Так же тянем php5-dev, т.к. нам понадобится утилита phpize.
aptitude install php5-dev
aptitude install make
cd /tmp/
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar xvjf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
phpize
./configure --enable-eaccelerator=shared
make
make install
Создаем папку кеша:
mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator
Редактируем конфиг PHP:
nano /etc/php5/apache2/php.ini
Добавляем строки в самом верху:
[PHP]
; eAccelerator configuration
; Note that eAccelerator may also be installed as a PHP extension or as a zend_extension
; If you are using a thread safe build of PHP you must use
; zend_extension_ts instead of zend_extension
extension = "eaccelerator.so"
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "/var/cache/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.allowed_admin_path = "/var/www/eaccelerator"
Перезапускаем сервисы:
service apache2 restart
service nginx restart
service memcached restart
Вуаля у нас супершустрый сервер который кушает 90мб оперативной памяти.
Для тех кому нужен sphinx (free open-source SQL full-text search engine)
wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz
tar –xzvf sphinx-0.9.8.tar.gz
cd sphinx-0.9.8
./configure
make
make install
mkdir -p /var/db/sphinx/log
chmod -R 777 /var/db/
mkdir -p /usr/local/SphinxIndex
chmod -R 777 /usr/local/SphinxIndex/
и правим конфиг под свои нужды:
nano /usr/local/etc/sphinx.conf
Вроде ничего незабыл…