nginx, php-fmp, memcached, eAccelerator и tmpfs
Захотелось мне сделать что-то глобальное и много мощное. И занялся я оптимизацией своего сервера.
Сразу скажу результаты. Простая страничка с 10м картинок у меня грузилась чуть больше 6ти секунд. Сейчас, после всех изменений - чуть больше одной секунды. 1-1.25с.
Все кэшируется, все прекрасно. Браузер даже не запрашивает всех картинок. Все супер. Теперь как этого добится.
Вкратце и со ссылками. Писать то, что описано уже много-много раз смысла нет.
nginx - http://sysoev.ru/nginx/
Сначала думал поставить его перед апачем.. но в итоге забил на эту идею, перенес сайт на отдельный IP и там крутится только nginx.
Примерный конфиг:
user www-data;
worker_processes 3;
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;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 5;
tcp_nodelay on;
gzip on;
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" "$request_filename" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio" $upstream_response_time';
server {
listen IP:80;
server_name SuperSite.ru;
client_header_buffer_size 100K;
client_max_body_size 5M;
access_log /absolute/path/log/access.static.log main;
error_log /absolute/path/log/error.static.log error;
# add_header Server MrBoo;
location / {
root /absolute/path/www/;
index index.php index.html;
if (!-e $request_filename) {
rewrite ^(/.*)$ /index.php?q=$1 last;
break;
}
}
# error_page 404 /index.php;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
location ~ \.php$ {
error_log /absolute/path/log/error.php.log error;
access_log /absolute/path/log/access.php.log main;
fastcgi_pass 127.0.0.1:9000;
fastcgi_hide_header X-Powered-By;
fastcgi_index index.php;
fastcgi_connect_timeout 60;
fastcgi_read_timeout 60;
fastcgi_send_timeout 60;
fastcgi_param SCRIPT_FILENAME /absolute/path/www$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
}
php-fpm - http://php-fpm.anight.org/
Самый долгий процесс - это сборка php. Внимательно читайте документацию.
В конфиге, что лежит в /usr/lib/php5/etc/php-fpm.conf раскомментируем:
Unix user of processes < value name="user">www-data< /value> Unix group of processes < value name="group">www-data< /value>
И еще можно создать ссылку: ln -s /usr/lib/php5/sbin/php-fpm /etc/init.d/php-fpm
Теперь php можно запускать командой: /etc/init.d/php-fpm start
В принципе это все, что нужно для работы сайта. И это уже ускорит его и снизит нагрузку на сервер. Но можно пойти еще дальше:
memcached
На сервере у меня Fedora и я все ставил через yum: php-pecl-memcache и memcached
Еще нужно прописать в php.ini: extension=memcache.so
Запустить memcached: /etc/init.d/memcached star
И не забыть перезапустить php
Ну еще конечно нужно использовать memcached в своих скриптах, иначе он вам нафиг не сдался :)
А вот eAccelerator - пригодится. Про него хорошо рассписано здесь: eAccelerator - ускорение работы php приложений.
А tmpfs - это вообще просто:
mount -t tmpfs -o rw,size=2M tmpfs /tmp
или прописать в /etc/fstab:
tmpfs /absolute/path tmpfs size=2M 0 1
Вот и все :) Просто.
Связанные записи
Метки: оптимизация, сервер
17 февраля 2009 в 15:29
У меня стоит vbseo и сервер поддерживает eaccelerator, но в панели управления пишет, что не поддерживает. Что делать?
30 июня 2009 в 13:42
Параметр size=2M не работает под 7.2-RELEASE-p2
26 ноября 2010 в 15:22
а для чего сдался tmpfs?