<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Мануалы Linux &#187; Apache</title>
	<atom:link href="http://howtolinux.ru/category/howtos/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://howtolinux.ru</link>
	<description></description>
	<lastBuildDate>Wed, 08 Sep 2010 06:22:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Устнавливаем Drupal</title>
		<link>http://howtolinux.ru/2010/05/03/%d1%83%d1%81%d1%82%d0%bd%d0%b0%d0%b2%d0%bb%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-drupal/</link>
		<comments>http://howtolinux.ru/2010/05/03/%d1%83%d1%81%d1%82%d0%bd%d0%b0%d0%b2%d0%bb%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-drupal/#comments</comments>
		<pubDate>Mon, 03 May 2010 19:40:25 +0000</pubDate>
		<dc:creator>ubivic</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[restart]]></category>
		<category><![CDATA[sudo]]></category>
		<category><![CDATA[на]]></category>
		<category><![CDATA[пароль]]></category>
		<category><![CDATA[установка]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=731</guid>
		<description><![CDATA[Чтобы поставить Drupal потребуются следующие пакеты: 1)apache 2)php (4.3.5 или выше) 3)mysql Установка: sudo apt-get install apache2 sudo apt-get install php5 sudo apt-get install mysql Также понадобятся библиотеки: php5-mysql, libapache2-mod-auth-mysql, Проверить поддерживает ли php работу с mysql можно с помощью простого скрипта, назовем его phpinfo.php после обращения к нему в браузере смотрим на выведенные переменные [...]]]></description>
			<content:encoded><![CDATA[<p>Чтобы поставить Drupal потребуются следующие пакеты:</p>
<p>1)apache<br />
2)php (4.3.5 или выше)<br />
3)mysql</p>
<p>Установка:</p>
<blockquote><p>sudo apt-get install apache2<br />
sudo apt-get install php5<br />
sudo apt-get install mysql</p></blockquote>
<p>Также понадобятся библиотеки: php5-mysql, libapache2-mod-auth-mysql,</p>
<p>Проверить поддерживает ли php работу с mysql можно с помощью простого скрипта, назовем его phpinfo.php</p>
<p>после обращения к нему в браузере смотрим на выведенные переменные и параметры и ищем секцию под названием mysql, если ее нет, то необходимо установить библиотеку<br />
php5-mysql.<br />
В случае отсутствия libapache2-mod-auth-mysql установка останавливается на шаге лоступа к базе данных и выдается ошибка- &#8220;Your web server does not appear to support any common database types.<br />
Check with your hosting provider to see if they offer any databases that Drupal supports&#8221;.</p>
<p><span id="more-731"></span>Установка библиотек для работы с mysql:</p>
<blockquote><p>sudo apt-get install php5-mysql<br />
sudo apt-get install libapache2-mod-auth-mysql</p></blockquote>
<p>Рекомендую до начала установки скачать и распаковать в каталог drupal его русификатор (если это сделать сразу, уже на этапе установки возможно будет выбрать русский язык),<br />
потом необходимо скопировать и переименовать файл default.settings.php в settings.php</p>
<blockquote><p>cp sites/default/default.settings.php sites/default/settings.php</p></blockquote>
<p>Далее даем права на запись на каталог sites/default и на сам файл settings.php.</p>
<blockquote><p>chmod o+w sites/default/settings.php</p></blockquote>
<p>Создаем папку files в папке sites/default,<br />
даем права на запись:</p>
<blockquote><p>chmod o+w sites/default/files</p></blockquote>
<p>Создаем базу данных для drupal вручную, с помощью клиента mysql:</p>
<blockquote><p>create database название_базы;</p></blockquote>
<p>базу также можно создать с помощью оболочки<br />
phpmyadmin.</p>
<p>Настройка параметров через Web-интерфейс:<br />
1 выбираем язык<br />
2 заполняем имя созданной базы данных, имя пользователя и пароль,<br />
также можно заполнить префикс имен таблиц (рекомендуется, если у Вас для всего 1 база данных на хостинге, потом будет проще разбираться в назначении таблиц)</p>
<p>Забираем права на запись на каталог sites/default и на сам файл settings.php.</p>
<blockquote><p>chmod a-w sites/default/settings.php<br />
chmod a-w sites/default</p></blockquote>
<p>Также Drupal потребовал установки модуля gd для php.<br />
устанавливаем его командой:</p>
<blockquote><p>sudo apt-get install php5-gd</p></blockquote>
<p>После чего проверяем нашим скриптом phpinfo.php появился или нет раздел gd,<br />
если нет в файл php.ini в раздел Dynamic Extensions добавляем строку:<br />
extension=gd.so (имено так без путей, т.к. они прописываются в другой переменной)</p>
<p>После чего перезапускаем Apapche:</p>
<blockquote><p>sudo service apache2 restart</p></blockquote>
<p>Выставляем даты в нормальном режиме, и первый день &#8211; понедельник (умолчание &#8211; вокресенье)</p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2010/05/03/%d1%83%d1%81%d1%82%d0%bd%d0%b0%d0%b2%d0%bb%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Установка Munin под CentOS</title>
		<link>http://howtolinux.ru/2010/04/13/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-munin-%d0%bf%d0%be%d0%b4-centos/</link>
		<comments>http://howtolinux.ru/2010/04/13/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-munin-%d0%bf%d0%be%d0%b4-centos/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 20:48:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[HighLoad]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Мануалы]]></category>
		<category><![CDATA[Мониторинг]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[мониторинг]]></category>
		<category><![CDATA[нагрузка]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=627</guid>
		<description><![CDATA[Munin — отличная замена MRTG, показывает не только данные о трафике, но еще и строит графики по множеству других показателей, таких как file system usage, fork rate, cpu/memory usage, load average и т.п.. В случае с CentOS имеем так же быструю и беcпроблемную установку, благодаря наличию munin в репозитории rpmforge. Итак, если не поключен, подключаем [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Munin</strong> — отличная замена MRTG, показывает не только данные о трафике, но еще и строит графики по множеству других показателей, таких как file system usage, fork rate, cpu/memory usage, load average и т.п..</p>
<p>В случае с CentOS имеем так же быструю и беcпроблемную установку, благодаря наличию munin в репозитории rpmforge.</p>
<p>Итак, если не поключен, подключаем репозитоий (пример для CentOS 5, i386):<br />
<code>rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm</code></p>
<p>Устанавливаем пакеты munin и munin-node:<br />
<code>yum install munin munin-node</code></p>
<p>Munin состоит из двух частей, пакет munin-node должен работать на сервере, который хотим мониторить, а пакет munin может быть в другом месте. В нашем случае все будет на одном и том же сервере. По умолчанию, в конфигурационном файле /etc/munin/munin-node.conf доступ разрешен только локально.</p>
<p>Создадим папку, в которой munin будет генерировать файлы (параметр htmldir в /etc/munin/munin.conf):<br />
<code>mkdir /var/www/html/munin<br />
chown munin:munin /var/www/html/munin</code></p>
<p>Запускаем munin-node:<br />
<code>service munin-node start</code></p>
<p>Не забываем про init-скрипты:<br />
<code>chkconfig --level 345 munin-node on</code></p>
<p>Раз в 5 минут, по крону (/etc/cron.d/munin), munin будет обновлять графики, которые будет складывать в /var/www/html/munin.</p>
<p>Все что осталось &#8211; настроить веб-сервер для доступа к /var/www/html/munin. В случае с apache, заготовка уже лежит в /etc/httpd/conf.d/munin.conf, осталось только отредактировать ее, и может быть закрыть папку паролем. Надо отметить, что генерирует munin только статику, веб-сервер можно использовать любой.</p>
<p>Сайт проекта: http://munin.projects.linpro.no/</p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2010/04/13/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-munin-%d0%bf%d0%be%d0%b4-centos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Настройка LAMP (Linux Apache MySQL php)</title>
		<link>http://howtolinux.ru/2009/09/07/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-lamp-linux-apache-mysql-php/</link>
		<comments>http://howtolinux.ru/2009/09/07/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-lamp-linux-apache-mysql-php/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 16:03:46 +0000</pubDate>
		<dc:creator>YankO</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[restart]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[sudo]]></category>
		<category><![CDATA[на]]></category>
		<category><![CDATA[пароль]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=416</guid>
		<description><![CDATA[Проще простого, LAMP так ставится. Apache: sudo apt-get install apache2 Все зависимости установятся автоматически. Для запуска Apache2 используем : sudo invoke-rc.d apache2 start Проверяем набрав в браузере http://localhost Устанавливаем PHP sudo apt-get install php5 libapache2-mod-php5 и перезапускаем Apache: sudo invoke-rc.d apache2 restart или sudo /etc/init.d/apache2 restart кто как привык. Устанавливаем MySQL sudo apt-get install mysql-server [...]]]></description>
			<content:encoded><![CDATA[<p>Проще простого, LAMP так ставится.</p>
<p>Apache:</p>
<blockquote><p>sudo apt-get install apache2</p></blockquote>
<p><span id="more-416"></span></p>
<p>Все зависимости установятся автоматически. Для запуска Apache2 используем :</p>
<blockquote><p>sudo invoke-rc.d apache2 start</p></blockquote>
<p>Проверяем набрав в браузере http://localhost</p>
<p>Устанавливаем PHP</p>
<blockquote><p>sudo apt-get install php5 libapache2-mod-php5</p></blockquote>
<p>и перезапускаем Apache:</p>
<blockquote><p>sudo invoke-rc.d apache2 restart</p></blockquote>
<p>или</p>
<blockquote><p>sudo /etc/init.d/apache2 restart</p></blockquote>
<p>кто как привык.</p>
<p>Устанавливаем MySQL</p>
<blockquote><p>sudo apt-get install mysql-server</p></blockquote>
<p>При установке запросят пароль root к серверу БД в некоторых сборках нет: </p>
<p>Тогда ставим сами:</p>
<p>sudo mysqladmin -u root password пароль</p>
<p>Перезапускаем Apache2.</p>
<p>Все должно работать. Для проверки PHP пишем небольшой скрипт:</p>
<blockquote><p>sudo nano /var/www/test.php</p></blockquote>
<p>И записываем в него одну сроку</p>
<p>Набираем браузере http://localhost/test.php, должны увидить инфу PHP. Если нет включаем модуль a2enmod php5</p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/09/07/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-lamp-linux-apache-mysql-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Защищенный Apache: шаг за шагом</title>
		<link>http://howtolinux.ru/2009/09/02/howto-%d0%b7%d0%b0%d1%89%d0%b8%d1%89%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-apache-%d1%88%d0%b0%d0%b3-%d0%b7%d0%b0-%d1%88%d0%b0%d0%b3%d0%be%d0%bc/</link>
		<comments>http://howtolinux.ru/2009/09/02/howto-%d0%b7%d0%b0%d1%89%d0%b8%d1%89%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-apache-%d1%88%d0%b0%d0%b3-%d0%b7%d0%b0-%d1%88%d0%b0%d0%b3%d0%be%d0%bc/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 17:13:37 +0000</pubDate>
		<dc:creator>Shugich</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[icons]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[на]]></category>
		<category><![CDATA[настройка]]></category>
		<category><![CDATA[темы]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=204</guid>
		<description><![CDATA[Функциональные возможности &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; Прежде чем мы начнем &#8220;защищать&#8221; Apache, мы должны определить, какие функции должен выполнять наш сервер. На данный момент Apache используют для решения совершенно разных задач, поэтому очень сложно написать универсальное руководство по установки защищенного web сервера. Именно по этому в этой статье мы будем опираться на следующие функциональные возможности: * Web сервер [...]]]></description>
			<content:encoded><![CDATA[<p>Функциональные возможности<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Прежде чем мы начнем &#8220;защищать&#8221; Apache, мы должны определить, какие<br />
функции должен выполнять наш сервер. На данный момент Apache<br />
используют для решения совершенно разных задач, поэтому очень сложно<br />
написать универсальное руководство по установки защищенного web<br />
сервера. Именно по этому в этой статье мы будем опираться на следующие<br />
функциональные возможности:<br />
* Web сервер будет доступен через Интернет;<br />
* Будут использоваться только статические HTML страницы<br />
* Сервер будет поддерживать name-based virtual hosting механизм<br />
* Некоторые Web страницы будут доступны только пользователям с<br />
определенным IP адресом<br />
* Сервер будет записывать все Web запросы (включая информацию о Web<br />
браузерах)</p>
<p><span id="more-204"></span></p>
<p>Стоит подчеркнуть, что приведенная выше модель не поддерживает PHP,<br />
JSP, CGI или любые другие технологии, которые дают возможность<br />
взаимодействовать с Web службами. Использование таких технологий может<br />
серьезно повлиять на безопасность сервера. Даже маленький неприметный<br />
сценарий может очень сильно уменьшить уровень защиты Web сервера.<br />
Почему? Прежде всего, приложения ASP/CGI могут содержать уязвимость<br />
защиты (например SQL injection или cross-site-scripting). Во вторых,<br />
сама технология может быть опасной (уязвимости в PHP и Perl модулях и<br />
т.д.). Именно поэтому я настоятельно рекомендую использовать такие<br />
технологии только, когда обойтись без них просто невозможно.</p>
<p>Проектирование защиты<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Одним из наиболее важных элементов любого компьютерного проекта<br />
является проектирование защиты. Эта операция должна быть выполнена еще<br />
до того, как проект будет закончен. Вот как мы спроектируем защиту<br />
нашего Web сервера:<br />
* Операционная система должна быть максимально защищена как от<br />
локальных, так и от удаленных атак;<br />
* Сервер не должен предоставлять какие-либо сетевые сервисы, кроме<br />
HTTP: (80/TCP);<br />
* Удаленный доступ к серверу должен быть под контролем файерволла,<br />
который должен блокировать подключения к любым другим портам,<br />
кроме 80/TCP (порт Web сервера);<br />
* Apache Web server должен быть единственной службой, запущенной в<br />
системе;<br />
* Только самые необходимые модули Apache должны быть включены;<br />
* Всякие Web-страницы диагностики должны быть отключены;<br />
* Сервер должен выдавать как можно меньше информации о себе;<br />
* Apache Web сервер должен быть запущен под уникальными UID/GID,<br />
которые не используются другими процессами;<br />
* Процесс Apache должен иметь ограниченный доступ к файловой системе<br />
(chrooting); и<br />
* Никакие оболочки командного интерпритатора не должны находиться в<br />
chroot окружении (/bin/sh, /bin/csh и т. д.).</p>
<p>Установка операционной системы<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Перед установкой Apache мы должны выбрать операционную систему, на<br />
которой будет работать наш Web сервер. Здесь мы имеем широкий выбор,<br />
потому что Apache может быть скомпилирован и установлен практически на<br />
любой операционной системе. Оставшаяся часть статьи покажет, как<br />
обеспечить высокий уровень безопасности Apache Web сервера на ОС<br />
FreeBSD (4.7), однако описанные методы можно применить и на других<br />
UNIX/Linux системах. Единственная операционная система, которую я не<br />
рекомендую использовать &#8211; MS Windows &#8211; главным образом из-за<br />
ограничений в настройке безопасности Apache.</p>
<p>Первым шагом в обеспечении хорошей защиты Web сервера является<br />
улучшение/укрепление безопасности операционной системы. К сожалению,<br />
эта тема выходит за рамки данной статьи. Однако, существует множество<br />
статей/документов/заметок в сети по этому чрезвычайно важному вопросу.</p>
<p>После того как система установлена и защищена должным образом, мы<br />
должны добавить новую группу и обычного пользователя &#8220;apache&#8221; (пример<br />
на FreeBSD):</p>
<blockquote><p>pw groupadd apache<br />
pw useradd apache -c &#8220;Apache Server&#8221; -d /dev/null -g apache -s /sbin/nologin</p></blockquote>
<p>По умолчанию, процесс Apache запущен с привилегиями пользователя<br />
nobody (за исключением главного процесса, который запущен с<br />
привилегиями root) и GID&#8217;ом группы nogroup. Это может привести к<br />
серьезной угрозе защиты. При удачном проникновении, взломщик может<br />
получить доступ ко всем другим процессам, которые запущены под теми же<br />
UID/GID.</p>
<p>Следовательно, оптимальным решением будет запуск Apache под UID/GID<br />
уникального пользователя/группы, которые будут работать только с нашим<br />
Web сервером и ни с каким другим софтом.</p>
<p>Подготовка Программного обеспечения<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Следующий шаг &#8211; вы должны загрузить самую последнюю версию [78]Apache<br />
Web server. Некоторые опции Apache могут быть включены только при<br />
компиляции, таким образом очень важно скачать исходный код, а не так<br />
называемую &#8220;binary-версию&#8221;.</p>
<p>После успешной загрузки Apache, мы должны его распаковать. Затем нам<br />
предстоит решить, какие модули нам пригодятся, а какие нет. Короткие<br />
описания всех модулей можно найти на http://httpd.apache.org/docs/mod/</p>
<p>Модули Apache</p>
<p>Выбор модулей &#8211; один из наиболее важных шагов в обеспечении хорошей<br />
защиты Apache Web server. Мы должны руководствоваться одним хорошим<br />
правилом: чем меньше, тем лучше. Чтобы задействовать нужные нам<br />
функциональные возможности и обеспечить хорошую защиту, должны быть<br />
включены следующие модули:</p>
<p>httpd_core &#8211; Ядро Apache, требуется при каждой установке Apache.</p>
<p>mod_access &#8211; Контроль доступа к каталогам сервера в зависимости от IP-адреса или<br />
имени узла клиента.</p>
<p>mod_auth &#8211;  Требуется, чтобы осуществлять авторизацию пользователей, используя<br />
текстовые файлы.</p>
<p>mod_dir &#8211;  Требуется, чтобы искать индексные файлы: &#8220;index.html&#8221;, &#8220;default.html&#8221;,<br />
и т. д.</p>
<p>mod_log_config &#8211; Обеспечивает регистрацию запросов, направляемых серверу.</p>
<p>mod_mime &#8211; Содержит директивы, способствующие организации на сервере различных<br />
типов MIME.</p>
<p>Все остальные модули Apache должны быть выключены. Мы можем спокойно<br />
их отключить, потому что они нам не понадобятся. Отключая ненужные<br />
модули, мы предотвращаем возможность взломщика эксплуатировать<br />
уязвимость, которая была найдена в одном из этих модулей.</p>
<p>Также стоит обратить внимание, что два модуля Apache (mod_autoindex и<br />
mod_info) являются наиболее опасными. Первый модуль позволяет<br />
автоматически проиндексировать каталог и он включен по умолчанию.<br />
Чтобы посмотреть, как он работает, введите, например,<br />
http://server_name/icons/ и если в этом каталоге нет индексных<br />
файлов, то будет выведено содержание всего каталога. Второй модуль,<br />
mod_info, никогда не должен быть доступен через Интернет, потому что<br />
он показывает всю конфигурацию Web сервера Apache.</p>
<p>Следующий вопрос &#8211; как компилировать модули. Мне кажется, что<br />
статический метод &#8211; самый лучший (коды встраиваются в исполняемые<br />
файлы), нежели динамическая (коды собираются в момент запуска<br />
программы). Выбирая статический метод, мы также устраняем потребность<br />
в еще одном модуле &#8211; mod_so.</p>
<p>Компилирование программного обеспечения<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Прежде всего, если существуют патчи, то их нужно немедленно<br />
установить. Затем вы должны скомпилировать и установить сервер так:</p>
<blockquote><p>./configure &#8211;prefix=/usr/local/apache &#8211;disable-module=all \<br />
&#8211;server-uid=apache &#8211;server-gid=apache &#8211;enable-module=access \<br />
&#8211;enable- module=log_config &#8211;enable-module=dir \<br />
&#8211;enable-module=mime &#8211;enable-module=auth<br />
make<br />
su<br />
umask 022<br />
make install<br />
chown -R root:sys /usr/local/apache</p></blockquote>
<p>Chroot&#8217;им сервер<br />
&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Делая следующий шаг, мы ограничим доступ процессу Apache к файловой<br />
системе. Достигнуть этой цели мы можем, путем chroot&#8217;a главного демона<br />
Apache (httpd). Вообще, chroot &#8211; это создание новой структуры каталога<br />
root, перемещение всех демонов в новый каталог и запуск надлежащих<br />
демонов в этой новой среде. Благодаря этому, daemon (и все порожденные<br />
им процессы) будет иметь доступ только к этой новой структуре<br />
каталога.</p>
<p>Теперь создадим новую структуру каталога root (/chroot/httpd):</p>
<blockquote><p>mkdir -p /chroot/httpd/dev<br />
mkdir -p /chroot/httpd/etc<br />
mkdir -p /chroot/httpd/var/run<br />
mkdir -p /chroot/httpd/usr/lib<br />
mkdir -p /chroot/httpd/usr/libexec<br />
mkdir -p /chroot/httpd/usr/local/apache/bin<br />
mkdir -p /chroot/httpd/usr/local/apache/logs<br />
mkdir -p /chroot/httpd/usr/local/apache/conf<br />
mkdir -p /chroot/httpd/www</p></blockquote>
<p>Владельцем вышеперечисленных каталогов должен быть root, и права<br />
доступа должны быть 0755. Затем мы создадим специальный файл:<br />
/dev/null:</p>
<p>ls -al /dev/null<br />
crw-rw-rw-   1  root wheel   2,  2 Mar 14 12:53 /dev/null<br />
mknod /chroot/httpd/dev/null c 2 2<br />
chown root:sys /chroot/httpd/dev/null<br />
chmod 666 /chroot/httpd/dev/null</p>
<p>Можно использовать разные методы, чтобы создать /chroot/httpd/dev/log.<br />
В случае с FreeBSD, в файл /etc/rc.conf нужно добавить следующую<br />
строчку:</p>
<p>syslogd_flags=&#8221;-l /chroot/httpd/dev/log&#8221;</p>
<p>Мы должны перезапустить систему или демон syslogd, чтобы сделанные<br />
нами изменения вступили в силу.</p>
<p>Сейчас нам следует скопировать главную httpd программу в новое дерево<br />
каталогов со всеми необходимыми файлами. Чтобы осуществить это, мы<br />
должны приготовить список всех требуемых файлов. Чтобы сделать этот<br />
список, мы можем воспользоваться следующими командами (их присутствие<br />
зависит от конкретной операционной системы):</p>
<p>ldd &#8211; Показывает динамическую зависимость исполняемых файлов или<br />
общедоступных библиотек.</p>
<p>ktrace/ktruss/kdump (*BSD) &#8211;  Включает отслеживание вызовов ядра</p>
<p>sotruss (Solaris) &#8211; Трассирует вызовы функций из разделяемых библиотек.</p>
<p>strace/ltrace (Linux) &#8211; Отслеживает системные вызовы, которые делает<br />
программа в процессе своей работы</p>
<p>strings &#8211; Позволяет просмотреть в любом (в том числе выполнимом) файле<br />
все строки (в коде ASCII)</p>
<p>trace (AIX) &#8211;  Записывает выбранные системные вызовы</p>
<p>truss (FreeBSD, Solaris, AIX 5L, SCO Unixware) &#8211; Трассирует системные вызовы и сигналы</p>
<p>trusc (HP-UX&gt;11) &#8211; Трассирует системные вызовы в HP-UX 11</p>
<p>Ниже приведен пример использования команд ldd, strings и truss:</p>
<blockquote><p>localhost# ldd /usr/local/apache/bin/httpd<br />
/usr/local/apache/bin/httpd:<br />
libcrypt.so.2 =&gt; /usr/lib/libcrypt.so.2 (0x280bd000)<br />
libc.so.4 =&gt; /usr/lib/libc.so.4 (0x280d6000)</p>
<p>localhost# strings /usr/local/apache/bin/httpd | grep lib<br />
/usr/libexec/ld-elf.so.1<br />
libcrypt.so.2<br />
libc.so.4</p>
<p>localhost# truss /usr/local/apache/bin/httpd | grep open<br />
(&#8230;)<br />
open(&#8220;/var/run/ld-elf.so.hints&#8221;,0,00)            = 3 (0&#215;3)<br />
open(&#8220;/usr/lib/libcrypt.so.2&#8243;,0,027757775370)    = 3 (0&#215;3)<br />
open(&#8220;/usr/lib/libc.so.4&#8243;,0,027757775370)        = 3 (0&#215;3)<br />
open(&#8220;/etc/spwd.db&#8221;,0,00)                        = 3 (0&#215;3)<br />
open(&#8220;/etc/group&#8221;,0,0666)                        = 3 (0&#215;3)<br />
open(&#8220;/usr/local/apache/conf/httpd.conf&#8221;,0,0666) = 3 (0&#215;3)<br />
(&#8230;)</p></blockquote>
<p>Вышеупомянутые команды должны применяться не только по отношению к<br />
httpd, но и ко всем требуемым библиотекам и бинарным файлам. В случае<br />
с FreeBSD, следующие файлы должны быть скопированы в новую root<br />
директорию:</p>
<blockquote><p>cp /usr/local/apache/bin/httpd /chroot/httpd/usr/local/apache/bin/<br />
cp /var/run/ld-elf.so.hints /chroot/httpd/var/run/<br />
cp /usr/lib/libcrypt.so.2 /chroot/httpd/usr/lib/<br />
cp /usr/lib/libc.so.4 /chroot/httpd/usr/lib/<br />
cp /usr/libexec/ld-elf.so.1 /chroot/httpd/usr/libexec/</p></blockquote>
<p>Используя команду truss мы обнаружим, что следующие конфигурационные<br />
файлы также должны присутствовать в новой среде:</p>
<blockquote><p>cp /etc/hosts /chroot/httpd/etc/<br />
cp /etc/host.conf /chroot/httpd/etc/<br />
cp /etc/resolv.conf /chroot/httpd/etc/<br />
cp /etc/group /chroot/httpd/etc/<br />
cp /etc/master.passwd /chroot/httpd/etc/passwords<br />
cp /usr/local/apache/conf/mime.types /chroot/httpd/usr/local/apache/conf/</p></blockquote>
<p>Обратите внимание, что в файле /chroot/httpd/etc/passwords мы должны<br />
удалить все строчки кроме &#8220;nobody&#8221; и &#8220;apache&#8221;. Таким же образом мы<br />
должны удалить все строчки, кроме &#8220;apache&#8221; и &#8220;nogroup&#8221; в<br />
/chroot/httpd/etc/group. Затем нам нужно создать базу данных паролей:</p>
<blockquote><p>cd /chroot/httpd/etc<br />
pwd_mkdb -d /chroot/httpd/etc passwords<br />
rm -rf /chroot/httpd/etc/master.passwd</p></blockquote>
<p>Теперь нам предстоит проверить, правильно ли работает httpd сервер в<br />
новой среде. Для этого нам нужно скопировать файл конфигурации Apache<br />
и файл index.html, как показано в примере:</p>
<blockquote><p>cp /usr/local/apache/conf/httpd.conf /chroot/httpd/usr/local/apache/conf/<br />
cp /usr/local/apache/htdocs/index.html.en /chroot/httpd/www/index.html</p></blockquote>
<p>После окончания копирования вышеупомянутых файлов, мы должны заменить<br />
директиву DocumentRoot (в /chroot/httpd/usr/local/apache/conf/httpd.conf):</p>
<blockquote><p>DocumentRoot &#8220;/www&#8221;</p></blockquote>
<p>Теперь мы можем попробовать запустить сервер:</p>
<blockquote><p>chroot /chroot/httpd /usr/local/apache/bin/httpd</p></blockquote>
<p>Если появились проблемы, я рекомендую проанализировать log файлы<br />
Apache (/chroot/httpd/usr/local/apache/logs). Как альтернативу, вы<br />
можете использовать следующую команду:</p>
<blockquote><p>truss chroot /chroot/httpd /usr/local/apache/bin/httpd</p></blockquote>
<p>Программа truss должна показать причину возникнувших проблем. После<br />
устранения всех ошибок, мы можем приступить к конфигурированию сервера<br />
Apache.</p>
<p>Конфигурирование Apache<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Для начала, удалите старый<br />
/chroot/httpd/usr/local/apache/conf/httpd.conf файл и создайте на его<br />
месте новый, примерно со следующим содержанием:</p>
<blockquote><p># =================================================<br />
# Basic settings<br />
# =================================================<br />
ServerType standalone<br />
ServerRoot &#8220;/usr/local/apache&#8221;<br />
PidFile /usr/local/apache/logs/httpd.pid<br />
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard<br />
ResourceConfig /dev/null<br />
AccessConfig /dev/null</p>
<p># =================================================<br />
# Performance settings<br />
# =================================================<br />
Timeout 300<br />
KeepAlive On<br />
MaxKeepAliveRequests 100<br />
KeepAliveTimeout 15<br />
MinSpareServers 5<br />
MaxSpareServers 10<br />
StartServers 5<br />
MaxClients 150<br />
MaxRequestsPerChild 0</p>
<p># =================================================<br />
# Apache&#8217;s modules<br />
# =================================================<br />
ClearModuleList<br />
AddModule mod_log_config.c<br />
AddModule mod_mime.c<br />
AddModule mod_dir.c<br />
AddModule mod_access.c<br />
AddModule mod_auth.c</p>
<p># =================================================<br />
# General settings<br />
# =================================================<br />
Port 80<br />
User apache<br />
Group apache<br />
ServerAdmin Webmaster@www.ebank.lab<br />
UseCanonicalName Off<br />
ServerSignature Off<br />
HostnameLookups Off<br />
ServerTokens Prod</p>
<p>DirectoryIndex index.html</p>
<p>DocumentRoot &#8220;/www/vhosts&#8221;</p>
<p># =================================================<br />
# Access control<br />
# =================================================</p>
<p>Options None<br />
AllowOverride None<br />
Order deny,allow<br />
Deny from all</p>
<p>Order allow,deny<br />
Allow from all</p>
<p>Order allow,deny<br />
Allow from all</p>
<p># =================================================<br />
# MIME encoding<br />
# =================================================</p>
<p>TypesConfig /usr/local/apache/conf/mime.types</p>
<p>DefaultType text/plain</p>
<p>AddEncoding x-compress Z<br />
AddEncoding x-gzip gz tgz<br />
AddType application/x-tar .tgz</p>
<p># =================================================<br />
# Logs<br />
# =================================================<br />
LogLevel warn<br />
LogFormat &#8220;%h %l %u %t &#8220;%r&#8221; %&gt;s %b &#8220;%{Referer}i&#8221; &#8220;%{User-Agent}i&#8221;" combined<br />
LogFormat &#8220;%h %l %u %t &#8220;%r&#8221; %&gt;s %b&#8221; common<br />
LogFormat &#8220;%{Referer}i -&gt; %U&#8221; referer<br />
LogFormat &#8220;%{User-agent}i&#8221; agent<br />
ErrorLog /usr/local/apache/logs/error_log<br />
CustomLog /usr/local/apache/logs/access_log combined</p>
<p># =================================================<br />
# Virtual hosts<br />
# =================================================<br />
NameVirtualHost *</p>
<p>DocumentRoot &#8220;/www/vhosts/www.ebank.lab&#8221;<br />
ServerName &#8220;www.ebank.lab&#8221;<br />
ServerAlias &#8220;www.e-bank.lab&#8221;<br />
ErrorLog logs/www.ebank.lab/error_log<br />
CustomLog logs/www.ebank.lab/access_log combined</p>
<p>DocumentRoot &#8220;/www/vhosts/www.test.lab&#8221;<br />
ServerName &#8220;www.test.lab&#8221;<br />
ErrorLog logs/www.test.lab/error_log<br />
CustomLog logs/www.test.lab/access_log combined</p></blockquote>
<p>В представленном конфигурационном файле есть два виртуальных<br />
хоста:</p>
<p>- www.ebank.lab (www.e-bank.lab)<br />
- www.test.lab</p>
<p>Контент вышеупомянутых сайтов находится в следующих каталогах:</p>
<p>- /chroot/httpd/www/vhosts/www.ebank.lab<br />
- /chroot/httpd/www/vhosts/www.test.lab</p>
<p>Каждый сайт имеет собственные log файлы, которые находятся в следующих<br />
каталогах:</p>
<p>- /chroot/httpd/usr/local/apache/logs/www.ebank.lab<br />
- /chroot/httpd/usr/local/apache/logs/www.test.lab</p>
<p>Эти каталоги должны быть созданы еще до того, как вы в первый раз<br />
запустите Apache &#8211; иначе Apache не будет работать корректно.<br />
Владельцем вышеупомянутых каталогов должен быть root:sys, а права<br />
доступа должны быть 0755.</p>
<p>По сравнению с настройками по умолчанию, в файле конфигурации Apache<br />
были сделаны следующие изменения:</p>
<p>- Число доступных/включенных модулей значительно уменьшен<br />
- Apache не выдает информацию о номере версии (директивы:<br />
ServerTokens, ServerSignature)<br />
- Процессы Apache (за исключением процесса root) выполняются с<br />
привилегиями уникального пользователя/группы (директивы: User, Group)</p>
<p>- Apache предоставит доступ только к тем каталогам,<br />
подкаталогам и файлам, которые явно прописаны в файле конфигурации<br />
(директивы: Directory, Allow); по умолчанию, все остальные запросы<br />
будут отклонены</p>
<p>- Apache записывает гораздо больше информации о HTTP запросах</p>
<p>Последние штрихи<br />
&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Теперь мы сделаем скрипт запуска &#8220;apache.sh&#8221;, содержание которого<br />
должно выглядеть примерно так:</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<blockquote><p>#!/bin/sh</p>
<p>CHROOT=/chroot/httpd/<br />
HTTPD=/usr/local/apache/bin/httpd<br />
PIDFILE=/usr/local/apache/logs/httpd.pid</p>
<p>echo -n &#8221; apache&#8221;</p>
<p>case &#8220;$1&#8243; in<br />
start)<br />
/usr/sbin/chroot $CHROOT $HTTPD<br />
;;<br />
stop)<br />
kill `cat ${CHROOT}/${PIDFILE}`<br />
;;<br />
*)<br />
echo &#8220;&#8221;<br />
echo &#8220;Usage: `basename $0` {start|stop}&#8221; &gt;&amp;2<br />
exit 64<br />
;;<br />
esac</p>
<p>exit 0</p></blockquote>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Данный скрипт вы должны скопировать в надлежащий каталог (зависит от<br />
конкретной UNIX системы), где находятся все скрипты запуска. В случае<br />
с FreeBSD это &#8211; /usr/local/etc/rc.d каталог.</p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/09/02/howto-%d0%b7%d0%b0%d1%89%d0%b8%d1%89%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-apache-%d1%88%d0%b0%d0%b3-%d0%b7%d0%b0-%d1%88%d0%b0%d0%b3%d0%be%d0%bc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HowTo: Lighttpd + Apache</title>
		<link>http://howtolinux.ru/2009/09/01/howto-lighttpd-apache/</link>
		<comments>http://howtolinux.ru/2009/09/01/howto-lighttpd-apache/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 09:30:59 +0000</pubDate>
		<dc:creator>Shugich</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Lighttpd]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=130</guid>
		<description><![CDATA[Был сервер с виртуалхостами на обычной связке Apache,PHP,MySQL. Увы с увеличением количества виртуалхостов, Apache стал загружать систему под 100%. Но от таких вкусных вещей как mod_rewrite отказываться не хотелось. В этой статье покажу как можно сделать связку Lighttpd + Apache. Весь статический контент сайтов (картинки, видео, музыка и т.д.) будет раздавать Lighttpd (с чем web-сервер [...]]]></description>
			<content:encoded><![CDATA[<p>Был сервер с виртуалхостами на обычной связке Apache,PHP,MySQL.<br />
Увы с увеличением количества виртуалхостов, Apache стал загружать систему под 100%. Но от таких вкусных вещей как mod_rewrite отказываться не хотелось.<br />
В этой статье покажу как можно сделать связку Lighttpd + Apache. Весь статический контент сайтов (картинки, видео, музыка и т.д.) будет раздавать Lighttpd (с чем web-сервер справляется на отлично, youtube.com, wikipedia.org и др. тому пример), всю динамику (php, cgi скрипты) будем перенаправлять к Apache.</p>
<p>В этой статье я НЕ буду описывать как установить Apache,php,mysql в одно единое. С настройкой можете ознакомиться в этом разделе по след статьям:<br />
<a href="http://howtolinux.ru/2009/09/01/howto-apache2-php5-mod_fastcgi/" target="_self"> Apache2 + php5 + mod_fastcgi</a><br />
<a href="http://howtolinux.ru/2009/09/01/howto-настройка-хостинга-под-apache-php-mysql/" target="_self"> Настройка хостинга под apache + PHP + MySQL</a></p>
<p><span id="more-130"></span></p>
<p><strong>Установка и настройка Lighttpd.</strong></p>
<blockquote><p># cd /usr/ports/www/lighttpd<br />
# make install clean<br />
# cd /usr/local/etc/<br />
# cp ./lighttpd.conf.sample ./lighttpd.conf<br />
# ee ./lighttpd.conf</p></blockquote>
<p>Редактируем файл /usr/local/etc/lighttpd.conf. Так как Lighttpd будет обрабатывать только статику, настроек по минимуму:</p>
<blockquote><p>server.modules = (<br />
“mod_rewrite”,<br />
“mod_redirect”,<br />
“mod_alias”,<br />
“mod_access”,<br />
“mod_proxy”,<br />
“mod_accesslog” )</p></blockquote>
<p>Общая настройка Lighttpd описана в <a href="http://howtolinux.ru/2009/09/01/howto-lighttpd-fastcgi/" target="_self">этой статье</a>.<br />
Добавим в конце файла последнее:</p>
<blockquote><p>$HTTP["url"] =~ &#8220;^.*(html|php|cgi|/|\?|\?.*)$&#8221; {<br />
proxy.server = (&#8220;&#8221; =&gt; ( (<br />
&#8220;host&#8221; =&gt; &#8220;127.0.0.1&#8243;,<br />
&#8220;port&#8221; =&gt; 8080 ) ) )<br />
}</p></blockquote>
<p>Все скрипты, оканчивающиея на .php,.cgi отправляем на Apache.</p>
<p>В конфиге Apache httpd.conf нужно всего лишь изменить следующие строки:</p>
<blockquote><p>Listen 127.0.0.1:8080<br />
Port 8080</p></blockquote>
<p>На этом настройка связки закончена.<br />
Не забудьте добавить в /etc/rc.conf: lighttpd_enable=&#8221;YES&#8221;</p>
<p>Если вы используете несколько виртуальных хостов в httpd.conf, то их нужно описать и в lighttpd.conf.<br />
На пример, домен &#8211; www.domain.com<br />
Добавим в lighttpd.conf:</p>
<blockquote><p>$HTTP["host"] =~ “(^|\.)domain\.com$” {<br />
server.document-root = “/usr/home/user/public_html/domain.com”<br />
accesslog.filename = “/usr/home/user/log/access.log”<br />
server.errorlog = “/usr/home/user/log/error.log”<br />
}</p></blockquote>
<p>Accesslog и Errorlog можно обрабатывать через <a href="http://www.webalizer.org/" target="_blank">WebAlizer</a>, <a href="http://awstats.sourceforge.net/" target="_blank">Awstats</a> и др.<br />
Несколько очень полезных ссылок:<br />
1.<a href="http://www.istos.ws/index2.php?option=com_content&amp;do_pdf=1&amp;id=273" target="_blank"> Lighttpd and Joomla &#8211; A How To</a><br />
2. <a href="http://www.cyberciti.biz/tips/howto-lighttpd-web-server-setting-up-virtual-hosting.html" target="_blank">Howto: Lighttpd web server setting up virtual hosting</a></p>
<p>Если есть желание поиграться с оптимизацией отдачи файлов через Lighttpd, можете поэкспериментировать со следующими настройками в lighttpd.conf:</p>
<blockquote><p>server.max-worker=50<br />
server.max-keep-alive-requests=250<br />
server.max-keep-alive-idle=120<br />
server.max-read-idle =120</p></blockquote>
<p style="text-align: right"><em>Взято с <a href="http://www.lissyara.su/?id=1868" target="_blank">lissyara.su</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/09/01/howto-lighttpd-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Установка и настройка Nginx. Nginx frontend + Apache backend. Установка mod_rpaf</title>
		<link>http://howtolinux.ru/2009/09/01/howto-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx-nginx-frontend-apache-backend-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be/</link>
		<comments>http://howtolinux.ru/2009/09/01/howto-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx-nginx-frontend-apache-backend-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 09:20:20 +0000</pubDate>
		<dc:creator>Shugich</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Ngnix]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[mod_rpaf]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[настройка]]></category>
		<category><![CDATA[установка]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=128</guid>
		<description><![CDATA[Интро Легкие веб-сервера набирают обороты. По статистике Google Online Security Blog в Интернете стоит около 4% веб серверов на Nginx. Всем известный rambler.ru крутится на nginx. Nginx действительно отличный веб-сервер который достоин внимания. Перед нами стоит задача, поставить Nginx как frontend что бы он обрабатывал только некоторые типы файлов, как мы знаем типы файлов – [...]]]></description>
			<content:encoded><![CDATA[<p>Интро</p>
<p>Легкие веб-сервера набирают обороты. По статистике Google Online Security Blog в Интернете стоит около 4% веб серверов на Nginx. Всем известный rambler.ru крутится на nginx. Nginx действительно отличный веб-сервер который достоин внимания.</p>
<p>Перед нами стоит задача, поставить Nginx как frontend что бы он обрабатывал только некоторые типы файлов, как мы знаем типы файлов – css, js, jpg, gif, exe, tar, pdf и другие подобные – это статика, обрабатывая такие типы файлов легким веб-сервером nginx мы снизим нагрузку на веб-сервер Apache и получим хороший прирост к производительности.</p>
<p><span id="more-128"></span></p>
<p>Шаг 1. <strong>Установка Nginx</strong></p>
<p>Установка Nginx занимает несколько секунд.<br />
Debian:</p>
<blockquote><p>apt-get install nginx</p></blockquote>
<p>FreeBSD:</p>
<blockquote><p>cd /usr/ports/www/nginx<br />
make install clean</p></blockquote>
<p>Конфигурационный файл nginx вы найдете у себя в<br />
Debian – /etc/nginx/nginx.conf<br />
FreeBSD – /usr/local/etc/nginx/nginx.conf</p>
<p>Шаг 2. <strong>Подготовка Apache.</strong><br />
Настроим Apache, открываем конфигурационный файл, имя файла зависит от версии Apache и платформы. У меня вторая ветка Apache (2.2.x) на Debian и FreeBSD платформах.</p>
<p>Debian – /etc/apache2/ports.conf<br />
FreeBSD – /usr/local/etc/apache2/httpd.conf</p>
<p>Находим строку вида Listen 80.100.100.10:80 где “80.100.100.10″ IP вашего сервера и устанавливаем порт 81</p>
<blockquote><p>Listen 80.100.100.10:81</p></blockquote>
<p>Больше ничего не меняйте в конфиге Apache.</p>
<p>Шаг 3. <strong>Настройка Nginx</strong></p>
<blockquote><p>server {<br />
listen 80.100.100.10:80; # ip вашего сервера и порт<br />
server_name myexample.com www.myexample.com; # Имя вашего домена с www и без<br />
location / {<br />
proxy_pass http://80.100.100.10:81/;</p></blockquote>
<p>&#8230;</p>
<blockquote><p>proxy_set_header Host $host;<br />
proxy_set_header X-Real-IP $remote_addr;<br />
proxy_set_header X-Forwarded-For $proxy_add_x_forwarder_for;<br />
}<br />
location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ { # Обрабатываемые типы файлов<br />
root /home/www/myexample.com/httpdocs; # Путь к коренвевому каталогу вашего сайта<br />
}<br />
}</p></blockquote>
<p>Строки заголовка запроса X-Real-IP и X-Forwarded-For нужны будут вам если вы в своих скриптах используете информацию об IP-адресе посетителя или хотите скрыть от скриптов разделение на фрондэнд/бэкэнд и видеть нормальные IP пользователей, вместо IP фронтэнда, в таком случае вам необходимо будет дополнительно установить и настроить модуль mod_rpaf.</p>
<p>Шаг 4. <strong>Установка mod_rpaf</strong><br />
FreeBSD</p>
<blockquote><p>cd /usr/ports/www/mod_rpaf<br />
make install clean</p></blockquote>
<p>После установки откройте конфигурационный файл Apache и проверьте наличие следующей строки :</p>
<blockquote><p>LoadModule rpaf_module        libexec/apache22/mod_rpaf.so</p></blockquote>
<p>если такой строки нет, добавьте, но указывайте свой путь к файлу mod_rpaf.so<br />
И немного ниже добавьте следующие строки предварительно заменив “80.100.100.10″ на свой IP</p>
<blockquote><p>RPAFenable On<br />
RPAFsethostname On<br />
RPAFproxy_ips 80.100.100.10<br />
RPAFheader X-Forwarded-For</p></blockquote>
<p style="text-align: right"><em>Взято с </em><a href="http://server-help.ru/?p=14" target="_blank"><em>server-help.ru</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/09/01/howto-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx-nginx-frontend-apache-backend-%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Настройка хостинга под apache + PHP + MySQL</title>
		<link>http://howtolinux.ru/2009/09/01/howto-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%85%d0%be%d1%81%d1%82%d0%b8%d0%bd%d0%b3%d0%b0-%d0%bf%d0%be%d0%b4-apache-php-mysql/</link>
		<comments>http://howtolinux.ru/2009/09/01/howto-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%85%d0%be%d1%81%d1%82%d0%b8%d0%bd%d0%b3%d0%b0-%d0%bf%d0%be%d0%b4-apache-php-mysql/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 09:08:33 +0000</pubDate>
		<dc:creator>Shugich</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[настройка]]></category>
		<category><![CDATA[хоситинг]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=123</guid>
		<description><![CDATA[Автор: lissyara Был у конторы хостинг, для клиентов, бесплатный &#8211; как дополнение к тарифным планам с большим траффиком. Десятка полтора сайтов на FreeBSD4.11, apache1.3, php4, mysql4.0 &#8211; ничё особенного. Достался он мне по наследству, от старых админов, всё настроено, работает, что называется &#8211; не трожь. Но однажды переполнился раздел /var &#8211; почтовый спул занял всё [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right"><em>Автор: <a href="http://www.lissyara.su/?id=1024" target="_blank">lissyara</a></em></p>
<p>Был у конторы хостинг, для клиентов, бесплатный &#8211; как дополнение к тарифным планам с большим траффиком. Десятка полтора сайтов на <a href="http://www.freebsd.org/releases/4.11R/relnotes.html" target="_blank">FreeBSD4.11</a>, <a href="http://httpd.apache.org/" target="_blank">apache1.3,</a> <a href="http://www.php.net/" target="_blank">php4</a>, <a href="http://www.mysql.com/" target="_blank">mysql4.0</a> &#8211; ничё особенного. Достался он мне по наследству, от старых админов, всё настроено, работает, что называется &#8211; не трожь. Но однажды переполнился раздел /var &#8211; почтовый спул занял всё свободное место. Недолгое разбирательство выяснило &#8211; все письма отправлены с какого-то из сайтов, и в них спам. С какого &#8211; выяснить не представлялось возможным &#8211; письма шли от пользователля <a href="http://www./" target="_blank">www.</a> Спул почистил, залочил в php.ini функцию mail(), сел думать &#8211; что можно сделать подручными средствами. У всех знакомых, работавших у хостеров, были самописные фичи на эту тему &#8211; они меняли идентификатор пользователя процесса apache. Апач меня не интересовал &#8211; у него своих средств для защиты хватало, а вот php, крутившийся модулем, &#8211; работал от того же пользователя, что и апач, &#8211; а это не есть гуд. Из других решений &#8211; php как CGI. Почитав, понял &#8211; подойдёт. Работать будет медленней, чем модулем, т.к. будут дополнительные затраты на порождение дополнительного процесса, но во FreeBSD это досточно шустрый процесс (хотя и накладный, не отрицаю), поэтому особого замедления быть не должно.<br />
Итак, начинаем с апача &#8211; нам нужен <a href="http://httpd.apache.org/docs/1.3/suexec.html" target="_blank">suexec</a> &#8211; он позволяет выполнять пользовательские программы от его имени, незавимо от того, под каким пользователем работает сам http-сервер. Таким образом, для апача нам надо будет лишь предоставить доступ на чтение, включив его в группу пользователя, а всем &#8211; запретить вообще доступ. Ставим апач (если стоял &#8211; сносим и ставим заново), для начала добавив в файл <strong>/etc/make.conf </strong>такие строки:</p>
<p><span id="more-123"></span></p>
<blockquote><p># Директория где лежат порты<br />
PORTSDIR?=      /usr/ports</p>
<p># APACHE<br />
.if ${.CURDIR} == ${PORTSDIR}/www/apache13<br />
# Для запуска CGI-скриптов от gid и uid пользователя, а не WEB-сервера<br />
WITH_APACHE_SUEXEC=yes<br />
# Где будет работать suexec (ещё будет в userdir)<br />
APACHE_SUEXEC_DOCROOT=/usr/local/hosting<br />
# Пользовательские директории, в которых будет работать suexec<br />
APACHE_SUEXEC_USERDIR=&#8221;/usr/local/hosting/*/cgi-bin&#8221;<br />
# Настройки производительности (без комментов &#8211; объяснений толковых не нашёл,<br />
# а может торопился и плохо искал&#8230;)<br />
APACHE_SUEXEC_LOG=/usr/local/var/log/httpd-suexec.log<br />
APACHE_HARD_SERVER_LIMIT=yes<br />
WITH_APACHE_PERF_TUNING=yes<br />
APACHE_HARD_SERVER_LIMIT=1024<br />
.endif</p></blockquote>
<p>После чего, собственно, пересобираем:</p>
<blockquote><p>/usr/home/lissyara/&gt;cd /usr/ports/www/apache13<br />
/usr/ports/www/apache13/&gt;make deinstall &amp;&amp; make clean &amp;&amp; make \<br />
? &amp;&amp; make install &amp;&amp; make clean</p></blockquote>
<p>После этого, создаём новый класс пользователей, которых будем ограничивать, у меня он называется &#8220;webuser&#8221;. Для этого, в файл <strong>/etc/login.conf</strong> добавляем такую секцию:</p>
<blockquote><p># конфиг для клиентов. Сразуже &#8211; пояснения:<br />
# copyright &#8211; файл содержащий информацию о копирайтах<br />
# welcome &#8211; приветсвенное сообщение, выводится при входе по ssh. Я пока не<br />
# планирую давать доступ по ssh &#8211; но на будущее возможно пригодится.<br />
# setenv &#8211; устанавливаем переменные пользователя<br />
# path &#8211; пути к исполняемым программам<br />
# manpath &#8211; пути к манам<br />
# nologin &#8211; местоположение программы, вывоящей сообщение о блокировке аккаунта<br />
# cputime &#8211; предел использования CPU<br />
# datasize &#8211; максимальный размер данных пользователя (в памяти)<br />
# stacksize &#8211; максимальный размер стека<br />
# memorylocked &#8211; максимальный размер залоченой памяти ядра<br />
# memoryuse &#8211; ограничение размера используемой памяти ядра<br />
# filesize &#8211; максимальный размер файла<br />
# coredumpsize &#8211; максимальный размер создаваемого дампа (при ошибках)<br />
# openfiles &#8211; максимальное число открытых файлов, на процесс<br />
# maxproc &#8211; максимальное число процессов<br />
# sbsize &#8211; максимальный разрешённый размер буфера сокета<br />
# priority &#8211; приоритет исполняемых процессов<br />
# requirehome &#8211; для логина пользователя требуется реально существующая<br />
# домашняя директория<br />
# umask &#8211; начальная umask для создаваемых файлов<br />
# tc &#8211; остальные переменные берём из указанного класса</p>
<p>webuser:\</p>
<p style="padding-left: 60px">:copyright=/etc/COPYRIGHT:\<br />
:welcome=/etc/motd:\<br />
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,EDITOR=ee:\<br />
:path=/bin /usr/bin /usr/local/bin:\<br />
:manpath=/usr/share/man /usr/local/man:\<br />
:nologin=/sbin/nologin:\<br />
:cputime=5m:\<br />
:datasize=512M:\<br />
:stacksize=4M:\<br />
:memorylocked=64M:\<br />
:memoryuse=256M:\<br />
:filesize=512M:\<br />
:coredumpsize=0:\<br />
 <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> penfiles=1024:\<br />
:maxproc=64:\<br />
:sbsize=unlimited:\<br />
:priority=20:\<br />
:requirehome:\<br />
:umask=026:\<br />
:tc=default:</p></blockquote>
<p>Пересобираем БД классов пользователей:</p>
<blockquote><p>/usr/home/lissyara/&gt;cap_mkdb -v /etc/login.conf<br />
cap_mkdb: 10 capability records<br />
/usr/home/lissyara/&gt;</p></blockquote>
<p>Теперь надо поставить квоты на файловую систему, где у нас хостинг (надеюсь, вы не пускаете юзеров пастись в /usr и прочих системных разделах?). Вначале, я попробовал воткнуть её слёту:</p>
<blockquote><p>/usr/home/lissyara/&gt;echo &#8216;enable_quotas=&#8221;YES&#8221;&#8216; &gt;&gt; /etc/rc.conf</p></blockquote>
<p>Перезагрузился, и попробовал поставить квоту:</p>
<blockquote><p>/usr/home/lissyara/for_hosting/&gt;<br />
/usr/home/lissyara/for_hosting/&gt;edquota -u user_name2<br />
edquota: warning: quotas are not compiled into this kernel<br />
edquota: creating quota file /usr/local/quota.user</p></blockquote>
<p>Непрокатило <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Для этого в ядре должна быть её поддержка, для чего вносим в конфиг такую опцию:</p>
<blockquote><p>options         QUOTA</p></blockquote>
<p>Надо заметить ещё такой момент, во FreeBSD есть ограничение, пользователь не может входить более чем в 16 групп, это очень старое ограничение, связянное каким-то боком с <a href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/network-nfs.html" target="_blank">NFS</a>. В данном случае, в процессе экспериментов, я в него очень быстро упёрся &#8211; согласно создаваемой системе, у каждого пользователя будет своя персональная группа, в которую кроме пользователя входит пользователь www &#8211; от него работает apache. Если его не включить в неё, то он не сможет читать файлы в дирекориях пользователя. При других раскладках &#8211; типа, все пользователи в одной группе &#8211; косяк с безопасностью &#8211; есть возможность, что прочтут чужие файлы. Поэтому пришлось найти где это ограничение забито и подправить. Это файл <strong>/usr/src/sys/sys/syslimits.h</strong>, в нем редактируем такую строку:</p>
<blockquote><p>#define NGROUPS_MAX                64   /* max supplemental group id&#8217;s */</p></blockquote>
<p>Из минусов &#8211; надо помнить про эту опцию, при обновлениях, ну и при передаче дел неплохо бы упомянуть. Вроде как с 7.0 должны сделать это ограничение &#8220;мягким&#8221; &#8211; можно будет его менять через <a href="http://www.freebsd.org/cgi/man.cgi?query=sysctl&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+6.1-RELEASE&amp;format=html" target="_blank">sysctl</a>. На данный момент, во всех версиях, его менять нельзя &#8211; переменная есть, но не меняется:</p>
<blockquote><p>/usr/home/lissyara/&gt;sysctl -a | grep ngroup<br />
kern.ngroups: 16<br />
/usr/home/lissyara/&gt;sysctl kern.ngroups=64<br />
sysctl: oid &#8216;kern.ngroups&#8217; is read only<br />
/usr/home/lissyara/&gt;</p></blockquote>
<p>Короче &#8211; ставим сколько надо (всё не тестил, но вроде как всё рабтает нормально, правда, для верности, пересобирал вообще всё &#8211; <a href="http://www.lissyara.su/?id=1161" target="_blank">мир</a>, <a href="http://www.lissyara.su/?id=1072" target="_blank">ядро</a>, и<a href="http://www.lissyara.su/?id=1153" target="_blank"> все установленные приложения</a>. Каюсь &#8211; метод, всёже косячный, но умней ничё в башке не родилось, да и время поджимало). Пересобираем ядро. Это описано у <a href="http://www.lissyara.su/?id=1072" target="_blank">меня</a>, и в <a href="http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig-building.html" target="_blank">хандбуке</a>. Пока ядро пересобирается, готовимся, надо подправить <strong>/etc/fstab</strong>. Правим строку, относящуюся к монтированию раздела где живут сайты пользователей. У меня, в итоге, оно выглядит так:</p>
<blockquote>
<p style="text-align: left"># устройство   Куда моунтим         ФС    опции                  дамп<br />
/dev/ad2s1e    /usr/local/hosting   ufs   rw,userquota,nosuid    2   2</p></blockquote>
<p>Также, добавляем такую строку в <strong>/etc/pw.conf</strong>, чтобы при создании пользователя, генерились рандомные пароли:</p>
<blockquote><p>defaultpasswd=random</p></blockquote>
<p>По окончании сборки ядра перезагружаемся, и снова пробуем запустить <strong>edquota</strong> &#8211; если пройдёт без ошибок &#8211; значит всё нормально. (не забываем добавить вышеописанную строчку про &#8216;enable_quotas=&#8221;YES&#8221;&#8216; в <strong>/etc/rc.conf!</strong>). Далее, я настругал небольшой скриптик, для администрирования всего этого добра:</p>
<blockquote><p>#!/bin/sh -</p>
<p># Скрипт для создания клиентской шары, и заведения нужного пользователя<br />
# в системе. Написан lissyara 2006-10-02 &#8211; 2006-10-09 www.lisssyara.su</p>
<p># Ограничения заводимого пользователя &#8211; сколько может занимать места,<br />
# и сколько инод ему выделять (фактически, это &#8211; максимальное число файлов<br />
# и директоий которые он сможет завести. Но не точно.<br />
# Реально &#8211; может быть меньше). 0 &#8211; анлим.<br />
user_datasize=&#8221;500000&#8243; # В килобайтах в 4.11 и в Mb в 6.1, почему так -<br />
# я не понял. будте внимательны.<br />
user_inode=&#8221;100000&#8243;    # Иноды не резиновые. Оцените число командой<br />
# `df -i` и решайте какие у вас должны быть лимиты<br />
# Файловая система, на которую вносим ограничения<br />
fs=&#8221;/usr/local/hosting&#8221;<br />
# Данные для MySQL<br />
mysql_user=&#8221;root&#8221;<br />
mysql_passwd=&#8221;"</p>
<p># Переменные:<br />
domain_name=&#8221;$1&#8243;<br />
user_name=&#8221;$2&#8243;</p>
<p># программы<br />
cat=&#8221;/bin/cat&#8221;			# Перенаправление потоков ввода-вывода<br />
awk=&#8221;/usr/bin/awk&#8221;		# Язык обработки шаблонов<br />
echo=&#8221;/bin/echo&#8221;		# Вывод строк на экран<br />
grep=&#8221;/usr/bin/grep&#8221;		# Выбор строк по шаблону<br />
pw=&#8221;/usr/sbin/pw&#8221;		# Управление учётками, группами пользователей<br />
rm=&#8221;/bin/rm&#8221;			# Удаление файлов и директорий<br />
mkdir=&#8221;/bin/mkdir&#8221;		# Создание директорий<br />
chown=&#8221;/usr/sbin/chown&#8221;		# Выставление владельца файлов и директорий<br />
php=&#8221;/usr/local/bin/php-cgi&#8221;	# Бинарник PHP для использования в виде CGI<br />
cp=&#8221;/bin/cp&#8221;			# Копирование файлов и директорий<br />
mysql=&#8221;/usr/local/bin/mysql&#8221;	# MySQL &#8211; клиент<br />
wc=&#8221;/usr/bin/wc&#8221;		# подсчёт числа строк<br />
cut=&#8221;/usr/bin/cut&#8221;		# Обрезка строк<br />
md5=&#8221;/sbin/md5&#8243;			# подсчёт md5 файлов, строк<br />
jot=&#8221;/usr/bin/jot&#8221;		# генерация случйного числа<br />
tail=&#8221;/usr/bin/tail&#8221;		# Показывает последнюю часть файла<br />
edquota=&#8221;/usr/sbin/edquota&#8221;	# редактор квот<br />
ls=&#8221;/bin/ls&#8221;			# Kbcnbyu диреткорий, файлов<br />
chflags=&#8221;/usr/bin/chflags&#8221;		# Утановка флагов на файл<br />
tr=&#8221;/usr/bin/tr&#8221;		# Замена, удаление символов в строке<br />
mysqldump=&#8221;/usr/local/bin/mysqldump&#8221;	# Содание дампов MySQL<br />
gzip=&#8221;/usr/bin/gzip&#8221;		# Архиватор<br />
rm=&#8221;/bin/rm&#8221;			# Удаление файлов и директорий<br />
mv=&#8221;/bin/mv&#8221;			# Перемещение файлов и директорий<br />
basename=&#8221;/usr/bin/basename&#8221;	# Вывод базового имени файла (из полного пути)<br />
uname=&#8221;/usr/bin/uname&#8221;		# Информация о локальной машине</p>
<p># Файл с настройками php<br />
php_ini=&#8221;/usr/local/etc/php.ini-for-hosting&#8221;<br />
# Временный файл &#8211; для технических нужд<br />
tmp_file=&#8221;/tmp/$$.file.tmp&#8221;<br />
# Файл с системными альясами (для почты &#8211; отлупы на письма с сайтов будут<br />
# возвращаться на этот сервер, надо их пересылать на пользователя, у меня<br />
# забито как info@домен_пользователя)<br />
aliases_file=&#8221;/etc/aliases&#8221;	# На самом деле, во фре, это симлинк на<br />
# файл /etc/mail/aliases.<br />
# Директория хостинга<br />
hosting_preffix=&#8221;/usr/local/hosting/sites&#8221;<br />
# Директория для бэкапов удалённых сайтов<br />
backup_dir=&#8221;/usr/local/hosting/backup&#8221;</p>
<p># Строим префикс для работы с БД<br />
query_preffix=&#8221;${mysql} &#8211;user=${mysql_user} &#8211;password=${mysql_passwd} \<br />
&#8211;database=mysql&#8221;</p>
<p># Проверяем наличие приложений &#8211; в разных версиях FreeBSD разные пути<br />
for application in ${cat} ${awk} ${echo} ${grep} ${pw} ${rm} ${mkdir} \<br />
${chown} ${php} ${cp} ${mysql} ${wc} ${cut} ${md5} ${jot} ${tail} \<br />
${edquota} ${ls} ${chflags} ${tr} ${mysqldump} ${gzip} ${rm} ${mv} \<br />
${basename} ${uname} ${php_ini}<br />
do<br />
if [ ! -s ${application} ]; then<br />
echo &#8220;Приложение \`\`${application}&#8221; не найдено! Проверьте путь!&#8221;<br />
exit<br />
fi<br />
done</p>
<p># Поехали <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ))<br />
case &#8220;$3&#8243; in<br />
create)</p>
<p># Проверяем, не начинается ли имя пользователя с цифры (у `pw`, в этом случае<br />
# будут проблемы с созданием группы пользователя. Либо руками, либо эта<br />
# проверка. Я решил что лучше с цифры не начинать.)<br />
${echo} &#8220;11111111111&#8243; &gt;&gt; ${tmp_file}<br />
${echo} ${user_name} | ${grep} -v &#8220;^[0-9]&#8221; &gt; ${tmp_file}<br />
# проверяем размер файла &#8211; не равен ли нулю<br />
if [ -s ${tmp_file} ]<br />
then<br />
# Ничё не делаем<br />
${rm} ${tmp_file}<br />
else<br />
# Пытаются пользователя с первой цифрой всандалить.<br />
${echo} &#8220;Имя пользователя не может начинаться с цифры!!&#8221;<br />
${rm} ${tmp_file}<br />
exit<br />
fi</p>
<p># Проверяем, не содержит ли имя пользователя точки:<br />
${echo} ${user_name} | ${tr} -d &#8220;[:alnum:]&#8221; | ${grep} &#8220;\.&#8221; &gt; ${tmp_file}<br />
if [ -s ${tmp_file} ]<br />
then<br />
# Пытаются пользователя с точками в имени всандалить.<br />
${echo} &#8220;Имя пользователя не может содержать точки!!&#8221;<br />
${rm} ${tmp_file}<br />
exit<br />
else<br />
# Ничё не делаем<br />
${rm} ${tmp_file}<br />
fi</p>
<p># Проверяем уникальность имени пользователя<br />
${cat} /etc/passwd | ${awk} -F &#8220;:&#8221; &#8216;{print $1}&#8217; | ${grep} &#8220;^[:alnum:]&#8221; |<br />
{<br />
while read existing_user_name<br />
do<br />
if [ ${existing_user_name} = ${user_name} ]<br />
then<br />
# Есть такой юзер. Ругаемся, выходим<br />
${echo} &#8220;Пользователь с именем \&#8221;${user_name}\&#8221; существует!&#8221;<br />
# пишем временный файл, чтоб передать инфу из цикла<br />
${echo} 1 &gt; ${tmp_file}<br />
exit<br />
fi<br />
done<br />
}<br />
# Проверяем наличие и содержимое временного файла.<br />
if [ -s ${tmp_file} ]<br />
then<br />
if [ `cat ${tmp_file}` -eq 1 ]<br />
then<br />
${rm} ${tmp_file}	# удаляем временный файл<br />
exit			# выходим<br />
fi<br />
fi</p>
<p># проверяем, нету ли такого виртуалхоста в apache<br />
if [ -s ${hosting_preffix}/../httpd_configs/${domain_name}.conf ]<br />
then<br />
# Уже есть такой виртуалхост<br />
${echo} &#8220;Хост с именем \&#8221;${domain_name}\&#8221; уже есть в конфиге!&#8221;<br />
exit<br />
fi</p>
<p># такого пользователя нет &#8211; заводим в системе<br />
user_passwd=&#8221;`${pw} useradd ${user_name} -c \&#8221;UserDomain = \<br />
${domain_name}\&#8221; -L webuser -s /bin/csh -d ${hosting_preffix}/${user_name}`&#8221;<br />
# Добавляем апаче в группу пользователя<br />
${pw} groupmod ${user_name} -m www</p>
<p># Создаём структуру директорий для пользователя<br />
${mkdir} -p ${hosting_preffix}/${user_name}/log<br />
${mkdir} -p ${hosting_preffix}/${user_name}/www<br />
${mkdir} -p ${hosting_preffix}/${user_name}/cgi-bin<br />
${mkdir} -p ${hosting_preffix}/${user_name}/tmp</p>
<p># копируем файлы в CGI<br />
${cp} ${php} ${hosting_preffix}/${user_name}/cgi-bin/<br />
${cp} ${php_ini} ${hosting_preffix}/${user_name}/cgi-bin/</p>
<p># Даём права на эти директории<br />
${chown} -R ${user_name}:${user_name} ${hosting_preffix}/${user_name}</p>
<p># Ставим флаги на php.ini<br />
${chflags} sunlnk ${hosting_preffix}/${user_name}/cgi-bin/php.ini<br />
${chflags} schg ${hosting_preffix}/${user_name}/cgi-bin/php.ini</p>
<p># Добавляем пользователя в список тех, кто chroot`ится при<br />
# заходе по FTP<br />
${echo} ${user_name} &gt;&gt; /etc/ftpchroot</p>
<p># Стругаем квоты для пользователя<br />
${edquota} -e \<br />
${fs}:${user_datasize}:${user_datasize}:${user_inode}:${user_inode} \<br />
${user_name}</p>
<p># Стругаем пароль для MySQL<br />
mysql_user_passwd=&#8221;`${jot} -r 1 0 9000000 | ${md5} -p | ${tail} -1  \<br />
| ${cut} -c 1-8`&#8221;</p>
<p># Заводим пользователя в MySQL<br />
${query_preffix} &#8211;execute=&#8221;CREATE DATABASE IF NOT EXISTS \`${user_name}_db\`&#8221;<br />
${query_preffix} &#8211;execute=&#8221;GRANT ALL PRIVILEGES on \`${user_name}_db\`.* to \<br />
&#8216;${user_name}&#8217;@'localhost&#8217; IDENTIFIED BY &#8216;${mysql_user_passwd}&#8217;&#8221;</p>
<p># Создаём виртуалхост в апаче<br />
${echo} &#8220;# Этот файл создан автоматически, скриптом `basename $0`</p>
<p># Virtual host added by \`$USER\`, `date +%Y-%m-%d` in `date +%H:%M:%S`<br />
# from host = \`$REMOTEHOST\`, host IP = \&#8220;echo $SSH_CLIENT | awk &#8216;{print $1}&#8217;`\`<br />
ScriptAlias /cgi-bin/ ${hosting_preffix}/${user_name}/cgi-bin/<br />
ServerAdmin support@${domain_name}<br />
User ${user_name}<br />
Group ${user_name}<br />
DocumentRoot ${hosting_preffix}/${user_name}/www<br />
ServerName ${domain_name}<br />
ServerAlias www.${domain_name}<br />
# Директория пользователя</p>
<p>Options Indexes FollowSymLinks MultiViews<br />
AllowOverride All<br />
Order deny,allow<br />
Allow from all</p>
<p>DirectoryIndex index.php index.html index.htm index.shtml index.php3<br />
AddType application/x-httpd-php .php .php3<br />
Action  application/x-httpd-php /cgi-bin/php-cgi<br />
ErrorLog ${hosting_preffix}/${user_name}/log/error.log<br />
CustomLog ${hosting_preffix}/${user_name}/log/access.log common</p>
<p>&#8221; &gt;&gt; ${hosting_preffix}/../httpd_configs/${domain_name}.conf</p>
<p># Создаём почтовый альяс для юзера (иначе его почта будет захламлять<br />
# раздел /var). У меня стоит exim в простейшей (дефолтовой) конфигурации,<br />
# т.к. мыльница для клиентов не на хостинге, а на отдельном сервере,<br />
# и он работает с системными пользователями. Если будете делать по другому,<br />
# перепишите этот кусок под себя.<br />
$echo &#8221;<br />
# Alias for user = ${user_name}, domain = ${domain_name},<br />
# added by \`$USER\`, `date +%Y-%m-%d` in `date +%H:%M:%S`<br />
# from host = \`$REMOTEHOST\`, host IP = \&#8220;echo $SSH_CLIENT | awk &#8216;{print $1}&#8217;`\`<br />
${user_name}:	info@${domain_name}<br />
&#8221; &gt;&gt; ${aliases_file}</p>
<p>${echo} &#8220;Имя домена:			${domain_name}&#8221;<br />
${echo} &#8220;Имя пользователя:		${user_name}&#8221;<br />
${echo} &#8220;Пароль пользователя(FTP, SSH):	${user_passwd}&#8221;<br />
${echo} &#8220;Имя базы данных:		${user_name}_db&#8221;<br />
${echo} &#8220;Пароль пользователя (MySQL):	${mysql_user_passwd}&#8221;<br />
${echo} &#8220;Квота пользователя:		${user_datasize}&#8221;<br />
${echo} -n &#8220;Альяс почты (${aliases_file})	${user_name}@`${uname} -n`&#8221;<br />
${echo} &#8221; &#8211;&gt; info@${domain_name}&#8221;<br />
;;<br />
delete)<br />
${echo} &#8220;Вы действительно хотите удалить пользователя и домен?!&#8221;<br />
${echo} &#8220;Наберите YES для подтверждения, или Ctrl+C для выхода&#8230;&#8221;<br />
read confirmation<br />
if [ $confirmation = YES ] &gt; /dev/null 2&gt;&amp;1<br />
then<br />
# Подтверждено.<br />
# Стругаем директорию<br />
${mkdir} -p ${backup_dir}/${domain_name}<br />
# снимаем флаги с директории юзера<br />
${chflags} -R nosunlnk ${hosting_preffix}/${user_name}/*<br />
${chflags} -R noschg ${hosting_preffix}/${user_name}/*<br />
# Копируем содержимое<br />
${echo} &#8220;Копируются пользовательские данные&#8230;&#8221;<br />
${cp} -R ${hosting_preffix}/${user_name} \<br />
${backup_dir}/${domain_name}<br />
# Дампим БД пользователя<br />
${echo} &#8220;Делается дамп БД пользователя&#8230;.&#8221;<br />
${mysqldump} &#8211;user=${mysql_user} &#8211;password=${mysql_passwd} \<br />
&#8211;database ${user_name}_db | ${gzip} &gt; \<br />
${backup_dir}/${domain_name}/${user_name}_db.sql.gz<br />
# Сносим всё нахрен:<br />
# Перемещаем конфиг апача для этого домена<br />
${mv} ${hosting_preffix}/../httpd_configs/${domain_name}.conf \<br />
${backup_dir}/${domain_name}/<br />
# Удаляем доки:<br />
${echo} &#8220;Удаляются пользовательские данные&#8230;&#8221;<br />
${rm} -Rf ${hosting_preffix}/${user_name}<br />
# Удаляем БД<br />
${echo} &#8220;Удаляется БД пользователя&#8230;.&#8221;<br />
${query_preffix} &#8211;execute=&#8221;DROP DATABASE IF EXISTS \<br />
\`${user_name}_db\`&#8221;<br />
# Удаляется пользователь из MySQL<br />
${echo} &#8220;Удаляется пользователь из MySQL&#8230;&#8221;<br />
${query_preffix} &#8211;execute=&#8221;REVOKE ALL PRIVILEGES  \<br />
ON *.* FROM &#8216;${user_name}&#8217;@'localhost&#8217;&#8221;<br />
${query_preffix} &#8211;execute=&#8221;REVOKE GRANT OPTION \<br />
ON *.* FROM &#8216;${user_name}&#8217;@'localhost&#8217;&#8221;<br />
${query_preffix} &#8211;execute=&#8221;DELETE FROM mysql.user WHERE \<br />
User=&#8217;${user_name}&#8217; and Host=&#8217;localhost&#8217;&#8221;<br />
# Удаляется пользователь из системы<br />
${echo} &#8220;Удаляется пользователь из системы&#8230;&#8221;<br />
${pw} userdel ${user_name}<br />
${echo} &#8220;Удаляется группа пользователя из системы&#8230;&#8221;<br />
${pw} groupdel ${user_name}<br />
else<br />
# не захотел удалять <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
${echo} &#8220;Пользователь и его сайт были оставлены&#8221;<br />
fi<br />
;;<br />
update)<br />
# Обновление версии php у всех пользователей.<br />
${ls} ${hosting_preffix}/|<br />
{<br />
# идёт листинг сайтов, но т.к. имя пользователя и директории<br />
# одинаковые &#8211; значит это ещё и именя пользователей <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
while read site_user_name<br />
do<br />
${echo} &#8220;Идёт обновление версии php для пользователя ${site_user_name}&#8221;<br />
# Копируем новый<br />
${cp} ${php} ${hosting_preffix}/${site_user_name}/cgi-bin/<br />
# Даём права на него<br />
${chown} ${site_user_name}:${site_user_name} \<br />
${hosting_preffix}/${site_user_name}/cgi-bin/`${basename} ${php}`<br />
done<br />
}<br />
${echo} &#8220;Обновление завершено!&#8221;<br />
;;<br />
*)</p>
<p>${echo} &#8220;&#8221;<br />
${echo} &#8220;Этот скрипт создаёт пользователя в системе, генерит ему<br />
пароль, создаёт базу данных MySQL, генерит для неё пароль,<br />
выставляет квоты на использование ресурсов системы &#8211; на данный<br />
момент все новые пользователи равноправны &#8211; смотрите в login.conf<br />
класс &#8216;webuser&#8217;. Текущие ограничения:<br />
Места:				500mb	(правиться в этом файле)<br />
Инод:				10000	(правиться в этом файле)<br />
Процессов:			64	(правиться в login.conf)<br />
Время работы процесса:		5 минут	(правиться в login.conf)<br />
Размер стека:			4mb	(правиться в login.conf)<br />
Размер блокируемой оперативки:	64mb	(правиться в login.conf)<br />
Макимальный объём оперативки:	256mb	(правиться в login.conf)<br />
Максимальный размер файла:	100mb	(правиться в login.conf)<br />
Открытых файлов на процесс:	1024	(правиться в login.conf)<br />
Приоритет приложений:		20	(правиться в login.conf)</p>
<p>Внимание! На файл php.ini ставяться флаги \`schg\` и \`sunlnk\`,<br />
не сняв их &#8211; файл не уалить и не изменить! Цель &#8211; не позволить юзеру<br />
менять свои настройки php.<br />
Удаление флагов:<br />
chflags noschg php.ini<br />
chflags nosunlnk php.ini<br />
Установка:<br />
chflags schg php.ini<br />
chflags sunlnk php.ini<br />
(Может понадобиться на случай если надо всё-таи чё-то поменять<br />
в дефолтовом файле. Но не забывайте вернуть флаги!)</p>
<p>Также есть предложение придерживаться определённого именования<br />
юзеров для их сайтов &#8211; типа если домен называется \`some.com\` то<br />
юзер должен быть \`somecom\` &#8211; так понятней. Либо, как вариант,<br />
завести таблицу, типа: 1- su, 2 &#8211; ru, 3 -com и т.п. и добавлять эти<br />
цифры в конце. Кому как удобней будет. На данном сервере, под<br />
FreeBSD 4.11, ограничение на длинну имени пользователя &#8211; 16 символов.<br />
Если длинней &#8211; придётся обрубать с конца, или ещё как &#8211; чтобы не<br />
совпадало с существующими.</p>
<p>Про удаление &#8211; перед удалением всё бэкаптся, кроме учётки пользователя.</p>
<p>Про обновления &#8211; имя пользователя и домен &#8211; любые. Нужно при обновлении<br />
версии php на сервере. Обновляются все бинарники и перевыставляются права.</p>
<p>P.S. Не забывайте перезапускать апач после создания-удаления!&#8221;<br />
${echo} &#8220;&#8221;<br />
${echo} &#8220;Использование: `${basename} $0` \<br />
{domainname username create|delete|update}&#8221; &gt;&amp;2<br />
${echo} &#8220;&#8221;<br />
exit 64<br />
;;<br />
esac</p></blockquote>
<p>Можете воспользоваться моим, а можете делать всё руками &#8211; решать вам. Тока к скипту надо одно пояснение &#8211; он удалит любого системного пользователя, если по ошибке вы воткнёте его имя в качастве параметра с командой на удаление. Поэтому, если не понимаете, как оно работает &#8211; не надо пользоваться. Там есть защита от дурака, но от дурака умного. У меня он пашет, а как будет у вас &#8211; не знаю.<br />
Небольшое замечание по поводу пути к файлу <strong>php.ini</strong>. В том файле, что копируется, я подправил лишь несколько пунктов, вот их настройки:</p>
<blockquote><p>safe_mode = On<br />
safe_mode_gid = On<br />
disable_functions = system<br />
# поправка &#8211; этот пункт лучше так не ставить &#8211; php некорректно<br />
# это обрабатывает&#8230; может даже не php но у пары клиентов<br />
# были проблемы с аплоадом файлов на сервер, пока<br />
# не поставил абсолютный путь&#8230;<br />
#upload_tmp_dir = ../tmp<br />
session.save_path = ../tmp<br />
session.auto_start = 1<br />
upload_max_filesize = 4M<br />
memory_limit = 64M</p></blockquote>
<p>А вообще, возьмите файл <strong>/usr/local/etc/php.ini-recommended</strong>, и правьте его под свои нужды.<br />
После проделанного, не забываем поставить парва на скрипт &#8211; в нём хранится рутовый пароль от MySQL (в принципе, можно заюзать флаг &#8220;-p&#8221;, чтобы запрашивал его каждый раз, или отдельную переменную, а потом подставлять её значение &#8211; смотрите сами.)</p>
<blockquote><p>/usr/local/hosting/scripts/&gt;chmod 700 create_client.sh<br />
/usr/local/hosting/scripts/&gt;chown root:wheel create_client.sh<br />
/usr/local/hosting/scripts/&gt;ls -alh create_client.sh<br />
-rwx&#8212;&#8212;  1 root  wheel    12K 24 окт 10:47 create_client.sh</p></blockquote>
<p>Ну и пробуем скриптик:</p>
<blockquote><p>/usr/local/hosting/scripts/&gt;./create_client.sh testing.su testing create<br />
Имя домена:                     testing.su<br />
Имя пользователя:               testing<br />
Пароль пользователя(FTP, SSH):  QBnOXa2k8DCnGY3<br />
Имя базы данных:                testing_db<br />
Пароль пользователя (MySQL):    64cb2586<br />
Квота пользователя:             500000<br />
Альяс почты (/etc/aliases)      testing@hosting.kontora.su &#8211;&gt; info@testing.su<br />
/usr/local/hosting/scripts/&gt;<br />
/usr/local/hosting/scripts/&gt;<br />
/usr/local/hosting/scripts/&gt;<br />
/usr/local/hosting/scripts/&gt;<br />
/usr/local/hosting/scripts/&gt;./create_client.sh testing.su testing delete<br />
Вы действительно хотите удалить пользователя и домен?!<br />
Наберите YES для подтверждения, или Ctrl+C для выхода&#8230;<br />
YES<br />
Копируются пользовательские данные&#8230;<br />
Делается дамп БД пользователя&#8230;.<br />
Удаляются пользовательские данные&#8230;<br />
Удаляется БД пользователя&#8230;.<br />
Удаляется пользователь из MySQL&#8230;<br />
Удаляется пользователь из системы&#8230;<br />
Удаляется группа пользователя из системы&#8230;<br />
/usr/local/hosting/scripts/&gt;</p></blockquote>
<p>Вот и всё. Соответствено, где надо подрихтуйте напильником под свои нужды (в 4.11 и 6.0 пару путей различаются), добавьте такие строки в конец конфига апача:</p>
<blockquote>
<p style="text-align: left">NameVirtualHost *:80</p>
<p style="text-align: left"># Это первый виртуалхост &#8211; он должен быть этого сервера, т.к.<br />
# иначе при обращении на несуществующие сайты будет выводиться<br />
# самый первый виртуалхост &#8211; это может оказаться чей-то из клиентов,<br />
# поэтому создаём скриптом, и копируем конфиг сюда.</p>
<p>ScriptAlias /cgi-bin/ /usr/local/hosting/sites/hosting/cgi-bin/<br />
ServerAdmin support@hosting.kontora.su<br />
User hosting<br />
Group hosting<br />
DocumentRoot /usr/local/hosting/sites/hosting/www<br />
ServerName hosting.kontora.su<br />
ServerAlias www.hosting.kontora.su<br />
# Директория пользователя</p>
<p>Options Indexes FollowSymLinks MultiViews<br />
AllowOverride All<br />
Order deny,allow<br />
Allow from all</p>
<p>DirectoryIndex index.php index.html index.htm index.php3<br />
AddType application/x-httpd-php .php .php3<br />
Action  application/x-httpd-php /cgi-bin/php-cgi<br />
ErrorLog /usr/local/hosting/sites/hosting/log/error.log<br />
CustomLog /usr/local/hosting/sites/hosting/log/access.log common</p>
<p style="text-align: left">Include /usr/local/hosting/httpd_configs/*.conf</p>
</blockquote>
<p>P.S.1 Настройки системы и php брались из головы, так, как я считал нужным. Может что-то и неправильно, или можно сделать лучше. Смотрите и думайте сами.<br />
P.S.2 Насчёт ограничения в 16 групп и правки исходников &#8211; это правда плохая идея. Хотя проблем вроде нету. И если знаете, как можно сделать грамотней &#8211; поделитесь&#8230;<br />
P.S.3 Настройки MySQL не рассмотрены сознательно, <a href="http://howtolinux.ru/2009/09/01/howto-установка-mysql/" target="_self">смотрите тут</a></p>
<p style="text-align: right"><em>Взято с <a href="http://www.lissyara.su/?id=1066" target="_blank">lissyara.su</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/09/01/howto-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%85%d0%be%d1%81%d1%82%d0%b8%d0%bd%d0%b3%d0%b0-%d0%bf%d0%be%d0%b4-apache-php-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Apache2 + php5 + mod_fastcgi</title>
		<link>http://howtolinux.ru/2009/09/01/howto-apache2-php5-mod_fastcgi/</link>
		<comments>http://howtolinux.ru/2009/09/01/howto-apache2-php5-mod_fastcgi/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 08:42:30 +0000</pubDate>
		<dc:creator>Shugich</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_fastcgi]]></category>
		<category><![CDATA[PHP5]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=119</guid>
		<description><![CDATA[Автор: lissyara Пришла пора переходить на второй апач и пятый php (навеяно грядущим завершением поддержки php4 и будущим выходом php6). Пора ловить глюки на новой платформе Было решено заменить на своём сервере старую связку на более новую. Ввиду того, что все кричат более медленную работу php5 и apache2, да и крутится это будет не на [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right"><em>Автор: <a href="http://www.lissyara.su/?id=1024" target="_blank">lissyara</a></em></p>
<p>Пришла пора переходить на второй апач и пятый php (навеяно грядущим завершением поддержки php4 и будущим выходом php6). Пора ловить глюки на новой платформе <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Было решено заменить на своём сервере старую <a href="http://www.lissyara.su/?id=1066" target="_blank">связку</a> на более новую. Ввиду того, что все кричат более медленную работу php5 и apache2, да и крутится это будет не на FreeBSD 4.11, как в прошлый раз, а на FreeBSD 6.2, решил как-то всё это ускорить. Решение <a href="http://forum.lissyara.su/viewtopic.php?f=8&amp;t=3839#p24452" target="_blank">подсказали</a> давно, тока опробовать не доходили руки. Дошли <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Однако, предложенное там решение с полпинка не завелось &#8211; а разбираться было лениво &#8211; выходной всё же, порылся в портах, и нашёл другой модуль, его и будем ставить. Поехали &#8211; рихтуем <strong>/etc/make.conf</strong>, добавляем туда такие опции:</p>
<p><span id="more-119"></span></p>
<blockquote><p># default PHP version<br />
DEFAULT_PHP_VER=5<br />
PORTSDIR?=      /usr/ports</p>
<p># apache2<br />
.if ${.CURDIR} == ${PORTSDIR}/www/apache20<br />
# SSL &#8211; кому надо &#8211; включат &#8211; мне на этой машине не нужен<br />
WITHOUT_SSL=            YES<br />
# Включение поддержки suExec<br />
WITH_SUEXEC=            YES<br />
# Корневая директория suExec<br />
SUEXEC_DOCROOT=         /<br />
# Cубдиректория пользователя<br />
SUEXEC_USERDIR=         www<br />
# Файл лога suExec<br />
SUEXEC_LOGFILE=         /var/log/httpd/suexec.log<br />
.endif</p></blockquote>
<p>После чего ставим софт (подразумевается что установка чистая &#8211; иначе вначале снесите php4 и апачу 1.3) на машину. Апач:</p>
<blockquote><p>host% make -C /usr/ports/www/apache20/ install clean</p></blockquote>
<p>PHP:</p>
<blockquote><p>host% make -C /usr/ports/lang/php5/ install clean</p></blockquote>
<p>Лезет окошко, где выбираем такие опции &#8211; опять же &#8211; мне не нужна CLI версия, и я её не выбрал &#8211; вам может быть нужна:</p>
<blockquote><p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<br />
|                    Options for php5 5.2.3                      |<br />
|                                                                |<br />
|[ ] CLI        Build CLI version                                |<br />
|[X] CGI        Build CGI version                                |<br />
|[ ] APACHE     Build Apache module                              |<br />
|[ ] DEBUG      Enable debug                                     |<br />
|[X] SUHOSIN    Enable Suhosin protection system (not for jails) |<br />
|[X] MULTIBYTE  Enable zend multibyte support                    |<br />
|[ ] IPV6       Enable ipv6 support                              |<br />
|[X] MAILHEAD   Enable mail header patch                         |<br />
|[X] REDIRECT   Enable force-cgi-redirect support (CGI only)     |<br />
|[X] DISCARD    Enable discard-path support (CGI only)           |<br />
|[X] FASTCGI    Enable fastcgi support (CGI only)                |<br />
|[X] PATHINFO   Enable path-info-check support (CGI only)        |<br />
|                                                                |<br />
|                                                                |<br />
|                   [  OK  ]       Cancel                        |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+</p></blockquote>
<p>Также ставим сам модуль mod_fastcgi:</p>
<blockquote><p>host% make -C /usr/ports/www/mod_fastcgi install clean</p></blockquote>
<p>Проверяем PHP:</p>
<blockquote><p>host% echo &#8221; | php-cgi<br />
X-Powered-By: PHP/5.2.3<br />
Content-type: text/html</p>
<p>test string<br />
host%</p></blockquote>
<p>Работает. Раскомментируем строчку установленного модуля в конфиге апача:</p>
<blockquote><p>host% grep &#8221; fastcgi_module &#8221; /usr/local/etc/apache2/httpd.conf<br />
LoadModule fastcgi_module     libexec/apache2/mod_fastcgi.so</p></blockquote>
<p>После чего в конец конфига апача дописываем такое:</p>
<blockquote><p># added by lissyara 2007-07-19 in 23:36</p>
<p># конфиг модуля</p>
<p># конфиг модуля.<br />
# полный список опций &#8211; доступен по следующему адресу<br />
# http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html<br />
# тут приведены лишь те, которые я заюзал<br />
# -singleThreshold &#8211; Целое число, мжду 0 и 100, используеммое<br />
# для определения, может ли быть завершён последний экземпляр<br />
# приложения FastCGI. Если менеджер процессов, вычисляет, что<br />
# фактор загрузки для приложения меньше заданного порога, то<br />
# последний экземпляр завершается. Для работы приложения в<br />
# режиме &#8220;idle&#8221; долгого времени, вы должны задать значение<br />
# ближе к 1, однако, если более приоритетна память, или время<br />
# CPU, более применимо значение 100. Значение 0 предотвращает<br />
# завершение последнего экземпляра приложения; это &#8211; значение<br />
# по умолчанию, и менять его не рекомендуется (особенно, если<br />
# установлена -appConnTimeout)<br />
# -minProcesses &#8211; минимальное общее число динамических приложений<br />
# FastCGI, разрешённых к работе в любое время, без убивания<br />
# менеджером процессов.<br />
# -restart &#8211; заставляет менеджер процессов повторно запускать<br />
# приложения в случае сбоя (подобно статическим приложениям)<br />
# -idle-timeout &#8211; число секунд бездействия приложения FastCGI,<br />
# до прерывания запроса и логгирования события. Таймер бездейстаия<br />
# применяется лишь к долго висящим соединениям приложений FastCGI.<br />
# Если запрос будет находиться в очереди к приложению, но<br />
# приложение не отвечает (путём записи и сброса) в течение этого<br />
# периода, то запрос будет прерван. Если связь с приложением<br />
# успешно завершается, но не завершается с клиентом, (ответ -<br />
# buffered), таймаут не применяется.<br />
# -killInterval &#8211; Определяет, как часто менеджером процессов<br />
# применяется политика завершения динамических экземпляров<br />
# приложения. Меньшее число приводит к более агессивной политике,<br />
# большее &#8211; к менее агрессивной.<br />
# -autoUpdate &#8211; вызывает проверку модулем mod_fastcgi проверку<br />
# времени модификации приложения на диске до обработки каждого<br />
# запроса. Если приложение на диске изменилось, уведомляется<br />
# менеджер процессов и все работающие экземпляры программы<br />
# уничтожаются. Вообще, предпочтительно, чтобы этот тип<br />
# функциональности был встроен в приложение (например, каждый<br />
# 100-й запрос проверяет, есть ли новая версия на диске, и выходит<br />
# если это так). Могут быть ошибки, если эта опция применяется с<br />
# опцией -restart<br />
# -pass-header &#8211; имя заголовка запроса HTTP для передачи среде<br />
# request. Эта опция делает доступным содержимое заголовков,<br />
# которые обычно недоступны (например, Authorization) в окружении GCI.<br />
FastCgiConfig   -singleThreshold 30 -minProcesses 2 -restart    \<br />
-idle-timeout 400 -killInterval 200 -autoUpdate \<br />
-pass-header HTTP_AUTHORIZATION<br />
# используетс ядля включения враппера<br />
FastCgiWrapper /usr/local/sbin/suexec<br />
# директория где хранятся сокеты<br />
FastCgiIpcDir /var/run/fastcgi<br />
# предпринимаемые для такого типа файлов действия<br />
Action application/x-httpd-fastphp /php-fcgi/php.sh<br />
Action application/x-httpd-php /php-fcgi/php.sh<br />
# добавляем типы файлов &#8211; у меня нету типа .php4 .php5 и т.д.<br />
# если у вас есть &#8211; добавльте через пробелы в этой строке<br />
AddType application/x-httpd-fastphp     .php<br />
# Обработка файлов апачем</p>
<p>Options ExecCGI FollowSymLinks<br />
SetHandler fastcgi-script</p>
<p># директория с данными</p>
<p>Options         Indexes FollowSymLinks MultiViews<br />
AllowOverride   All<br />
Order           deny,allow<br />
Allow from      all</p>
<p># директория скриптов пользователя</p>
<p>AllowOverride None<br />
Options None<br />
Order allow,deny<br />
Allow from all</p>
<p># какие файлы считать индексными в директориях<br />
# (выше, в конфиге есть такая же директива &#8211; я её закомментил)<br />
DirectoryIndex index.php index.html index.htm</p>
<p># включаем виртуалхосты основанные на именах<br />
NameVirtualHost *:80</p>
<p># первый виртуальный хост. Он будет показываться вместо всех<br />
# несконфигирирвоанных виртуалхостов, при обращении к этому серверу</p>
<p>ServerAdmin     admin@my-domain.ru<br />
#       AliasMatch      ^/~([^/]+)(/.*)*        /usr/home/$1/data$2<br />
DocumentRoot    /usr/home/my-domain/www/data<br />
ServerName      host.my-domain.su<br />
SuexecUserGroup my-domain   my-domain<br />
Alias           /php-fcgi/      /usr/home/my-domain/www/cgi-bin/<br />
CustomLog       /var/log/httpd/httpd-access.log       combined<br />
ErrorLog        /var/log/httpd/httpd-error.log</p>
<p># остальные сайты. Мне удобней, когда конфиги лежат в одном месте:<br />
Include /usr/local/etc/apache2/configs/*.conf</p></blockquote>
<p>Эти конфиги повторяют конфиг первого виртуалхоста, который приведён в предыдущем листинге. Где-то в процесе установки, не забываем создать юзера, от которого будет работать дефолтовый виртуалхост. У меня он называется &#8216;my-domain&#8217;. Также, для каждого виртуалхоста пишем скрипт такого виду:</p>
<blockquote><p>host% more /usr/home/my-domain/www/cgi-bin/php.sh<br />
#!/bin/sh</p>
<p>PHP_FCGI_CHILDREN=4<br />
export PHP_FCGI_CHILDREN<br />
#PHP_FCGI_MAX_REQUESTS=5000<br />
#export PHP_FCGI_MAX_REQUESTS</p>
<p>exec /usr/local/bin/php-cgi</p></blockquote>
<p>Делаем соответствующего пользователя его владельцем, и делаем его исполняемым:</p>
<blockquote><p>host% chown my-domain:my-domain /usr/home/my-domain/www/cgi-bin/php.sh<br />
host% chmod 555 /usr/home/my-domain/www/cgi-bin/php.sh<br />
host%</p></blockquote>
<p>Добавлям строчки в rc.conf:</p>
<blockquote><p># apache 2<br />
apache2_enable=&#8221;YES&#8221;</p></blockquote>
<p>Также, нужно в группу пользователя добавить пользователя www:</p>
<blockquote><p>host% pw groupmod my-domain -m www</p></blockquote>
<p>Остаются ограничения, описанные в прошлой статье &#8211; 16 групп, и, соответтсвенно максимум 15 пользователей. Лечится также &#8211; в исходниках ядра правим такую строку:</p>
<blockquote><p>host% grep NGROUPS_MAX /usr/src/sys/sys/syslimits.h</p></blockquote>
<p>Соответсвенно сюда вписываем нужное число, и пересобираем ядро. (Обещщают с семёрки сделать чтобы менялось штатными средствами, но пока не сделали&#8230;) Как вариант &#8211; возможно включение ACL на разделе &#8211; но это замедлит рбоату с ФС (не пробовал, но по идее должно замедлять <img src='http://howtolinux.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Ну и всё. Можно создавать директорию для конфигов отсутствующих пока хостов, и запускать:</p>
<blockquote><p>host% mkdir /usr/local/etc/apache2/configs<br />
host% /usr/local/etc/rc.d/apache2.sh start<br />
Starting apache2.<br />
host% ps -aux | grep http<br />
root    54653  0,0  1,1  4572  2872  ??  Ss  20:09   0:00,02 /usr/local/sbin/httpd<br />
www     54654  0,0  1,1  4512  2828  ??  S   20:09   0:00,00 /usr/local/sbin/httpd<br />
www     54655  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd<br />
www     54656  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd<br />
www     54657  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd<br />
www     54658  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd<br />
www     54659  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd<br />
root    54661  0,0  0,2  1520   560  p1  R+  20:09   0:00,00 grep http<br />
host% ps -aux | grep php-cgi<br />
my-domain 54663  5,1  4,1 17584 10440  ??  S   20:09   0:00,21 /usr/local/bin/php-cgi<br />
my-domain 54662  1,6  2,6 14268  6676  ??  Ss  20:09   0:00,09 /usr/local/bin/php-cgi<br />
my-domain 54664  0,0  2,7 14268  6688  ??  S   20:09   0:00,00 /usr/local/bin/php-cgi<br />
my-domain 54665  0,0  2,7 14268  6688  ??  S   20:09   0:00,00 /usr/local/bin/php-cgi<br />
my-domain 54666  0,0  2,7 14268  6688  ??  S   20:09   0:00,00 /usr/local/bin/php-cgi<br />
root    54669  0,0  0,3  1604   880  p1  S+  20:09   0:00,00 grep php-cgi<br />
host% sockstat | grep /var/run/fastcg<br />
my-domain php-cgi   54666 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec<br />
my-domain php-cgi   54665 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec<br />
my-domain php-cgi   54664 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec<br />
my-domain php-cgi   54663 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec<br />
my-domain php-cgi   54662 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec<br />
www     httpd     54654 12 stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec<br />
host%</p></blockquote>
<p>Такой листинг вы увидите лишь если будет хоть одно обращение. Иначе &#8211; тока работающий апач. В случае любых проблем &#8211; уровень логов в конфиге &#8211; дебаг, и смотрим логи.</p>
<p>P.S. По итогам пары дней тестирования: Прилично быстрей чем в режиме чистого cgi.</p>
<p style="text-align: right"><em>Взято с <a href="http://www.lissyara.su/?id=1360" target="_blank">lissyara.su</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/09/01/howto-apache2-php5-mod_fastcgi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Installing Apache + Mysql + php Mandriva 2009.0</title>
		<link>http://howtolinux.ru/2009/08/28/howto-installing-apache-mysql-php-mandriva-2009-0/</link>
		<comments>http://howtolinux.ru/2009/08/28/howto-installing-apache-mysql-php-mandriva-2009-0/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 08:03:16 +0000</pubDate>
		<dc:creator>Shugich</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Mandriva]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=95</guid>
		<description><![CDATA[В этой статье рассказывается как установить Лампу. (Apache, Mysql, php) на Mandrvia 2009.0 Установим Apache urpmi apache Сконфигурируем: Поправим строчку listen Listen 192.168.10.225:80 У меня 192.168.10.225 &#8211; внешний интерфейс, можно конечно оставить его слушать на всех интерфейсах по умолчанию. Включим поддержку Virtual hosts. Сделаем Virtual host &#8220;test&#8221; допишем в конец NameVirtualHost 192.168.10.225:80 Setenv VLOG ServerName [...]]]></description>
			<content:encoded><![CDATA[<p>В этой статье рассказывается как установить Лампу.<br />
(Apache, Mysql, php) на Mandrvia 2009.0</p>
<h3>Установим Apache</h3>
<blockquote><p>urpmi apache</p></blockquote>
<p>Сконфигурируем:</p>
<p>Поправим строчку listen</p>
<blockquote><p>Listen 192.168.10.225:80</p></blockquote>
<p>У меня 192.168.10.225  &#8211; внешний интерфейс, можно конечно оставить его слушать на всех интерфейсах по умолчанию.</p>
<p><span id="more-95"></span></p>
<p>Включим поддержку Virtual hosts. Сделаем Virtual host &#8220;test&#8221; допишем в конец</p>
<blockquote><p>NameVirtualHost 192.168.10.225:80</p>
<p>Setenv VLOG</p>
<p>ServerName test</p>
<p>DocumentRoot /media/disk/out/self/sites/test</p>
<p>ErrorLog /media/disk/out/self/sites/test/test-error.log</p>
<p>CustomLog /media/disk/out/self/sites/test/test-custom.log common</p>
<p>DirectoryIndex index.php index.html index.htm</p>
<p>allow from all</p>
<p>&lt;/Directory&gt;</p>
<p>&lt;/VirtualHost&gt;</p></blockquote>
<p>не забудем создать соответствующие файлы лога в DocumentRoot куда ссылается соответствующая директива.</p>
<p>Поправим /etc/hosts на машине с которой будем заходить (если мы домен &#8220;test&#8221; не зарегистрировали предварительно) наберем там</p>
<blockquote><p>192.168.10.225  test</p></blockquote>
<p>Дадим права пользователю apache на директорию test. Я это сделал с помощью ACL. (Насчет прав &#8211; можно )</p>
<blockquote><p>setfacl -R -m u:apache:rwx test/<br />
setfacl -R -m default:u:apache:rwx test/</p></blockquote>
<p>Установим php</p>
<blockquote><p>urpmi apache-mod_php</p></blockquote>
<p>Установим поддержку mysql к php</p>
<blockquote><p>urpmi -y php-mysql</p></blockquote>
<p>Установим поддержку xml к php (нужно для появления функции utf8-encode)</p>
<blockquote><p>urpmi php-xml</p></blockquote>
<p>Остановимся немного подробнее на этом. В пхп существует некий набор модулей которые можно к нему подключать. В true варианте эти модули должны компилитьcя совместно с php движком &#8211; на выходе получим dynamic shared object  &#8211; динамическую либу (с расширением .so), которую можно подключить уже напрямую к этому откомпиленному движку пхп. В мандриве все статические либы уже откомпилены. Достаточно просто набрать ее имя в инсталляторе и инсталлятор сам ее установит.</p>
<p>Фактически, инсталлятор, просто добавляет уже откомпиленную либу в /usr/lib/php/ (этот путь можно подсмотреть в заголовке Paths and Directories ) и пхп просто ее подгружает. В частности в нашем случае при загрузке пхп подключиются две либы которые нам нужны &#8211; xml.so и mysql.so.</p>
<p>После подключения либы в пхп появятся новые функции, в частности &#8211; функции работы с базой данных, или функция utf8-encode как в последнем случае.<br />
Установим Mysql</p>
<blockquote><p>urpmi mysql</p></blockquote>
<p>Поменяем пароль к mysql (при новой инсталяции он пуст)</p>
<blockquote><p>mysql -u root<br />
use mysql<br />
update user set Password=PASSWORD(&#8216;new-password-here&#8217;) WHERE User=&#8217;root&#8217;;</p></blockquote>
<p>где new-password-here &#8211; новый пароль на рута.</p>
<p><em>Жуки.</em></p>
<p><em>Как поменять пароль на рута, не зная рутовый пароль</em></p>
<p><em>Грузимся в безопасном режиме, меняем пароль.</em></p>
<blockquote><p>mysqld_safe &#8211;skip-grant-tables &amp; mysql &#8211;user=root mysql<br />
mysql&gt; update user set Password=PASSWORD(&#8216;new-password-here&#8217;) WHERE User=&#8217;root&#8217;;<br />
mysql&gt; flush privileges;</p></blockquote>
<p><em>Жуки.</em></p>
<p><em>Mysql не запускается &#8211; просит ввести hostname отличный от localhost.</em></p>
<p><em>Можно попробовать просто его поменять, но судя по всему баг сидит глубже ( <a href="https://qa.mandriva.com/show_bug.cgi?id=38398" target="_blank">https://qa.mandriva.com/show_bug.cgi?id=38398</a> )</em></p>
<p><em>По рецепту -</em></p>
<p><em>1. rpm -e mysql<br />
2. rm -f /var/lib/mysql/mysql/*<br />
3. /bin/hostname 127.0.0.1<br />
4. urpmi mysql</em></p>
<p>Удаляем mysql если он есть чистим директорию от его либ и прочего, устанавливаем hostname 127.0.0.1 и ставим mysql заново.</p>
<h3>Установим Phpmyadmin</h3>
<blockquote><p>urpmi phpmyadmin</p></blockquote>
<p>Обратим внимание что при установке с помощью urpmi phpmyadmin создает свою рабочую директорию в директории апача по умолчанию.</p>
<p>Этой директорией будет /var/www/</p>
<p>Кроме того  он создает конфиг файл в /etc/httpd/conf/webapps.d который собственно описывает то, где он находится.</p>
<p>доступен он будет с-нно после установки по адресу.</p>
<p><a href="http://192.168.10.225/phpmyadmin/" target="_blank">http://192.168.10.225/phpmyadmin/</a></p>
<p>Обратим внимание что я указал в качестве доменного имени простой ипишник &#8211; в этом случае ни один из Virtual hosts не сработает поскольку им нужно доменное имя описанное в их директивах,  а сработает директива по умолчанию у которой DocumentRoot установлен на /var/www/ &#8211; собственно что нам и нужно.</p>
<h3>Перенос сайта.</h3>
<p>Это одна из тех постоянных штук которые случаются изредка. Потому, увековечим.</p>
<p>Лично мне это все было нужно для того чтобы перевести систему modx с хостинга на локальный сервер &#8211; чтобы поковыряться в ней не боясь уронить основной хост.</p>
<p>Поэтому теперь нам нужно создать базу данных с пользователем для нашего скопированного движка и восстановить туда дамп.</p>
<p>Заходим в интерфейс пхпмайадмин под рутовскими привелегиями, заходим в &#8220;Привилегии&#8221;, говорим создать нового пользователя. Вбиваем пароль, логин, создаем (например пользователя user).</p>
<p>Посмотреть под какими привилегиями движок коннектился к старой базе данных можно в файле config.inc.php который находится в manager/includes. Идем в &#8220;базы данных&#8221; создаем новую базу данных &#8211; одноименную с той что прописана в конфигах движка. Идем в привелегии, нажимаем рядом с нашим пользователем значок редактировать, &#8220;добавить привелегии на базу&#8221; &#8211; вбиваем имя базы данных, даем привилегии. Доступ &#8211; только с localhost. Привилегии я дал все кроме Администрирования.</p>
<p>Теперь делаем дамп базы данных с хостинга (я делаю под рутом, но это, собственно необязательно).</p>
<blockquote><p>mysqldump -u root -p site_db &gt; /home/igor/26_site_db.dump</p></blockquote>
<p>Где site_db &#8211; база данных нашего сайта, /home/igor/ &#8211; директория куда делать дамп, 26_site_db.dump &#8211; имя дампа базы данных.</p>
<p>Копируем дамп на машину с поднятым mysql, копируем все файлы с сайта из корня.</p>
<p>Восстанавливаем дамп в нашу свежесозданную базу данных.</p>
<blockquote><p>mysql -u user -p -D site_db &lt; 26_site_db.dump</p></blockquote>
<p>Ну вот и все. Теперь можно работать дальше.</p>
<p>Учтем только что при переносе базы данных может побиться кодировка. Перекодировать дамп базы можно функцией iconv.</p>
<p>По умолчанию наш мускль ставится в UTF8.</p>
<p style="text-align: right"><em>Взято с <a href="http://tht-s.ya.ru/posts.xml?tag=1766974" target="_blank">tht-s.ya.ru</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/08/28/howto-installing-apache-mysql-php-mandriva-2009-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Понеслась!</title>
		<link>http://howtolinux.ru/2009/08/27/hello-world/</link>
		<comments>http://howtolinux.ru/2009/08/27/hello-world/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 23:17:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Backup]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[E-mail]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[HighLoad]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mandriva]]></category>
		<category><![CDATA[Ngnix]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[Procmail]]></category>
		<category><![CDATA[Sendmail]]></category>
		<category><![CDATA[SuSe]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Антиспам\Антивирус]]></category>
		<category><![CDATA[Мануалы]]></category>
		<category><![CDATA[Панели]]></category>

		<guid isPermaLink="false">http://howtolinux.ru/?p=1</guid>
		<description><![CDATA[Итак, приступим!]]></description>
			<content:encoded><![CDATA[<p>Итак, приступим!</p>
]]></content:encoded>
			<wfw:commentRss>http://howtolinux.ru/2009/08/27/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

