Доброго всем LOCALTIME ! 🙂
Решил поделиться с общественностью своими скриптами для связки directadmin и nginx.
В свое время для снижения нагрузки на apache было решено поставить nginx. После некоторого гугления была сделана первая попытка связать панель и nginx. На тот момент скрипт умел совсем немного – только создавать и удалять конфигурационные файлы виртуальных хостов. Он не умел работать ни с поддоменами, ни с алиасами, не умел и переименовывать конфиги доменов.
Затем последовала вторая попытка. Этот скрипт уже был немного “умнее”. Он умел создавать, удалять не только домены, но и поддомены. Однако, после того, как количество вирт. хостов выросло и управляться с большим количеством доменов стало как-то трудно, было решено полностью переписать всю схему работы связки directadmin и nginx. Все домены/поддомены/алиасы будут описываться в map-файле, а в конфиге будут использоваться соответствующие переменные, тем самым будет использоваться всего один небольшой общий конфиг, в котором и описывается виртуальный хост.
“Особые” домены описываются в отдельных конфигурационных файлах.
Кроме того, логи для всех вирт. хостов будет писать nginx, освободим нашего монстра apache от этой обязанности и оставим ему писать только error_log. Что положительно скажется на производительности.
Сказано – сделано.
По моей просьбе и некоторому подобию ТЗ, мой друг Александр Русских написал совсем новый и удобный скрипт, который и будет использоваться в этой статье.
Еще одна моя просьба была направлена Кириллу Коринскому, который написал небольшой патч для nginx. Данный патч выдает 503 ошибку, если уровень load average системы выше заданного в конфиге значения. Да, это грубо, но зато может уберечь сервер от ухода в глубокий своп. Поэтому уровень LA необходимо указывать заведомо высокий.
Итак, поехали.
Часть первая (Если nginx уже установлен – смотрим вторую часть)
У нас в распоряжении сервер с установленной панелькой DirectAdmin (отличная, кстати, панель). Чтобы не делать из системы свалку, nginx будет ставиться из репозитария.
Добавляем репозитарий в список, импортируем ключи и ставим nginx:
# echo "deb http://ftp2.debian.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/html;
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 script в 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/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
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
Используя информацию этой статьи, уважайте чужой труд – указывайте ссылку на источник и авторов
Точно 🙂 спасибо!
Хотя помоему панелька что то колдует нужно будет файлы скриптов проверить:)
А то может накосячил я чего по ночи 🙂
Ещё раз огромное Вам спасибо!
Всем буду рекомендовать Ваш блог:)
и кстати готов немного пожертвовать на развитие сайта 🙂
только скажите кошелёчек)
😀 спасибо.
С Вашего позволения, эти средства направлю на поддержку проекта Debian GNU/Linux в Украине.
Без проблем , для хороших людей и специалистов не пожадничавших своих знаний, всегда пожалуйста 🙂
когда создал пользователя и добавил домен, на этом домене скрипты работают но статика не отдается 404. http://gamepuzzle.ru/ все комменты выше прочитал не помогло =(
статика именно с указанного домена отдается.
А то, что не отображается – отдается совершенно с другого домена (portal.idxxxxx), вот с тем и разбирайтесь.
отличная статья! интересный вариант, очень заинтересовало разгрузить сервер.
Вышлите пожалуйста скрипт.
Зарание спасибо.
Большое спасибо за статью, давно искал нечто подобное, настолько толковый подход редко где можно встретить!
Пришлите скриптик пожалуйста.
Зарание Благодарю.
Хотелось бы видеть полную статью без использования Apache,
а только nginx+php-fpm.
спасибо
Алексей, в интернетах на подобные статьи (php-fpm+nginx) я натыкался довольно часто. Погуглите 🙂
У себя в блоге я описываю лишь те варианты, которые я делал лично… Правда не всё и не всегда.
В любом случае, спасибо за коментарий
😉
В скором времени напишу статью, как я побеждал nginx+php-fpm с виртуальными хостами и запуском пулов от отдельных пользователей, а также объединением серверов хостинга в кластер под управлением haproxy…. Ждите…
Спасибо, ждем-с 🙂
+1)
Спасибо за статью! Скиньте скриптик если не сложно !
Спасибо за полезный блог!
Можно ли заполучить скрипт ?
Ура!!! наконец то нашел как наиболее полно поставить nginx на directadmin. РЕСПЕКТ!
скинь скрипт на майл, заранее сенкс.
Добавил небольшой скриптик.
В случае если на сервере уже есть аккаунты пользователей или случайно удален файл maps.conf, можно воспользоваться скриптом приложенным в конце статье.
Здравствуйте. Можно и мне тоже в почту скрипты и описание. Заранее благодарю
Копируем шаблоны
#cd /usr/local/directadmin/data/templates
#cp virtual_host.conf custom/virtual_host.conf
#cp virtual_host2.conf custom/virtual_host2.conf
#cp virtual_host_sub.conf custom/virtual_host_sub.conf
#cp virtual_host2_sub.conf custom/virtual_host2_sub.conf
Теперь в скопированных нами файлах, нужно поправить порт. В каждом файле, строку:
заменить на:
Теперь у нас apache будет слушать виртуальные хосты на 8181 порту. А уж чтобы до него был доставлен трафик, мы позаботимся. Точнее позаботится об этом nginx.
Для добавления репозитория от CentALT создадим файл »/etc/yum.repo.d/centalt.repo» со следующим содержимом
[CentALT]
name=CentALT Packages for Enterprise Linux 5 – $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0
Далее выполняем команду установки
yum install nginx
добавить nginx в автозагрузку
chkconfig –levels 235 nginx on
Далее конфиг nginx.conf
worker_processes 3;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
access_log off;
error_log off;
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent”‘;
server {
access_log off;
error_log off;
listen 1.2.3.4:80; # IP:port которые будут слушаться
server_name *.*; #нам нет никакого различия на какой вирт-хост пришел запрос. Всё обрабатывает apache
charset windows-1251;
location /
{
proxy_pass http://1.2.3.4:8080/; # адрес который слушает apache.
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 8k; #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;
}
}
}
Нужно поправить файл /etc/httpd/conf/httpd.conf
Строку «Listen 80» заменить на «Listen 8080».
Нужно поправить файл /etc/httpd/conf/ips.conf.
«NameVirtualHost 1.2.3.4:80» на «NameVirtualHost 1.2.3.4:8080».
Ставим mod_rpaf.
Пересоздаем хосты.
Перезапускаем apache.
>worker_processes 3;
количество воркеров желательно выставлять = кол-ву ядер.
>server_name *.*;
Этого я вообще не понял, зачем так ??
В таком случае, уж лучше используйте стандартное:
server_name _;
Иил вообще не использовать эту директиву. В документации nginx написано об этом.
>charset windows-1251;
Пора уже избавляться от допотопных вещей 😉
Еще одно замечание. Вы никогда не увидите, что творится с nginx – у вас выключено ведение всех логов.
Копируем шаблоны
#cd /usr/local/directadmin/data/templates
#cp virtual_host.conf custom/virtual_host.conf
#cp virtual_host2.conf custom/virtual_host2.conf
#cp virtual_host_sub.conf custom/virtual_host_sub.conf
#cp virtual_host2_sub.conf custom/virtual_host2_sub.conf
Теперь в скопированных нами файлах, нужно поправить порт. В каждом файле, строку:
заменить на:
заменить на:
Вобщем в скопируемых шаблонах изменить порт на 8080
Не пому в чем разница. В вашем способе много манипуляций. Вариант который мой куда проще…
* который я написал вариант
Как избавить от этого
в логах пишет nginx
[crit] 25954#0: *496464 open() “/var/log/httpd/domains/ip.log” failed (13: Permission denied) while logging request, client:
Или разрешить писать пользователю, под которым работает nginx, писать в /var/log/http/domains/
Или чуть изменить конфигурацию вирт.хоста и не писать эти логи )
DeNiTo,
вариант проксировать полностью *все* на бекенд – намного проще. Именно так у меня и было три года назад )
Отличие моего способа, описанного в этой статье, в том что бекенд (апач) не занимается раздачей статики и не пишет access.log. Этим занимается nginx.
Я не вижу смысла в том, чтобы и без того нагруженный апач, занимался еще и раздачей отдачей статики, бесполезно затрачивая на это ресурсы.
Надеюсь Вы поняли разницу ?
admin, не очень. Поставил все по Вашей статье, но в логах пишет что что я дал и с алиасами проблема, при переходе ip/phpMyAdmin все нормально, а так /phpmyadmin нет. Нет картинок , js не работают и в орги пишет [crit] 25954#0: *496464 open() «/var/log/httpd/domains/ip.log» failed (13: Permission denied) while logging request, client:
Подскажите пожалуйста как исправить?
* логи
Я поставлил mod_ruid2 может из-за него что?
в linux “phpMyAdmin” и “phpmyadmin” – это два *разных* значения.
Создайте симлинк phpmyadmin на phpMyAdmin, проблемы с картинками не будет
Попробывал, но результата нет…
В локейшне
location ~* ^/(webmail|squirrelmail|roundcube|phpMyAdmin)/…….
добавьте
location ~* ^/(webmail|squirrelmail|roundcube|phpMyAdmin|phpmyadmin)/.
Admin, пробывал и так тоже…
Все равно картинки не отображает а при переходе
http://site.ru/phpmyadmin/themes/original/img/b_home.png – 404
http://site.ru/phpMyAdmin/themes/original/img/b_home.png – так нормально
и в логи пишет
[crit] 25954#0: *496464 open() «/var/log/httpd/domains/ip.log» failed (13: Permission denied) while logging request, client: мой IP
ну, допишите location для /phpmyadmin
Например так:
Не помогает…
покажите вывод:
nginx -t
nginx -V
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx: nginx version: nginx/0.9.3
nginx: built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
nginx: TLS SNI support disabled
nginx: configure arguments: –user=nginx –group=nginx –prefix=/usr/share/nginx –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –http-client-body-temp-path=/var/lib/nginx/tmp/client_body –http-proxy-temp-path=/var/lib/nginx/tmp/proxy –http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi –pid-path=/var/run/nginx.pid –lock-path=/var/lock/subsys/nginx –with-http_secure_link_module –with-http_random_index_module –with-http_ssl_module –with-http_realip_module –with-http_addition_module –with-http_sub_module –with-http_dav_module –with-http_flv_module –with-http_gzip_static_module –with-http_stub_status_module –with-http_perl_module –with-http_geoip_module –with-mail –with-mail_ssl_module –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables’ –with-ipv6 –with-file-aio –add-module=/builddir/build/BUILD/nginx-0.9.3/nginx-upstream-fair –add-module=/builddir/build/BUILD/nginx-0.9.3/nginx-upload-progress-module –add-module=/builddir/build/BUILD/nginx-0.9.3/mod_zip-1.1.6 –add-module=/builddir/build/BUILD/nginx-0.9.3/nginx_upload_module-2.2.0 –add-module=/builddir/build/BUILD/nginx-0.9.3/nginx_mod_h264_streaming-2.2.7
поправка:
смотрите логи. там будет написано, что происходит.
Скрин
http://i12.fastpic.ru/big/2011/0116/74/cdd42f104ce022a55a0bedc86a2aae74.png
-alias /var/www/html/phpMyAdmin/;
+alias /var/www/html/phpMyAdmin/$1;
куда это?
в локейшен с phpmyadmin:
Спасибо, разобрался! Скажите R кошелек свой, скину сколько-нибудь )
отписал на email.
2011/01/16 16:07:07 [crit] 11592#0: *22 open() “/var/log/httpd/domains/ip.log” failed (13: Permission denied) while logging request, client: мой IP, server: _, request: “GET /phpmyadmin/themes/original/img/b_home.png HTTP/1.1”, host: “site.ru”
По поводу прав я уже писал чуть выше.
Или дать права на запись пользователю под которым работает nginx или не логировать запросы.
admin, дизайн лучше, молодец!
Вопрос, как отключить пинг CentOS не подскажите?
офф-топ, однако.
man iptables
Да, уже нашел как, спасибо, сорри за фоотопик не большой)
Здравствуйте.
А не подскажете как можно получить перловый скрипт генератор?
В любом случае спасибо.
Скрипт отправил на указанный email.
да! где перловый скрипт генератор??? (на эту почту пошли те плиз и опубликуйте на сайте)
Sergey, честно говоря, вот из-за такого отношения и не выкладываю.
Извините, разве Вам тут кто-то чем-то обязан ? 🙂
Вечером, когда будет время, отправлю на указанный емаил.
“опубликуйте на сайте”
категоричность просто убивает 🙁
а где волшебное слово? (“бегом!” не подходящий вариант)
А не могли бы и мне отправить, если не трудно?
Заранее благодарю
Отправил.
Здравствуйте, не могли бы вы выслать скрипт-генератор?
И вам отправил
admin, хотелось бы видеть в вашем блоге как покрестить DirectAdmin+nginx+mpm-itk и если стоит уже mod_ruid2, очень полезная статья бы была, все перерыл, нормальных манов нет вообще.
DeNiTo, а в чем проблема скрестить DA+nginx+ruid2 ?
Вся инфа есть, просто собрать все до кучи.
У меня именно так и работает. Правда, я использую еще и ACL, т.к. у меня nginx работает под своим юзером.
Что касается itk, то не использую.
Да в том то и дело, что нужен itk чтобы весь сервер не ложили когда досить начинают или грузить апач. Ничего не нашел в инете подходяшего.
Ну если нужен, то гуглить
как пример: http://kaba.org.ua/articles/directadmin-sborka-apache-s-mpm-itk/
DA+nginx+ruid2 стоит, нужен mpm-itk чтобы в случаее чего не весь сервер ложился, а только сайт “жертвы” или кто привышает лимиты установленные.
Был я там, там патч ошибки выдает
На форуме SE еще можно посмотреть: http://forum.searchengines.ru/showthread.php?t=517232
Я все перегуглил, везде патч берется с одного и того же ресурса.
Патч берется оттуда, кто его сделал.
Исправляйте ошибки, установите все нужные dev-пакеты и т.д.
И да, при использовании itk, Вам mod_ruid уже совсем не нужен.
admin, спасибо, ладно, думаю придумаю что-нибудь все же…
что вы думаете о плагине – http://up24x7.com.ua/archives/6 ?
Любая реализация имеет право на жизнь, если выполняет свои функции.
можно как-то получить файл generate_map.pl ? Спасибо!
Zak, отправил скрипт.
Очень благодарен, почему то $user не подхватывает, заворачивает root в /var/www/html/
Zak, посмотрите каменты, начиная вот отсюда:
http://adminco.org/2010/08/directadmin-nginx-polnyiy-avtomat/comment-page-1/#comment-1979
Если у Вас так же, проверьте, чтобы секции были правильно описаны.
hostnames;
default “”;
должны быть в каждой секции
поправил прежде чем написать, полные пути в инклюдах тоже написал, результат нулевой, причём закоментив месо где определяется $root в отсутствии $user , получаю в логи
open() “/home//domains//public_html/*” failed (2: No such file or directory),
nginx/0.8.53
include /etc/nginx/maps.conf;
server {
listen 80 default deferred;
server_name _;
# location ~ / {
# deny all;
# }
# include custom_vhost.conf;
include /etc/nginx/maps_vhost.conf;
}
Формат файла именно такой, как Вы написали, без закрывающих скобок ?
nginx -t – что пишет ?
конечно с закрывающей, тазик не мой
nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
Zak, если удобно, отправьте мне на мыло Ваши конфиг-файлы. приватные данные в конфигах можно заменить на что то другое.
выше не верно написал, listen 81 в конфиге…
спасибо за помощь, ошибка была в следствии использования адреса порта в адресной строке http://domain.ru:81/ регулярка соответственно в имя домена засовывала domain.ru:81 а такого естественно нет…
скиньте плз ваш generate_map.pl
Мил человек, спасибо за статью! то, что нужно. сейчас этим самым и занимаюсь, и задумался над тем, как же все таки реализовать root в локейшенах, которые отвечают за статику, которые по сути по одному пути находятся, но тем не менее уникальны.. regexp не поможет. и тут вижу – о, красота!
set $root /home/$user/domains/$domain/public_html/$subdomain;
Автор, помогите скриптом generate_map.pl, буду благодарен очень!)
скрипт всем отправил.
спасибо админу!) буду сегодня настраивать мапы на freebsd8, о результатах отпишу сюда же)
поделитесь скриптом generate_map.pl, буду благодарен очень!)
(kovtun ет complex.lviv.ua)
Тоже не отказался бы от скрипта.
Оправил.
Спасибо, будем пробовать
Вопрос – возможно по конкретнее по части custom скриптов, не совсем понятно “Аналогичные скрипты для создания/удаления алиасов и поддоменов.”?
при любых действиях с доменами (поддоменами или алиасами) необходимо изменить данные в map-файле. Это делается с помощью custom-скриптов, которые надо создавать самому. Пример подобного скрипта описан в статье.
Что именно Вам не понятно ?
В частности не понятно что писать в файлах:
domain_change_post.sh
domain_pointer_create_post.sh
domain_pointer_destroy_post.sh
остальные по аналогии сделал, работают
Если совсем коротко, то вот это надо использовать:
> domain_change_post.sh
/usr/local/directadmin/scripts/custom/generate_map.pl -rd $username $domain $newdomain
> domain_pointer_create_post.sh
/usr/local/directadmin/scripts/custom/generate_map.pl -aa $username $domain $from
> domain_pointer_destroy_post.sh
/usr/local/directadmin/scripts/custom/generate_map.pl -da $username $domain $from
В файле /usr/local/directadmin/scripts/custom/README описаны все переменные, которые могут быть использованы в custom-скриптах.
Спасибо, то что надо.
Появился вопрос – после обновления nginx до 0.8.53 перестала отдаваться статика со всех хостов описаных в maps.conf (в почтовых интерфейсах, pma и т.д. всё отдаётся). Собрано вроде как с http_map_module (по крайней мере не отключал, установлен из репозитария), воплей со стороны nginx никаких (логи чистые). Не могу понять в чём косяк, до обновиловки всё ок.
На всякий пожарный – Centos 5, nginx -V:
nginx version: nginx/0.8.53
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
TLS SNI support disabled
configure arguments: –user=nginx –group=nginx –prefix=/usr/share/nginx –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –http-client-body-temp-path=/var/lib/nginx/tmp/client_body –http-proxy-temp-path=/var/lib/nginx/tmp/proxy –http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi –http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi –http-scgi-temp-path=/var/lib/nginx/tmp/scgi –pid-path=/var/run/nginx.pid –lock-path=/var/lock/subsys/nginx –with-http_ssl_module –with-http_realip_module –with-http_addition_module –with-http_xslt_module –with-http_image_filter_module –with-http_geoip_module –with-http_sub_module –with-http_dav_module –with-http_flv_module –with-http_gzip_static_module –with-http_random_index_module –with-http_secure_link_module –with-http_degradation_module –with-http_stub_status_module –with-http_perl_module –with-mail –with-file-aio –with-mail_ssl_module –with-ipv6 –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables’ –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables’
nginx -t
не ругается ?
Мап файл и все конфиги можете прислать на емаил ?
nginx -t
the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
всё чисто до безобразия, конфиги какие именно?
да, и куда отправить?
я Вам отписал на емаил
Не идёт, повисло в очереди
Положил на http://….ru/configs.zip
получил, смотрю
Cyberbob, у Вас некорректный формат мап-файла.
Добавьте в каждую секцию:
hostnames;
default “”;