форум vBSupport.ru > vBulletin > Old vB versions (3.0.x & 2.x.x) > vBulletin 3.7.x > Hacks, mods and scripts [3.7.x]
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
alleycat
Продвинутый
Default Настройка apache и nginx для vbulletin
34

Данное руководство предназначено для тех кто имеет рутовый доступ к системе, неважно *nix или windows.

Моему проэкту более 4х лет, он сменил не один десяток хостингов прежде чем перебрался на мою площадку.
И ввиду того что площадка маленькая и перегруженная, а форум большой (больше ляма постов) и жрущий много ресурсов со временем все конфиги были вылизаны до максимума производительности.
Версии софта о которых идет речь
Apache/2.2.9
Nginx/0.6.32

Первый вопрос который встал передомной это недостаток оперативной памяти, ее было всего гиг и вместе с остальными сайтами на площадке в своп я уходил регулярно. Связанно это было с тем что апач по умолчанию для кождого соединения создает новый процесс(fork), каждый из форков хочет памяти, и в гиг на самом деле больше 500 впихнуть нормально не возможно.

Для решения это проблемы перед апачом был поставлен nginx(http://sysoev.ru/nginx/). nginx это легковесный мультитрэдный http демон, он в данном случае решает проблему кучи открытых соединения, раздачи статики, сжатия исходящих данных(gzip). Именно он будет обслуживать соединения, апачу мы будем давать только те запросы которые требуют вычислений

А теперь подробнее о модификации конфигов компонентов системы:
начнем с апача:

самая главная задача в данном случае это кастрировать его:
в частности я отключил все лишние модули кроме того что нужно для работы пхп, более простые вещи такие как листинг каталогов и работу со статикой я перенес на nginx.
помимо того чтобы поставить нгинкс мне потребовалось собрать модуль для апача rpaf(http://stderr.net/apache/rpaf/) он нужен для того чтобы правильно передавать пхп ip адреса с которых пришел запрос.
мой конфиг с комментариями
Code:
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

Code:
<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:
Code:
### DEFAULT VHOST 4 ALL IP ###

NameVirtualHost *:80
<VirtualHost *:80>

ServerAdmin a@b.ru
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 a@b.ru

<Directory /mnt/www/forum>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
</Directory>
</VirtualHost>
если все правильно сделано то эта схема без проблем заведется, но учитывайте разницу между линуксом и другими операционными систмами, некоторые детали отличаются.

На этом настройка и кастрация апача закончена, в итоге мы имеем легкую версию апача с пхп.
В моем случае суммарный объем памяти занимаемый апачем стал 18 мегабайт на форк + 9 метров шаред памяти, максимум я занимаю 100 - 300 метров.
Скорость форка благодаря отключению лишнего повышается в разы и дает значительный прирост в скорости обработки запроса до пхп.

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

Code:
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

Code:
server {
        listen          *.*.*.*:80; # ваш внешний ip адрес вписать здесь
        server_name     forum.blablabla.ru;
        location / {
                proxy_pass              http://127.0.0.1:80;
                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.

alleycat добавил 08.07.2008 в 07:02
И ЕЩЕ

если вы сделали все в точности как написано выше или примерно так, то вам надо будет:
переместить в файловую систему
а) аватары
б) картинки галереи
в) вложения
г) css

данный мануал для версии 3.7 для остальных будут отличаться директории хранения статики

Last edited by alleycat : 07-08-2008 at 08:02 AM. Reason: Добавлено сообщение
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
kerk
k0t
 
kerk's Avatar
Default
0

гут
тему прикрепил
 
 
Yoskaldyr
Специалист
Default
0

alleycat, Спасибо за хорошее описание. Кстати nginx, особенно последние версии, очень хорошо работает как основной веб-сервер для vb в режиме fast-cgi. Скорость работы такая-же как на апаче 2.2, но памяти потребляет в разы меньше, что очень критично для VDS хостинга.

P.S. Субъективно скорость даже выше чем на апаче, но видать это от настроек зависит

Last edited by Yoskaldyr : 07-22-2008 at 04:48 PM.
 
 
netwind
Гуру
 
netwind's Avatar
Default
2

вообще-то баян. тут есть тема про оптимизацию : http://vbsupport.ru/forum/showthread.php?t=3088 и там и про nginx было.

вот лучше придумай как раздавать аттачи (те которые доступны для скачки без регистрации) тем же nginx это будет круто.

nginx не мультитрэдный. он представляет собой совершенно другой подход к серверному ПО - конечный автомат обрабатывающий большое число открытых соединений в относительно небольшом числе потоков. а практически это даже лучше чем мультитредная архитектура.

отсутсвие форков не настолько хорошо как кажется на первый взгляд: из модулей апача может течь память, а особо сложные php-скрипты поднимают планку памяти (man 2 brk) и она потом так и остается задранной до помирания потомка apache. MaxRequestsPerChild 512, пожалуй, нормально будет.

ты сам себе противоречишь : пишешь про 10-15 потомков а MaxClients 256 - это очень даже некислый сервер должен быть. ddos такую конфигурацию засадит в своп и до сервера практически не достучишься.
вот 40-50 и достаточно. На дохлых VPS и того меньше.
 
 
alleycat
Продвинутый
Default
0

Quote:
Originally Posted by netwind View Post
вообще-то баян. тут есть тема про оптимизацию : http://vbsupport.ru/forum/showthread.php?t=3088 и там и про nginx было.

вот лучше придумай как раздавать аттачи (те которые доступны для скачки без регистрации) тем же nginx это будет круто.

nginx не мультитрэдный. он представляет собой совершенно другой подход к серверному ПО - конечный автомат обрабатывающий большое число открытых соединений в относительно небольшом числе потоков. а практически это даже лучше чем мультитредная архитектура.

отсутсвие форков не настолько хорошо как кажется на первый взгляд: из модулей апача может течь память, а особо сложные php-скрипты поднимают планку памяти (man 2 brk) и она потом так и остается задранной до помирания потомка apache. MaxRequestsPerChild 512, пожалуй, нормально будет.

ты сам себе противоречишь : пишешь про 10-15 потомков а MaxClients 256 - это очень даже некислый сервер должен быть. ddos такую конфигурацию засадит в своп и до сервера практически не достучишься.
вот 40-50 и достаточно. На дохлых VPS и того меньше.
раздача атачей nginx-ом не такая большая проблема, надо только булку заставить вместо чтения файла отдавать следющее:

Code:
header('Content-Type: application/oct-stream');
header('Content-Disposition: attachment; filename="'.$name.'"');
header('Content-Length: '.filesize($filename));
header("X-Accel-Redirect: /uploaded_files/".$uuid);
die();
nginx event-based скажем так, имеет на данный момент блокирующую запись, так или иначе количество воркеров(рабочих процессов обычно поддерживается на уровне > 8, 16, 32) от трэдов все равно никуда не уйдешь, плюс в том что памяти на соединение мы расходуем на порядки меньше.

про сервачок я себе не противоречу: там написано было что тазик менялся и та конфигурация которая сечас отличается от первоначальной, MaxRequestsPerChild и MaxClients на слабых тачках надо зарезать ога, это не написал.

так или иначе у меня стабильно 8 - 16 форков апача которые спокойно умирают после своей тысячи запросов.


зы если у когото есть желание попрогать могу помочь с написанием модуля под раздачу аттачей булкой.

alleycat добавил 01.08.2008 в 15:58
кстати о режиме фаст-цги:

есть свои приколы с урлами реврйтами и другими тонкостями, если использовать только булку то проблем как правило не возникает, а если у вас чтото с красивыми урлами и то придется писать заново реврайты для nginx-f

alleycat добавил 01.08.2008 в 16:15
ЗЫ2: Наиболее важным для меня было выровнять буфер приема передачи между апачем и нгинксом, мало кто знает что это, но с дефолтными настройками нгинкс очень часто будет отдавать 500ки на запросы с большими куками.

Last edited by alleycat : 08-01-2008 at 05:15 PM. Reason: Добавлено сообщение
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

alleycat, я эту идею пробовал. помогает только если форум варезный и файлы большие. в любом случае ведь запускается скрипт пхп для проверки прав доступа, подсчета числа просмотров и тд. мрак, одним словом.

Смысл моего предложения в том, чтобы записывать полностью доступные без регистрации файлы под специальными именами и генерировать на страничках ссылки прямо на файлы с аттачами.
 
 
alleycat
Продвинутый
Default
0

Я не стал так делать, хотя модуль замещающий стандартную систему аттачей по глупости писать начал, мне проще было написать с нуля простенькую файлопомойку и прикрутить ее к формуму, нежли е**** с такими вещами.

а наклыдные расходы, к сведению, на валидацию прав не столь велики, так что вариант с internal redirect для нгинкса оптимален. если так сильно хочется то можно хэндлер булки кастрировать на проверки и запросы и тогда все подряд будут качать как захотят с правильными именами и не напрягая сервак.

сопсно моя файлопомойка делает 2 запроса в любом случае, авторизация и права в первом и вторым мета и имя файла на отдачу, после чего отдает nginx-у редирект
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

ну понятно. продолжай боянить.
 
 
alleycat
Продвинутый
Default
0

Quote:
Originally Posted by netwind View Post
а наклыдные расходы, к сведению, на валидацию прав не столь велики, так что вариант с internal redirect для нгинкса оптимален. если так сильно хочется то можно хэндлер булки кастрировать на проверки и запросы и тогда все подряд будут качать как захотят с правильными именами и не напрягая сервак.
к чему это было ?

alleycat добавил 10.08.2008 в 05:00
последнее мое сообщение относилось не к той цитате что процетировалась.

ессесно относиться к
Quote:
ну понятно. продолжай боянить

Last edited by alleycat : 08-10-2008 at 06:00 AM. Reason: Добавлено сообщение
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

К тому, что по сути ничего нового в этой теме нет. Установка nginx уже обсуждалась давно и здесь и на других ресурсах.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 03:49 AM.


Powered by vBulletin® Version 3.5.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.