1. Мы продолжаем публиковать интересные статьи на тему SocialEngine 4. Одна из статей посвящена правильному выбору сервера для вашей социальной сети, а другая содержит советы по увеличению производительности платформы. Также мы добавили большую статью о пользовательских уровнях. Ознакомиться со статьями вы можете в разделе Вопросы и Ответы SocialEngine 4.
  2. Вам кажется, что ваша версия SocialEngine 4, работает медленно?

    Голосуйте. Пишите свою версию системы, железо на чем работает и количество пользователей. Будем увеличивать производительность :-) Подробнее

  3. В связи с участившимися случаями попыток продажи пользователями форума различных "сборок" коммерческих социальных платформ, обычно основанных на SocialEngine 3, вводится новое правило для форума. Запрещается создание тем или размещение в уже созданных предложений о продаже или размещение ссылок на сайты, где происходит продажа "сборок". Пользователи, которые продолжат свою коммерческую деятельность в данном направлении, будут заблокированы. Подробнее.

4.1.x Nginx+Apache - наилучшая связка для SE 4

Тема в разделе 'Моды / Хаки - Mods / Hacks', создана пользователем leonid_bt, 23 авг 2011.

  1. leonid_bt Автор темы User


    Оффлайн
    Сообщения:
    94
    Симпатии:
    0
    Рано или поздно перед администратором встает задача разгрузить back-end, которым как правило, является apache. Одной из альтернатив для front-end является легкий web сервер Nginx. Данная конфигурация дает особенно большой выигрыш при наличии подключений по медленным каналам связи (модем), так как ресурсы системы начинают использоваться для дела, а не ждать, пока будет получен запрос или отдан ответ клиенту.

    Преимущества архитектуры front-end/back-end

    В случае использования только apache, при наличии медленных подключений, последний большую часть времени просто ждет, либо пока будет полностью получен запрос, либо пока будет полностью передан ответ клиенту. При этом под каждое соединение будет выделено определенное количество памяти, и, как не трудно догадаться, общее количество одновременных подключений будет прямо пропорционально доступному объему памяти.

    В случае же front-end/back-end конфигурации ситуация немного иная: front-end ( в нашем случае, nginx) полностью обрабатывает входящий запрос, используя при этом минимум системных ресурсов. Передает запрос back-end'у (apache), быстро получает ответ и начинает передачу ответа клиенту. Таким образом, ресурсы, занятые под apache, были использованы только для того, чтобы сгенерировать запрошенный контент, и были сразу возвращены системе после завершения работы. А с клиентом общается лишь легкий и не требовательный к ресурсам front-end nginx.

    Общий вид схемы front-end/back-end


    В общем виде, http-соединение будет проделывать следующий путь:


    Код:
    HTTP Client  ---->  Front-End (nginx)  ---->  Back-End (apache)
    -----------  <----  -----------------  <----  -----------------
    1.2.3.4:80          192.168.0.1:80            192.168.0.1:8080

    В данном случае, fron-end и back-end располагаются на одной машине. В общем же случае, при необходимости они могут работать на разных машинах.

    Установка и настройка Nginx

    Установка Nginx


    Установка Nginx тривиальна, начиная с Lenny (5.0). До этого, чтобы поставить nginx версии 0.6 и выше, необходимо было собирать пакет вручную.

    Код:
    apt-get install nginx

    Запускаем nginx:


    Код:
    sudo /etc/init.d/nginx start

    Набираем в браузере: "http://ip_servera" (IP той машины, где был установлен nginx). Должно появиться приглашение nginx: "Welcome to nginx!".

    Настройка проксирования в Nginx

    Отключаем сайт по умолчанию:
    Код:
    sudo rm /etc/nginx/sites-enabled/default
    
    
    Корректируем конфигурационный файл:


    Код:
    sudo nano /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;
    }
    
    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  2;
        tcp_nodelay        on;
    
        gzip  on;
        gzip_comp_level 3;
        gzip_proxied any;
        gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    }

    Останавливаем nginx:

    Код:
    sudo /etc/init.d/nginx stop

    Создаем файл конфигурации proxy.conf:


    Код:
    sudo nano /etc/nginx/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_buffer_size           4k;
    proxy_buffers               4 32k;
    proxy_busy_buffers_size     64k;
    proxy_temp_file_write_size  64k;
    
    Настройка виртуального хоста в Nginx

    Создаем файл виртуального хоста:]

    Код:
    sudo nano /etc/nginx/sites-available/skripter.info

    Файл следующего вида:

    Код:
    upstream backend {
      # Адрес back-end'a здесь укажите ваш ip сервера
      server ip_servera:8080;  
    }
    
    server {
        listen   80;
        server_name www.skripter.info skripter.info;
    
        access_log /var/www/nginx_access.log;
        error_log /var/www/logs/nginx_error.log;
    
        # Перенаправление на back-end
        location / {
            proxy_pass  http://backend;
            include     /etc/nginx/proxy.conf;
        }
    
        # Статическиое наполнение отдает сам nginx
        # back-end этим заниматься не должен
        location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
            root /var/www/;
        }
    }
    
    Включаем новый хост:


    Код:
    sudo ln -s /etc/nginx/sites-available/skripter.info /etc/nginx/sites-enabled/skripter.info
    
    Установка и настройка Apache

    Установка Apache

    Установка проста:

    Код:
    apt-get install apache2 libapache2-mod-auth-mysql

    Настройка Apache

    Корректируем конфигурационный файл:

    Код:
    sudo nano /etc/apache2/apache2.conf

    Необходимо найти и скорректировать следующие строки (при отсутствии добавить):

    Код:
    # Таймаут 90 секунд
    Timeout 90
    
    # Выключаем KeepAlive
    KeepAlive Off
    
    # Имя сервера
    ServerName skripter.info

    Перезагружаем apache:

    Код:
    sudo apache2ctl graceful

    Проверяем корректную настройку apache, открываю в браузере: "http://IP_SERVERA" (IP той машины, где был установлен apache). Должно появиться "It works!".


    Настраиваем apache на работу с портом 8080, а не 80:

    Код:
    sudo nano /etc/apache2/ports.conf

    Должен иметь вид:


    Код:
    NameVirtualHost *:8080
    Listen 8080

    Перезагружаем apache, nginx:


    Код:
    sudo apache2ctl graceful
    sudo /etc/init.d/nginx start

    Настройка mod_rpaf

    Теперь, если посмотреть в логи apache, то там все запросы будут идти с адреса front-end'a. Чтобы это исправить, необходимо установить модуль mod_rpaf:

    Код:
    apt-get install libapache2-mod-rpaf

    И настроить его:


    Код:
    sudo nano /etc/apache2/mods-enabled/rpaf.conf

    Должен выглядеть примерно так:

    Код:
    <IfModule mod_rpaf.c>
        # Включаем модуль
        RPAFenable On
    
        # Приводит в порядок X-Host
        RPAFsethostname On
    
        # Адрес фронтенда (nginx)      
        RPAFproxy_ips 127.0.0.1 IP_SERVERA # здесь ваш  ip
    </IfModule>
    
    Перезагружаем apache:


    Код:
    sudo /etc/init.d/apache2 force-reload

    Настройка виртуального хоста в Apache

    Редактируем файл виртуального хоста:


    Код:
    sudo nano /etc/apache2/sites-available/default

    Приблизительно следующего содержания:

    Код:
    <VirtualHost *:8080>
       ServerAdmin webmaster@localhost
        
       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>
    
    Перезапускаем apache2

    Код:
    sudo /etc/init.d/apache2 reload
    Пример работы такой связки можно посмотреть здесь:
    http://vavangarde.by
    (CPU 2000Mhz x 3, 4096Mb memory,debian-5.0-x86_64)

    На этом все всем удачи!!! :)
  2. sader90 Novice member


    Оффлайн
    Сообщения:
    37
    Симпатии:
    0
    А что скажите про lighttpd?
  3. leonid_bt Автор темы User


    Оффлайн
    Сообщения:
    94
    Симпатии:
    0
    Честно говоря не пробовал,но думаю что лучше распределять на несколько потоков процессов.
    Фишка данной связки в способности выдерживать большие потоки посетителей,т.к. благодаря nginx, который выдает статичные файлы,которых около 60% от всей страницы,на апатч ложится задача только просчитывать php-файлы...
  4. Андрей_Dev1l User


    Оффлайн
    Сообщения:
    42
    Симпатии:
    6
    Версия SocialEngine:
    4.2.9
    Версия phpFox:
    3.4.0
    Версия Oxwall:
    1.4.0
    Пример работы такой связки можно посмотреть здесь:
    http://vavangarde.by
    (CPU 2000Mhz x 3, 4096Mb memory,debian-5.0-x86_64)
    Сайт на se4? По моему на se3... Для 4-й версии это все работает?
  5. dux86 User


    Оффлайн
    Сообщения:
    12
    Симпатии:
    0
    Nastroil vse kak po instrukzii, tol'ko v konze voznik vopros:

    a skripty to v kokuyu directory zalivat', pod apache ili nginx?
  6. Prado Challenge Everything


    Оффлайн
    • Admin
    Сообщения:
    3.191
    Симпатии:
    786
    Версия phpFox:
    3.0.0
    скрипт чего?
  7. dux86 User


    Оффлайн
    Сообщения:
    12
    Симпатии:
    0
    Lyuboj skript (socialengine, dle, jooml i t.d.)

    kuda imenno iz nuzhno zalivat' dlya togo 4toby vse rabotalo?

    t.e. po standartu idet sledu64aya svyzka.
    client --> apache --> <--Mysql ( v etom slu4ae zalivaem v "htdocs" apache dly togo 4tob mozhno bylo lazit' na sajte)

    sdes' zhe
    client --> nginx --><-- apache --><-- Mysql

Поделиться этой страницей

All rights reserved SocEngine.ru ©