Pinochet Posted April 10, 2009 Report Share Posted April 10, 2009 анное руководство предназначено для тех кто имеет рутовый доступ к системе, неважно *nix или windows. Моему проэкту более 4х лет, он сменил не один десяток хостингов прежде чем перебрался на мою площадку.И ввиду того что площадка маленькая и перегруженная, а форум большой (больше ляма постов) и жрущий много ресурсов со временем все конфиги были вылизаны до максимума производительности.Версии софта о которых идет речьApache/2.2.9Nginx/0.6.32 Первый вопрос который встал передомной это недостаток оперативной памяти, ее было всего гиг и вместе с остальными сайтами на площадке в своп я уходил регулярно. Связанно это было с тем что апач по умолчанию для кождого соединения создает новый процесс(fork), каждый из форков хочет памяти, и в гиг на самом деле больше 500 впихнуть нормально не возможно. Для решения это проблемы перед апачом был поставлен nginx(http://sysoev.ru/nginx/). nginx это легковесный мультитрэдный http демон, он в данном случае решает проблему кучи открытых соединения, раздачи статики, сжатия исходящих данных(gzip). Именно он будет обслуживать соединения, апачу мы будем давать только те запросы которые требуют вычислений А теперь подробнее о модификации конфигов компонентов системы:начнем с апача: самая главная задача в данном случае это кастрировать его:в частности я отключил все лишние модули кроме того что нужно для работы пхп, более простые вещи такие как листинг каталогов и работу со статикой я перенес на nginx.помимо того чтобы поставить нгинкс мне потребовалось собрать модуль для апача rpaf(http://stderr.net/apache/rpaf/) он нужен для того чтобы правильно передавать пхп ip адреса с которых пришел запрос.мой конфиг с комментариями ServerRoot "/usr/lib/apache2" PidFile /var/run/apache2.pid # LockFile /var/run/apache2.lock LoadModule authz_host_module modules/mod_authz_host.so #этот и следующий модуль это авторизация и права LoadModule authz_user_module modules/mod_authz_user.so LoadModule dir_module modules/mod_dir.so # дириктории индексы дефолты LoadModule mime_module modules/mod_mime.so # mime тайпы LoadModule mime_magic_module modules/mod_mime_magic.so # миме по первым байтам файла LoadModule rewrite_module modules/mod_rewrite.so # реврайты лучше оставить, много где используются LoadModule log_config_module modules/mod_log_config.so # логи LoadModule logio_module modules/mod_logio.so # дополнительный модуль логов LoadModule status_module modules/mod_status.so # статистика апача по урлу LoadModule rpaf_module modules/mod_rpaf.so # этот модуль мы собираем и ставим руками, нужен он для правильных ip адресов при наличии nginx-а User apache # пользователь от которого работает демон (в вашей системе может отличаться) Group apache # то же самое но группа Timeout 300 # тайм аут соединения KeepAlive Off # нам они не нужны мы за nginx-ом UseCanonicalName Off # блаблабла AccessFileName .htaccess # волшебные файлы ServerTokens Prod # прятать от внешнего мира версию нашего сервера ServerSignature On # но призноваться кто мы HostnameLookups Off # имена в логах, не включать EnableMMAP on # шарить память между процессами EnableSendfile on # использовать прямую передачу файлов с диска в сокет ExtendedStatus On # расширеный статус RPAFproxy_ips 127.0.0.1 # настройки модуля рпаф для правильных ip адресов RPAFenable On # nocomments # дальше идут стандартные вещи для апача <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> <IfModule dir_module> DirectoryIndex index.htm index.html index.php </IfModule> <FilesMatch "^\.ht"> Order allow,deny Deny from all </FilesMatch> Listen 127.0.0.1:80 ### INCLUDES ### Include /etc/apache2/mconf.conf #здесь настройки модулей апача Include /etc/apache2/vhost.conf #здесь настройки виртульных хостов дальше идет файл mconf.conf <IfModule prefork.c> StartServers 8 MinSpareServers 8 MaxSpareServers 64 ServerLimit 256 # максимальное число форков апача, если вы не умещаемся в эту цифру то проблема глубже чем вы думаете MaxClients 256 MaxRequestsPerChild 1024 </IfModule> <IfModule !mod_php5.c> LoadModule php5_module modules/libphp5.so </IfModule> <IfModule mod_mime.c> AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php .php3 AddType application/x-httpd-php .php4 AddType application/x-httpd-php .php5 AddType application/x-httpd-php-source .phps </IfModule> ErrorLog /var/log/apache2/error_log LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-Agent}i" agent LogFormat "%v %h %l %u %t \"%r\" %>s %b %T" script LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i" vhost <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog /var/log/apache2/access_log vhost </IfModule> ### MIME CONFIG ### DefaultType text/plain <IfModule mime_module> TypesConfig /etc/mime.types AddEncoding x-gzip .gz AddType application/x-compress .Z AddType text/javascript .js.gz AddHandler type-map var </IfModule> <IfModule mime_magic_module> MIMEMagicFile /etc/apache2/magic </IfModule> далее настройка вирутальных хостов в файле vhost.conf: ### DEFAULT VHOST 4 ALL IP ### NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] ServerName default.ru DocumentRoot "/mnt/www/default_root" <Location /status-a> SetHandler server-status Order Allow,Deny Allow from All </Location> <Directory "/mnt/www/default_root"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> ### forum config ### <VirtualHost *:80> ServerName forum.blablabla.ru DocumentRoot /mnt/www/forum ServerAdmin [email protected] <Directory /mnt/www/forum> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost> если все правильно сделано то эта схема без проблем заведется, но учитывайте разницу между линуксом и другими операционными систмами, некоторые детали отличаются. На этом настройка и кастрация апача закончена, в итоге мы имеем легкую версию апача с пхп.В моем случае суммарный объем памяти занимаемый апачем стал 18 мегабайт на форк + 9 метров шаред памяти, максимум я занимаю 100 - 300 метров.Скорость форка благодаря отключению лишнего повышается в разы и дает значительный прирост в скорости обработки запроса до пхп. Дальнейшая задача это поставить нгикс и настройть дополнительный фенечки типа сжатия данных.инструкцию как собрать и поставить вы найдете на сайте разработчика, я же покажу вам как правильно скрестить это дело с апачом:итак конфиг первый: user apache apache; # пользователь и группа демона worker_processes 8; # количество воркеров, рекомендуется делать больше чем число ядер. pid /var/run/nginx.pid; # pid error_log /var/log/nginx/error_log warn; events { worker_connections 8192; use epoll; } http { access_log /var/log/nginx/access_log combined; include /etc/nginx/mime.types; #миммы default_type application/octet-stream; server_tokens off; # не говори свою версию reset_timedout_connection on; client_header_timeout 10m; client_body_timeout 10m; send_timeout 10m; connection_pool_size 256; client_header_buffer_size 8k; large_client_header_buffers 100 8k; request_pool_size 4k; client_max_body_size 1024m; proxy_buffering on; proxy_buffers 512 8k; proxy_buffer_size 8k; proxy_read_timeout 180; proxy_connect_timeout 300; proxy_send_timeout 600; proxy_ignore_client_abort off; proxy_intercept_errors off; gzip on; gzip_comp_level 4; gzip_disable "MSIE [1-6]\."; gzip_min_length 1100; gzip_buffers 4 8k; gzip_types text/plain text/css text/xml application/x-javascript; output_buffers 4 32k; postpone_output 1460; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 300 300; upload_progress proxied 8m; ignore_invalid_headers on; include /etc/nginx/vhost.conf; вот такой вот конфиг, не буду углубляться почему именно так, если надо то объясню отдельно.дальше vhost-ы из файла vhost.conf server { listen *.*.*.*:80; # ваш внешний ip адрес вписать здесь server_name forum.blablabla.ru; location / { proxy_pass [url="http://127.0.0.1:80;"]http://127.0.0.1:80;[/url] proxy_set_header Host $host; # можно последнюю переменную заменить на имя вхоста в апаче, тогда альясы можно будет писать в сервер_нэйм proxy_set_header X-Real-IP $remote_addr; # ip пользователя proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # дальше идет то что мы не будем спрашивать у апача, а именно аватары картинки профиля галлерея скрипты и цсс location ~* /(customavatars|customprofilepics|gallery|images|clientscript) { root /mnt/www/forum; } } вот собственно и все, если все сделано правильно то это у вас заработает сразу. это позволит вам значительно увеличивать нагрузку на сервер, вплоть до того, что 3-30 тысяч человек одновременно смогут насиловать один нормальный сервер(в зависимости от того где базада и какое у вас железо).спросите почему же не будет большого количества форков что и были раньше?все просто:то чем раньше занимался апач(обработка соединения, раздача статики) теперь делает nginx , клиенты теперь держат соединения с nginx-ом, не занимая процесы апача, апач отрабатывает запорс и нгинкс закрывает соединения с ним, таким образом в нормальном состоянии апачу достаточно 10 - 15 процессов чтобы обслуживать 5-20 запросов в секунду.так же значительно повышает скорость отдачи пользователям контента gzip, в моем случае до 80 процентов меньше передавать. Кстати не забудьте отключит гзип в форуме, (в панели администрирования, настройки форума, Cookies и заголовки HTTP) Это первая часть из того что можно оптимизировать уже сейчас, в следующем посте я затрону тему оптимизации пхп и прикручивания к нему разных рюшичек типа APC. если вы сделали все в точности как написано выше или примерно так, то вам надо будет:переместить в файловую системуа) аватарыб) картинки галереив) вложенияг) css данный мануал для версии 3.7 для остальных будут отличаться директории хранения статики автор:alleycat Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now