Directadmin+nginx полный автомат

Доброго всем LOCALTIME ! 🙂

Решил поделиться с общественностью своими скриптами для связки и .

В свое время для снижения нагрузки на было решено поставить nginx. После некоторого гугления была сделана первая попытка связать панель и nginx. На тот момент скрипт умел совсем немного – только создавать и удалять конфигурационные файлы виртуальных хостов. Он не умел работать ни с поддоменами, ни с алиасами, не умел и переименовывать конфиги доменов.

Затем последовала вторая попытка. Этот скрипт уже был немного “умнее”. Он умел создавать, удалять не только домены, но и поддомены. Однако, после того, как количество вирт. хостов выросло и управляться с большим количеством доменов стало как-то трудно, было решено полностью переписать всю схему работы связки directadmin и nginx. Все домены/поддомены/алиасы будут описываться в map-файле, а в конфиге будут использоваться соответствующие переменные, тем самым будет использоваться всего один небольшой общий конфиг, в котором и описывается виртуальный хост.
“Особые” домены описываются в отдельных конфигурационных файлах.
Кроме того, логи для всех вирт. хостов будет писать nginx, освободим нашего монстра apache от этой обязанности и оставим ему писать только error_log. Что положительно скажется на производительности.

Сказано – сделано.
По моей просьбе и некоторому подобию ТЗ, мой друг Александр Русских написал совсем новый и удобный скрипт, который и будет использоваться в этой статье.
Еще одна моя просьба была направлена Кириллу Коринскому, который написал небольшой патч для nginx. Данный патч выдает 503 ошибку, если уровень load average системы выше заданного в конфиге значения. Да, это грубо, но зато может уберечь сервер от ухода в глубокий своп. Поэтому уровень LA необходимо указывать заведомо высокий.

Итак, поехали.

Часть первая (Если nginx уже установлен – смотрим вторую часть)
У нас в распоряжении сервер с установленной панелькой DirectAdmin (отличная, кстати, панель). Чтобы не делать из системы свалку, nginx будет ставиться из репозитария.

Добавляем репозитарий в список, импортируем ключи и ставим nginx:

# echo "deb http://ftp2..org.ua/debian-dou/ lenny main" >> /etc/apt/sources.list

# gpg --keyserver keys.gnupg.net --recv-keys 0A3D4789
gpg: requesting key 0A3D4789 from hkp server keys.gnupg.net
gpg: key 0A3D4789: public key "Debian.org.ua Custom Repository " imported
gpg: Total number processed: 1
gpg:               imported: 1

# gpg --armor --export 0A3D4789 | apt-key add -
OK

# aptitude update
# aptitude install nginx

Стоит заметить, что в этот пакет включено два неофициальных патча, которые описаны в блоге автора

После установки nginx не запустится – это нормально, так как на 80-м порту все еще работает apache.
Дальше будем приводить в порядок конфигурационные файлы apache и nginx.

Часть вторая – Настройка nginx.
Открываем файл /etc/nginx/nginx.conf и вносим изменения в секцию http {}

http {
 include       /etc/nginx/mime.types;
 default_type  application/octet-stream;

 log_format  main    '$remote_addr - $remote_user [$time_local] $host $request "$status" $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" [$user:$domain] "$upstream_response_time"';

 log_format  domain  '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';

 log_format  ip      '$remote_addr';
 log_format  bytes   '$body_bytes_sent';

 access_log   /var/log/nginx/access.log main;
 server_tokens off;
 reset_timedout_connection  on;
 ....
 ....
 include maps.conf;
 server {
        listen 1.2.3.4:80 default deferred;
        server_name _;

        location ~ /.svn/ {
            deny all;
        }
        # include custom_vhost.conf;
        include maps_vhost.conf;
    }
}

Описываемые форматы log-файла нужны для того, чтобы nginx писал логи для каждого вирт. хоста (apache будет писать только error_log)

В файле custom_vhost.conf – можно описать “особенные” домены, для которых нужны какие-то персональные дополнительные настройки.

Файл maps_vhost.conf – это и есть общий конфиг для всех доменов/поддоменов/алиасов:


    set $root  /home/$user/domains/$domain/public_html/$subdomain;
    set $domainlog  $domain.$subdomain;

    if ($subdomain = "") {
        set $root  /home/$user/domains/$domain/public_html;
        set $domainlog $domain;
    }
    if ($user = "") {
        set $root /var/www/;
        set $domainlog  ip;
    }
##  maintenance mode
#    error_page  403 404 500 502 503 504  /maintenance.html;
#    location = /maintenance.html  {
#         log_not_found on;
#         access_log off;
#         root  html;
#     }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {  root  html;  }

    location / {
        log_not_found on;
        root        $root;
        access_log  /var/log/httpd/domains/$domainlog.bytes bytes;
        access_log  /var/log/httpd/domains/$domainlog.log domain;
        access_log  /var/log/nginx/access.log main;

        proxy_redirect    off;
        proxy_set_header  Cookie    $http_cookie;
        proxy_set_header  Host      $host;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass        http://127.0.0.1:80;
    }
    location ~ /\.ht { deny  all; }

    location ~* ^/(webmail|squirrelmail|roundcube|phpMyAdmin)/.+\.(bmp|jpg|jpeg|gif|ico|cur|png|css|doc|txt|js|docx|rtf|ppt|pdf|svg)$ {
        expires     24h;
        root        /var/www/html;
        gzip   off;
        log_not_found off;
        access_log  /var/log/httpd/domains/$domainlog.bytes bytes;
        access_log  /var/log/httpd/domains/$domainlog.log domain;
    }

    location ~* ^.+\.(css|htc|js|bmp|jp?g|gif|ico|cur|png|doc|avi|txt|doc|rtf|swf)$ {
        expires     24h;
        root        $root;
        gzip   off;
        access_log  /var/log/httpd/domains/$domainlog.bytes bytes;
        access_log  /var/log/httpd/domains/$domainlog.log domain;
        log_not_found off;
   }

Map-файл с описанием доменов выглядит так:


map $http_host $user{
        hostnames;
        default       "";
        .adminco.org    "admin";
        .nginx.ks.ua     "admin";
        .site2.com        "user2";
        ....
}
map $http_host $domain {
        hostnames;
        default             "";
        .adminco.org    "adminco.org";
        .nginx.ks.ua     "nginx.ks.ua";
        .site2.com       "site2.com";
        ....
}
map $http_host $subdomain {
        hostnames;
        default             "";
        .blog.adminco.org      "blog";
        ....
}

Этот файл управляется скриптом generate_map.pl, о чем будет написано ниже.
Здесь я привожу немного сокращенное описание виртуального хоста, так сказать, для примера.

Первоначально “пустой” файл maps.conf имеет вид:


map $http_host $user{
        hostnames;
        default     "";
}
map $http_host $domain {
        hostnames;
        default     "";
}
map $http_host $subdomain {
        hostnames;
        default     "";
}

Если на Вашем сервере уже имеются созданные юзеры с их доменами, обратите внимание на UPDATE 2 в конце статьи.

Часть третья – Настройка custom в Directadmin.
Переходим в /usr/local/directadmin/scripts/custom
В этом каталоге есть файл README, где описан каждый custom-скрипт, который может быть выполнен панелью DirectAdmin. Нам нужно будет создать следующие скрипты:

touch user_destroy_post.sh domain_create_post.sh \
        domain_destroy_post.sh  domain_change_post.sh \
        subdomain_create_post.sh  subdomain_destroy_post.sh \
        domain_pointer_create_post.sh  domain_pointer_destroy_post.sh

Эти скрипты будут вызываться панелью при каждом добавлении/удалении домена/поддомена/алиаса или изменении имени домена.

Содержимое файлов.
Скрипт добавления домена – domain_create_post.sh

#!/bin/sh
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LANG=C
export LANG
export PATH

/usr/local/directadmin/scripts/custom/generate_map.pl -ad $username $domain
if [ $? -gt 0 ]; then
    exit 1;
fi
/etc/init.d/nginx  configtest > /dev/null
if [ $? -gt 0 ]; then
    exit 1;
else
    /etc/init.d/nginx reload
fi
exit 0;

Результат выполнения – добавление домена и имени юзера в мап-файл, с последующим релоадом nginx

Скрипт удаления юзера – user_destroy_post.sh

#!/bin/sh
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
LANG=C
export LANG
export PATH

/usr/local/directadmin/scripts/custom/generate_map.pl -dd $username $domain
if [ $? -gt 0 ]; then
    exit 1;
fi

/etc/init.d/nginx  configtest > /dev/null
if [ $? -gt 0 ]; then
    exit 1;
else
    /etc/init.d/nginx reload
fi
exit 0;

При вызове скрипт удаляет из map-файла пользователя, проверяет корректность конфигурации nginx и если все нормально – делает релоад nginx-у.

Аналогичные скрипты для создания/удаления алиасов и поддоменов.

Как видно из скриптов – все действия выполняются с помощью “generate_map.pl”
Этот скрипт отвечает за работу с мап-файлом для nginx-а.
Возможности скрипта:


(l) copyleft Olden Gremlin aka Alexander P. Russkih, oldengremlin(at)gmail.com, 2009-2010
Use: ./generate_map.pl [-d] [-c maps.conf] {[{-ad|-dd|-aa|-da|-as|-ds} {username}
 {domain} [newdomainname|subdomain|alias]] [...]}
Внимание! Важен порядок следования модификаторов именно в том порядке в котором он описан в Use.
Конфигурационные модицикаторы
        -d выводить в stdout diff итоговой работы
        -c maps.conf путь к файлу с конфигами maps (опционально)
"Циклические" командные модификаторы
        -ad добавить домен
        -rd переименовать домен
        -dd удалить домен и все поддомены в нем
        -aa добавить алиас alias к domain
        -da удалить алиас alias
        -as добавить subdomain к domain
        -ds удалить только subdomain

Идем дальше.
Готовим custom-шаблоны для виртуальных хостов Directadmin.
Скопируем шаблоны для дальнейней правки:

cd /usr/local/directadmin/data/templates; cp  ./virtual_host2* ./custom

в этих шаблонах виртуального хоста нужно изменить строку:

на

Также, уберем запись лог-файлов apache.
Заменим эти строки:

        CustomLog /var/log/httpd/domains/|DOMAIN|.bytes bytes
        CustomLog /var/log/httpd/domains/|DOMAIN|.log combined

на это:

        # CustomLog /var/log/httpd/domains/|DOMAIN|.bytes bytes
        # CustomLog /var/log/httpd/domains/|DOMAIN|.log combined

Аналогично нужно изменить шаблон поддомена
(файл /usr/local/directadmin/data/templates/custom/virtual_host2_sub.conf)

Часть четвертая – Настройка Apache.
Открываем файл /etc/httpd/conf/extra/httpd-vhosts.conf, находим эту строку:

Include /etc/httpd/conf/ips.conf

и заменяем на это:

Include /etc/httpd/conf/ips_cust.conf

Сохранияем изменения, копируем /etc/httpd/conf/ips.conf в /etc/httpd/conf/ips_cust.conf
В новом файле необходимо заменить все внешние ip, которые слушает апач на 80-м порту на одну строчку:

NameVirtualHost 127.0.0.1:80

В итоге этот файл может иметь примерно такой вид:


LogFormat "%O \"%r\"" homedir

NameVirtualHost 127.0.0.1:80

NameVirtualHost 1.1.1.1:443
NameVirtualHost 1.2.3.4:443


        SSLEngine on
        SSLCertificateFile /etc/httpd/conf/.crt/server.crt
        SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
        ServerName shared.domain
        ScriptAliasMatch ^/~([^/]+)/+cgi-bin/+(.*) /home/$1/public_html/cgi-bin/$2
        AliasMatch ^/~([^/]+)(/.*)* /home/$1/public_html$2
        DocumentRoot /home/admin/domains/sharedip
        SuexecUserGroup admin admin
        CustomLog /var/log/httpd/homedir.log homedir



        SSLEngine on
        SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
        SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
        ServerName shared.domain
        ScriptAliasMatch ^/~([^/]+)/+cgi-bin/+(.*) /home/$1/public_html/cgi-bin/$2
        AliasMatch ^/~([^/]+)(/.*)* /home/$1/public_html$2
        DocumentRoot /home/admin/domains/sharedip
        SuexecUserGroup admin admin
        CustomLog /var/log/httpd/homedir.log homedir

Делается это для того, чтобы apache слушал 80 порт только локально и при добавлении или измении ip адресов в Directadmin-е не заменялся этот конфиг. В данной реализации конфига SSL-соединения обрабатываются самим apache, поэтому настройки SSL не меняются.

Просим панель пересоздать пользовательские httpd.conf файлы:

echo “action=rewrite&value=httpd” >> /usr/local/directadmin/data/task.queue

После пересоздания пользовательских httpd.conf можно проверить корректность вновь созданных конфигов и перезапустить apache и nginx:

# apachectl configtest ; nginx -t
Syntax OK
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful

В итоге, apache будет слушать локальный 80 порт и внешний 443.
На внешних 80 портах будет жить nginx, который принимает и обслуживает запросы клиентов.
Статика полностью отдается nginx-ом, а скрипты отправляются на обработку apache.

Дополнительно в конфигурации вирт.хоста nginx-а можно добавить ограничение по количеству запросов в секунду, ограничить количество запросов к апаче с одного IP, кеширование и т.д. и т.п.

Данная конфигурация уже больше года довольно успешно работает более, чем на 10-ти серверах.

Кому будет интересно – оставляйте коментарии, скрипт отправлю по email.
Так же выслушаю любые поправки, коментарии, дополнения и т.д.

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

cd /usr/local/directadmin/custombuild
wget http://www.stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Теперь чуть подправим конфиг httpd.conf. Добавим в начало файла:

LoadModule rpaf_module /usr/lib/apache/mod_rpaf-2.0.so

RPAFenable On
RPAFproxy_ips 127.0.0.1  x.x.x.x
RPAFsethostname On
RPAFheader X-Forwarded-For

x.x.x.x – внешний IP адрес сервера. Если их несколько – добавляются через пробел

Записываем изменения и проверяем синтаксис:

apachectl configtest
Syntax OK

UPDATE 2.
Один из читателей попросил скриптик для генерации файла maps.conf для уже существующих аккаунтов на сервере.
Что ж, я не сильный скрипто-писатель, тем не менее скрипт набросал.
Скрипт пересоздает полный maps.conf используя данные из /usr/local/directadmin/data/users/

Взять можно по этой ссылке.

Вот теперь все 🙂

Благодарности.
Хочу выразить спасибо Игорю Сысоеву за создание и написание nginx,
Александру Русских за написание скрипта,
Кириллу Коринскому за написание патчей,
клиентам, которые согласились устраивать эксперименты на их серверах,
а также компании Google за их поисковик 🙂

© Просто БлогЪ, AdminCo, 2010
Используя информацию этой статьи, уважайте чужой труд – указывайте ссылку на источник и авторов

237 comments on “Directadmin+nginx полный автомат

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

    • Вроде полегчало, странно только куда оно самостоятельно делось, ибо изначально присутствовало, потому и внимание наверное не обратил, СПАСИБО ОГРОМНОЕ, что ткнули носом. Теперь пойду логи устаканивать.

  2. Доброго времени суток!
    Ознакомился со статьей и всеми комментами, заинтересовался весьма. Есть большое желание поковырять этот скрипт. Буду признателен, если вышлите на мыло.

  3. Вроде сделал все по описанию, но при добавлении второго домена, при обращении к нему автоматически редиректит на первый. Т.е. какой бы я домен я не открывал в браузере, все равно отрисовывается страничка первого. Что я мог упустить?

  4. вопрос, мне чтобы считать трафик по сайтам, необходимо проксировать не локалхост, а на внешний адрес, но по другому порту, какую переменную или несколько перемнных мне необходимо указать в значении proxy_pass?
    Чтото типа
    proxy_pass http://$domain:8081
    или как мне решить такую задачу. чтото вообще зациклился на этом…

    • Панелька (directadmin) сама считает http-трафик для каждого домена на основании данных из лог-файла /var/log/httpd/domains/имя_домена.bytes.
      Как я писал в статье, апач не занимается ведением логов (кроме error_log), все логи ведет nginx.
      Вот эта строка в каждом локейшене:
      access_log /var/log/httpd/domains/$domainlog.bytes bytes;
      и пишет кол-во байт отданных от сайта.

      Если этот лог не ведется – смотрите error.log и проверьте права на запись в /var/log/httpd/domains/ для пользователя из-под которого работает nginx

  5. Нашел такую багу всей этой системы:
    nginx после такой настройки пытается писать логи в папку /var/log/httpd/domains по каждому домену, но directadmin создает все файлы там с правами -rw-r–r– root:apache. Nginx же по дефолту работает от пользователя nginx, посему он не может писать логи в эти файлы.
    Делаем следующее:
    1. в конфиге nginx меняем User на пользователя apache/httpd/www-data (ну или от какого у вас там выполняется апач)
    2. в скриптах предложенных админом нужно вснести следующие поправки. В скрипты:
    /usr/local/directadmin/scripts/custom/domain_create_post.sh
    /usr/local/directadmin/scripts/custom/domain_change_post.sh
    /usr/local/directadmin/scripts/custom/subdomain_create_post.sh
    перед строчкой exit 0; добавить строку:
    chown -R apache:apache /var/log/httpd/domains/*

    Этоо избавит нас от множества проблем с логированием и учетом трафика

    • Ну это не совсем баг, скорее упущение данного момента в статье. Права на запись в /var/log/httpd/ у меня с помощью ACL выставлены.

      Я описал сам принцип, а дальше – у каждого уже свой “напильник”, которым можно допилить под себя как хочется.

      В любом случае я рад, если эта статья Вам помогла.

  6. ./rewrite_all_maps.sh: line 26: /usr/local/directadmin/scripts/custom/generate_map.pl: No such file or directory

    скрипт откуда взять можно? или он дефолтовый?

  7. Попробую сделать на своем сервере. Можно и мне выслать generate_map.pl? 🙂 Заранее благодарен!

  8. Спасибо большое за такую основательную статью.

    Ну и можно мне тоже скрипт? 🙂 Спасибо заранее.

  9. Присоединяюсь! Статья превосходная, собираюсь сделать у себя так же! Можно и мне скрипт? И почему бы не выложить его для свободного скачивания?

  10. Вопрос ко всем, кто просил скрипт – кто-то использует в продакшене все то, что описано в статье ?
    С какими проблемами кто столкнулся и как они были решены ?
    Прошу отписаться в каментах.

    • Я ещё не использую, но во вторник буду ставить Directadmin на новый сервер. Сидел вот ломал голову и гугл, как nginx поженить с DA и наткнулся на вашу статью. 🙂

      Очень прошу отправить мне скрипт – торжественно клянусь выдать полный отчёт по установке и использованию!

      зы
      Клятва будет выполнена хотя бы потому, что, видимо, буду морочить голову ещё в процессе установки. 🙂

      Заранее спасибо.

  11. Прочитав еще несколько постов, увидел что пользователи просят прислать файл generate_map.pl на почту.
    Пожалуйста, автор статьи, вышлете мне этот скрипт, и другие скрипты тоже можно.

    Заранее спасибо.

  12. Здравствуйте.

    настроил как описано в статье помимо прочих нюансов о которых спрошу позже возник такой вопрос. nginx не отдает статический контент. Если закоментировать секцию
    location ~* ^.+\.(css|htc|js|bmp|jp?g|gif|ico|cur|png|doc|avi|txt|doc|rtf|swf)$ {
    expires 24h;
    root $root;
    gzip off;
    access_log /var/log/httpd/domains/$domainlog.bytes bytes;
    access_log /var/log/httpd/domains/$domainlog.log domain;
    log_not_found off;
    }
    то страницы отображаются нормально

    • закоментируйте директиву
      log_not_found off;
      и проверьте в error.log откуда nginx пробует отдать статику.
      Скорее всего в $root некорректный путь формируется

    • Сразу не досмотрел
      if ($user = “”) {
      set $root /var/www/html;
      set $domainlog ip;
      }

      вот откуда этот /var/www/html
      значит переменная $user не определена, куда дальше копать???

      • Проверяйте корректность map-файла

        Прежде всего надо создать пустой map-файл.
        Именно по его данным строится полный путь в статике.

        • Я создавал maps.conf средствами Вашего скрипта для существующих юзеров/доменов. Сразу не получилось. Но том пройшло удачно но кроме maps.conf было создано еще много maps.con~34453465345~ кажется так они назывались я решил что это результат работы скрипта – временные файлы которые он почему то не удалил и я их стер вручную оставив только maps.conf.
          Если я что то сделал не так то прошу более подробно описать поцесс создания этого файла.

          p.s. кстати мне вручную пришлось удалять в скрипте generate_map.pl в конце строк виндовый перевод строки, а то с ними не хотело работать

          p.p.s Делаю все это на продакшине

      • Скрипт НЕ создает map-файл. Об этом написано в статье.
        Пустой файл нужно создать вручную, после чего уже можно использовать.
        Проверьте, чтобы в начале каждой из трех секций были эти строки:
        hostnames;
        default “”;

        после которых уже должны идти данный о доменах, пользователях и поддоменах.

      • Да упустил этот момент после добавления этих строк в логах теперь правельные пути но картики все равно не отдает

        2012/11/27 16:10:34 [error] 3704#0: *1420 testing “/home/***/domains/***/public_html” existence failed (13: Permission denied) while logging request, client: 95.105.19.117, server: _, request: “GET /pic/incast.png HTTP/1.1”, host: “****”, referrer: “http://****/persona/236/nikolett-sheridan/index.html”

        • Permission denied – nginx не имеет прав доступа к файлам.
          разрешите пользователю, из под которого работает nginx, чтение файлов.

        • Возможно nginx не может войти в каталог (/home/user или /home/user/domains/…)

          Как вариант – добавьте nginx в группу, которой состоит apache

    • Запустил nginx от того же пользователя что и апач заработало.

      теперь у меня 3 вопроса осталося

      1.что мне делать с файлами
      maps.conf~1354026471.4099~
      maps.conf~1354026472.4146~

      которые создаются в результате работы скрипта который по существующим пользователям создает maps.conf

      2. Я FreeBSD-ник и я не знаю как мне поставить rpaf_module в cent_os

      3. можна на почту скрипты
      user_destroy_post.sh
      domain_create_post.sh
      domain_destroy_post.sh
      domain_change_post.sh
      subdomain_create_post.sh
      subdomain_destroy_post.sh
      domain_pointer_create_post.sh
      domain_pointer_destroy_post.sh

      И какие на них права должны стоять и владелец???

    • wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
      –2012-11-27 17:59:06– http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
      Resolving stderr.net… 173.8.116.123
      Connecting to stderr.net|173.8.116.123|:80… failed: Connection timed out.
      Retrying.

      –2012-11-27 18:02:16– (try: 2) http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
      Connecting to stderr.net|173.8.116.123|:80… failed: Connection timed out.
      Retrying.

      –2012-11-27 18:05:27– (try: 3) http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
      Connecting to stderr.net|173.8.116.123|:80… failed: Connection timed out.
      Retrying.

      –2012-11-27 18:08:39– (try: 4) http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
      Connecting to stderr.net|173.8.116.123|:80…

  13. 1. эти файлы можно удалить – это бакапы предыдущего map-файла

    2. в статье описан процесс сборки rpaf модуля, пожалуйста, посмотрите внимательно

    3. в этих файлах Вы сами пишите что Вам необходимо – это стандартные файлы, которые может использовать ДА.
    Внутри каталога /usr/local/directadmin/scripts/custom/ есть README с описанием за что отвечает каждый файл и какими параметрами он оперирует.
    Свои скрипты дать не могу, т.к. у меня там многое чего используется, не связанного с nginx.
    Однако, пример скриптов при создании/удалении аккаунта описан в статье.
    Владелец файлов – diradmin, права 700

  14. Выражаю автору статьи огромную благодарность за написание статьи, за оказанную помощь в настройке сервера и за ангельское терпение.

    Почет и уважуха

  15. Здравствуйте.

    Возникал такая проблема

    этот код не работает и тут интересная штука, php в себя считывает файл полностью и если его сохранить
    $text=file_get_contents(“1228980608.swf”);
    $filew=fopen(“test.swf”,w);
    fwrite($filew, $text);
    то сохраняет все с точностью до байта, а вот если его принтить, то печатает “не правильно”

    плюс если убрать header(‘Content-type: application/x-shockwave-flash’ и сохранить все символы что выводит браузер в файл, то файл получается размеров 14кб, а должен быть 162

    • Вот насчет php я не особо…
      Попробуйте убрать обработку swf из
      location ~* ^.+\.(css|htc|js|bmp|jp?g|gif|ico|cur|png|doc|avi|txt|doc|rtf|swf)

      • Это первое что пришло в голову

        но методом научного тыка выяснили что не хватало

        client_max_body_size 40m;
        client_body_buffer_size 256k;

        proxy_connect_timeout 120;
        proxy_send_timeout 120;
        proxy_read_timeout 120;

        proxy_buffer_size 40m;
        proxy_buffers 4 40m;
        proxy_busy_buffers_size 40m;
        proxy_temp_file_write_size 40m;

        • Можно создать отдельный конфиг для этого домена.

        • Я просто хоть уже и освоился немного с nginx но еще не очень хорошо понимаю структуру

          Нужно секцию server создавать или location ??

        • нужно создать секцию server { }
          сервера описываются в секции server {}
          http://nginx.org/ru/docs/http/ngx_http_core_module.html#server

          Что бы лучше понимать как работает nginx необходимо ознакомиться с документацией.
          Благо дело, она на русском 🙂

  16. Хотелось бы настроить на своем маленьком сервере nginx, но нигде не нашел файла generate_map.pl

    Буду благодарен, если сможете отправить скрипт на email
    Заранее спасибо.

  17. # service nginx restart
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: [emerg] bind() to 1.2.3.4:80 failed (99: Cannot assign requested address)
    nginx: configuration file /etc/nginx/nginx.conf test failed

    помогите плс (

  18. Здравствуйте.

    Тестирую свой веб сервер (nginx настроен по этой статье) онлайн сервисом. В результатах он мне сообщает о недоработках которые нужно устранить. одна из них это что “Отключена поддержка открытого соединения”
    и ниже расшифровкаЖ “Разрешите веб-серверу поддерживать открытое соединение (KeepAlive)”.

    Сервер CentOS apache 2.2 + nginx 1.3.11

    Я сразу бросился смотреть конфиги апача на предмет “keepalive on” и действительно он был выключен. Но включив и пройдя еще раз тест ситуация не поменялась + погугулив я понял что в бекенде (тоесть в апаче) KeepAlive не влияет на соединения.

    Тогда я начал ковырять nginx но не нашел как в нем настроить “поддерживать открытое соединение” (гуглил, но наверное неправильно формулировал вопрос).
    Отсюда вопрос, правильно ли я сделал выводы по поводу апача, и как настроить nginx что бы он поддерживал открытые соединения.

    • Новые версии nginx поддерживают keep alive соединения с бекендом.
      Но это не то и не всегда нужно.

      Николай, в основном конфиге включите keepalive. Этого должно быть достаточно

      • А к новым 1.3.11 относится???

        А как в основном конфиге nginx включить keepalive??
        у меня все что есть с keepalive это keepalive_timeout 300;

  19. Всплыл жук,- если удалить последний домен с сервера, то в файле maps.conf в разделе map $http_host $user
    пропадают строки
    hostnames;
    default “”;
    И если создать после этого домен, то строчка с доменом появляется, а эти строки нет, и nginx начинает пытаться отдать статику не из нужного каталога, а из каталога по-умолчанию. Только после добавления строк вручную все начинает работать как надо.

  20. Он сейчас не нужен в новых версиях DA кастомбила 2.x там и apache_nginx можно ставить в options.conf указать если, но ставися криво предупреждаю!

1 Pings/Trackbacks for "Directadmin+nginx полный автомат"

Залишити відповідь до Николай Скасувати відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*