<?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>заметки на полях &#187; debian</title>
	<atom:link href="http://svdev.ru/tag/debian/feed/" rel="self" type="application/rss+xml" />
	<link>http://svdev.ru</link>
	<description>Блокнот разработчика</description>
	<lastBuildDate>Thu, 08 Dec 2011 11:40:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Ограничение канала для отдельных приложений</title>
		<link>http://svdev.ru/blog/debian-trickle/</link>
		<comments>http://svdev.ru/blog/debian-trickle/#comments</comments>
		<pubDate>Sun, 09 Jan 2011 22:09:29 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[traffic shaping]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=572</guid>
		<description><![CDATA[В один прекрасный момент может сложиться ситуация когда приложение непростительно отжирает весь канал, когда хотелось бы ограничить его небольшими ресурсами. У меня возникла такая проблема когда скрипт резервного копирования начинал перекладывать архивы с бэкапами на FTP. Т. к. FTP для бэкапов является локальным ресурсом и скорость подключения к нему большая, то и получалось что скрипт [...]]]></description>
			<content:encoded><![CDATA[<p>В один прекрасный момент может сложиться ситуация когда приложение непростительно отжирает весь канал, когда хотелось бы ограничить его небольшими ресурсами. У меня возникла такая проблема когда <a href="http://svdev.ru/blog/backup-advanced/">скрипт резервного копирования</a> начинал перекладывать архивы с бэкапами на FTP. Т. к. FTP для бэкапов является локальным ресурсом и скорость подключения к нему большая, то и получалось что скрипт отжирал весь канал, в результате чего в логах на время копирования вываливались ошибки от nginx</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">8557#</span><span style="color: #000000;">0</span>: <span style="color: #000000; font-weight: bold;">*</span><span style="color: #000000;">8936853</span> upstream timed out <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">110</span>: Connection timed out<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">while</span> reading response header from upstream</div></div>
<p>а HostTracker начинал слать уведомления об ошибке доступа к ресурсу.</p>
<p>Решением явилось использование утилиты <strong>trickle</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> trickle</div></div>
<p>Можно использовать как демон (<strong>trickled</strong>), а можно независимо для приложений. Самые нужные в данный момент ключи, это <code class="codecolorer bash default"><span class="bash">trickle <span style="color: #660033;">-d</span> <span style="color: #000000;">512</span> <span style="color: #660033;">-u</span> <span style="color: #000000;">512</span> ...</span></code> устанавливающие в данном случае скорость в 512 килобайт в секунду для входящего и исходящего трафика соответственно.</p>
<p>В результате вышеупомянутый <a href="http://svdev.ru/blog/backup-advanced/">скрипт резервного копирования</a> поменялся только в одной строчке с</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$FTPHOST</span> <span style="color: #000000; font-weight: bold;">&lt;&lt;</span>EOF</div></div>
<p>на</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">trickle <span style="color: #660033;">-d</span> <span style="color: #000000;">512</span> <span style="color: #660033;">-u</span> <span style="color: #000000;">512</span> <span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$FTPHOST</span> <span style="color: #000000; font-weight: bold;">&lt;&lt;</span>EOF</div></div>
<p>Вот собственно первое что нагуглил по теме когда искал решение: <a href="http://debback.blogspot.com/2008/05/blog-post.html">Ограничение сетевого трафика для приложений</a> и от этого уже пошел +</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">man</span> trickle</div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/debian-trickle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Перевод сайта c cp1251 на UTF-8</title>
		<link>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/</link>
		<comments>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 18:57:03 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=429</guid>
		<description><![CDATA[Для начала перевести БД из cp1251 в utf8. Сделать дамп mysqldump -u svd -n --skip-opt --skip-set-charset --triggers --disable-keys svdev &#62; dump.sql &#8211; получится чистый дамп без упаминания кодировок, можно получить отдельно данные: mysqldump -u svd -nt --skip-opt --skip-set-charset --disable-keys svdev &#62; data.sql, поменять кодировку полей в схеме, вместо: name VARCHAR&#40;64&#41; CHARACTER SET cp1251 NOT NULL [...]]]></description>
			<content:encoded><![CDATA[<p>Для начала перевести БД из cp1251 в utf8.<br />
Сделать дамп <code class="codecolorer sql default"><span class="sql">mysqldump <span style="color: #66cc66;">-</span>u svd <span style="color: #66cc66;">-</span>n <span style="color: #808080; font-style: italic;">--skip-opt --skip-set-charset --triggers --disable-keys svdev &gt; dump.sql</span></span></code> &#8211; получится чистый дамп без упаминания кодировок, можно получить отдельно данные: <code class="codecolorer sql default"><span class="sql">mysqldump <span style="color: #66cc66;">-</span>u svd <span style="color: #66cc66;">-</span>nt <span style="color: #808080; font-style: italic;">--skip-opt --skip-set-charset --disable-keys svdev &gt; data.sql</span></span></code>, поменять кодировку полей в схеме, вместо:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">name <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> cp1251 <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<p>сделать</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">name <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<p>или же убрать упоминание кодировки из полей вовсе:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">name <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></div></div>
<p>так как при установке правильной кодировки для БД кодировки для текстовых полей создаваемых таблиц будут устанавливаться верно сами, затем изменить кодировку самой БД:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> svdev <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">CHARACTER</span> <span style="color: #993333; font-weight: bold;">SET</span> utf8 <span style="color: #993333; font-weight: bold;">COLLATE</span> utf8_general_ci</div></div>
<p>и залить назад в обратном порядке &#8211; сначала структуру, затем данные.<br />
Следующим шагом необходимо изменить кодировку файлов, для этого я набросал простенький скрипт (подключаемые библиотеки которые трогать не надо &#8211; типа tiny просто вынес сначала из проекта, а затем вернул обратно:<span id="more-429"></span></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #000000; font-weight: bold;">for</span> FILE <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">egrep</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;\.(php|html)$&quot;</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">do</span><br />
iconv <span style="color: #660033;">-f</span> cp1251 <span style="color: #660033;">-t</span> utf8 <span style="color: #007800;">$FILE</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot;.utf&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot;.utf&quot;</span> <span style="color: #007800;">$FILE</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$FILE</span><span style="color: #ff0000;">&quot; - work complete&quot;</span><br />
<span style="color: #000000; font-weight: bold;">done</span></div></div>
<p>Он в заданной директории файлы по маске .php и .html перекодирует в UTF используя утилиту iconv во временный файл, а затем перезаписывает исходный файл временным.<br />
Следующим шагом убедимся в правильной настройке mb_ функций PHP. Для этого создадим файлик <code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">vim</span> strtest.php</span></code> и положим в него следующее содержимое:</p>
<div class="codecolorer-container php vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/strlen"><span style="color: #990000;">strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/mb_strlen"><span style="color: #990000;">mb_strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/mb_strlen"><span style="color: #990000;">mb_strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;мама мыла раму&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Правильная длина строки &#8211; 14 символов. Выполним его из консоли: <code class="codecolorer bash default"><span class="bash">php5-cgi strtest.php</span></code> В начале у меня получилось следующее:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.10-2ubuntu6.3<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html<br />
<br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">14</span></div></div>
<p>Для исправления &#8211; установим верные значения в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cgi<span style="color: #000000; font-weight: bold;">/</span>php.ini</span></code> и <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cli<span style="color: #000000; font-weight: bold;">/</span>php.ini</span></code>, для этого по файлу надо поискать <strong>encoding</strong> и <strong>charset</strong><br />
Нашлись следующие параметры:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">default_charset = <span style="color: #ff0000;">&quot;UTF-8&quot;</span><br />
...<br />
mbstring.language = Russian<br />
mbstring.internal_encoding = UTF-<span style="color: #000000;">8</span></div></div>
<p>Теперь при повторном выполнении теста <code class="codecolorer bash default"><span class="bash">php5-cgi strtest.php</span></code> второе значение без указания кодировки должно совпасть с первым и появиться кодировка по умолчанию:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">X-Powered-By: PHP<span style="color: #000000; font-weight: bold;">/</span>5.2.10-2ubuntu6.3<br />
Content-type: text<span style="color: #000000; font-weight: bold;">/</span>html; <span style="color: #007800;">charset</span>=UTF-<span style="color: #000000;">8</span><br />
<br />
<span style="color: #000000;">26</span><br />
<span style="color: #000000;">14</span><br />
<span style="color: #000000;">14</span></div></div>
<p>Так же не лишним будет в конфиге проекта указать верно локаль, к примеру <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/setlocale"><span style="color: #990000;">setlocale</span></a><span style="color: #009900;">&#40;</span>LC_ALL<span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;ru_RU.utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code> список доступных локалей в системе можно посмотреть <code class="codecolorer bash default"><span class="bash">locale <span style="color: #660033;">-a</span></span></code> (ну и на всякий случай проверить что с новой локалью не будет багов, подробнее здесь: <a href="http://svdev.ru/blog/float-setlocale-relation/">Как float зависит от локали?!</a> )<br />
Указать кодировку в настройках nginx для нужного сайта <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>svdev</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
...<br />
&nbsp; &nbsp; &nbsp; &nbsp; charset &nbsp; &nbsp; &nbsp; &nbsp; UTF-<span style="color: #000000;">8</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; source_charset &nbsp;UTF-<span style="color: #000000;">8</span>;<br />
...<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Ну и самая нудная часть &#8211; пройтись по проекту и заменить функции работы со строками на их <strong>mb_</strong> аналоги, в используемые регулярные выражения добавить модификатор <strong>u</strong> и если отправляются где-то письма &#8211; изменить кодировку писем.<br />
Ну вот вроде и все! Перед всеми манипуляциями неплохо бы сделать резервную копию файлов и БД, на всякий случай.</p>
<h3>Дополнительное чтиво</h3>
<ul>
<li><a href="http://sysoev.ru/nginx/docs/http/ngx_http_charset_module.html" target="_blank">Директивы модуля ngx_http_charset_module</a></li>
<li><a href="http://ru2.php.net/manual/en/function.setlocale.php" target="_blank">PHP &#8211; Set locale information</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/site-convert-from-cp1251-to-utf8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP библиотека GD в debian сборке или выкидываем GD на помойку</title>
		<link>http://svdev.ru/blog/php-gd-debian-trouble/</link>
		<comments>http://svdev.ru/blog/php-gd-debian-trouble/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 00:34:00 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ImageMagick]]></category>
		<category><![CDATA[Imagick]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=399</guid>
		<description><![CDATA[В ходе работы выяснилась неприятная вещь &#8211; в библиотеке GD под debian отсутствуют некоторые функции, я столкнулся именно с imagerotate. Некоторые предлагают пересобрать PHP c использованием библиотеки разработчиков, вместо системной, но нашлось более элегантное решение &#8211; ImageMagick и PHP обертка для нее Imagick. Собственно давно уже пора переходить на её использование: быстрее возможность выбора различных [...]]]></description>
			<content:encoded><![CDATA[<p>В ходе работы выяснилась неприятная вещь &#8211; в библиотеке GD под debian отсутствуют некоторые функции, я столкнулся именно с <code class="codecolorer php default"><span class="php"><a href="http://www.php.net/imagerotate"><span style="color: #990000;">imagerotate</span></a></span></code>. Некоторые предлагают пересобрать PHP c использованием библиотеки разработчиков, вместо системной, но нашлось более элегантное решение &#8211; <a href="http://www.imagemagick.org/" target="_blank">ImageMagick</a> и PHP обертка для нее <strong><a href="http://pecl.php.net/package/imagick" target="_blank">Imagick</a></strong>.<br />
Собственно давно уже пора переходить на её использование:</p>
<ul>
<li>быстрее</li>
<li>возможность выбора различных фильтров при ресайзе</li>
<li>ОО интерфейс</li>
<li>нет необходимости заморачиваться с типами файлов &#8211; все уже сделано за нас</li>
<li>эксепшены вместо ошибок</li>
</ul>
<p>Ну и наверняка есть еще достоинства, которые просто не пришли вот так сразу в голову.<br />
<span id="more-399"></span><br />
Поставим её.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> imagemagick<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> php-pear<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> pecl <span style="color: #c20cb9; font-weight: bold;">install</span> imagick</div></div>
<p>Если второй шаг завершится ошибкой, вроде этой: <code class="codecolorer bash default"><span class="bash">ERROR: <span style="color: #000000; font-weight: bold;">`</span>phpize<span style="color: #ff0000;">' failed</span></span></code> то необходимо установить:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> php5-dev</div></div>
<p>и повторить установку <strong>Imagick</strong>, при возникновении ошибки <code class="codecolorer bash default"><span class="bash">ERROR: <span style="color: #000000; font-weight: bold;">`/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>pear<span style="color: #000000; font-weight: bold;">/</span>temp<span style="color: #000000; font-weight: bold;">/</span>imagick<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--with-imagick</span><span style="color: #ff0000;">' failed</span></span></code> необходимо дополнительно установить:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># для debian:</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> libmagick9-dev<br />
<span style="color: #666666; font-style: italic;"># для убунты:</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> libmagickwand-dev</div></div>
<p>Теперь <strong>Imagick</strong> должен точно встать, если нет &#8211; то дальше в Google.<br />
Осталось только прописать новую либу в php.ini:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">extension</span>=imagick.so</div></div>
<p><a href="http://www.php.net/manual/en/book.imagick.php" target="_blank">http://www.php.net/manual/en/book.imagick.php</a> &#8211; дока по <strong>Imagick</strong><br />
<a href="http://valokuva.org/?cat=1" target="_blank">http://valokuva.org/?cat=1</a> &#8211; блог с полезными и познавательными примерами использования <strong>Imagick</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/php-gd-debian-trouble/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Backup проекта, часть 2</title>
		<link>http://svdev.ru/blog/backup-advanced/</link>
		<comments>http://svdev.ru/blog/backup-advanced/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 17:54:40 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=391</guid>
		<description><![CDATA[Немного ранее, был представлен SHELL скрипт резервного сохранения данных проекта. При наличии нескольких проектов хочется каким-то образом систематизировать этот процесс, для облегчения подключения новых проектов к резервному копированию, кроме как плодить файлы с дублированием кода, учитывая тот факт, что со временем может измениться логика выполняемых действий или настройки подключения к БД/FTP серверу. Вынесем общую логику [...]]]></description>
			<content:encoded><![CDATA[<p>Немного ранее, был представлен <a href="/blog/backup-simple/">SHELL скрипт резервного сохранения данных проекта</a>. При наличии нескольких проектов хочется каким-то образом систематизировать этот процесс, для облегчения подключения новых проектов к резервному копированию, кроме как плодить файлы с дублированием кода, учитывая тот факт, что со временем может измениться логика выполняемых действий или настройки подключения к БД/FTP серверу.</p>
<p>Вынесем общую логику в отдельный скрипт, а индивидуальные данные проекта, такие как имя БД и загружаемые файлы в конфигурационный файл для каждого проекта.<br />
<span id="more-391"></span><br />
Для получения дампа БД, если проекты на сервере используют один сервер, но различные базы удобно создать отдельного пользователя для нашего скрипта и дать ему права на чтение и блокировку таблиц необходимых БД:</p>
<div class="codecolorer-container sql vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">USER</span> backup@localhost <span style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span style="color: #993333; font-weight: bold;">BY</span> &nbsp;<span style="color: #ff0000;">'dbpassword'</span>;<br />
<span style="color: #993333; font-weight: bold;">GRANT</span> <span style="color: #993333; font-weight: bold;">SELECT</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">LOCK</span> <span style="color: #993333; font-weight: bold;">TABLES</span> <span style="color: #993333; font-weight: bold;">ON</span> &nbsp;svdev<span style="color: #66cc66;">.*</span> <span style="color: #993333; font-weight: bold;">TO</span> &nbsp;backup@localhost;</div></div>
<p>Далее немного модифицируем <a href="/blog/backup-simple/">скрипт из предыдущей</a> части для подключения настроек. Так же проект может не использовать БД или использовать совместно с другим проектом, в этом случае достаточно сохранить её один раз &#8211; такая возможность так же реализована. Вот что получилось в итоге:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #666666; font-style: italic;">#Данные для подключения к БД</span><br />
<br />
<span style="color: #007800;">DBUSER</span>=<span style="color: #ff0000;">&quot;backup&quot;</span><br />
<span style="color: #007800;">DBPASS</span>=<span style="color: #ff0000;">&quot;dbpassword&quot;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># FTP для сохранения данных</span><br />
<span style="color: #007800;">FTPUSER</span>=<span style="color: #ff0000;">'ftpuser'</span><br />
<span style="color: #007800;">FTPHOST</span>=<span style="color: #ff0000;">'ftphost'</span><br />
<span style="color: #007800;">FTPPASS</span>=<span style="color: #ff0000;">'ftppassword'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Путь на FTP где хранятся бэкапы, общая директория,</span><br />
<span style="color: #666666; font-style: italic;"># в которой для каждого проекта есть поддиректория,</span><br />
<span style="color: #666666; font-style: italic;"># путь от домашней директории пользователя FTP</span><br />
<span style="color: #007800;">FTPPATH</span>=<span style="color: #ff0000;">&quot;./&quot;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Дата, для именования файла бэкапа в формате YYYY.MM.DD</span><br />
<span style="color: #007800;">DT</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%Y.%m.%d'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #666666; font-style: italic;"># Временная директория для хранения файлов</span><br />
<span style="color: #007800;">TEMPDIR</span>=<span style="color: #ff0000;">&quot;/tmp/backup-&quot;</span><span style="color: #007800;">$DT</span><span style="color: #ff0000;">&quot;/&quot;</span><br />
<span style="color: #007800;">SQLFILE</span>=<span style="color: #ff0000;">&quot;dump.sql&quot;</span><br />
<span style="color: #666666; font-style: italic;"># Файл архива</span><br />
<span style="color: #007800;">DESTFILE</span>=<span style="color: #007800;">$DT</span><span style="color: #ff0000;">&quot;.tar&quot;</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #007800;">$TEMPDIR</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$TEMPDIR</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Начало резервного копирования: &quot;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%F %T'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Если все проекты находятся в директории /var/www то для каждого, который</span><br />
<span style="color: #666666; font-style: italic;"># необходимо сохранить должен быть файл backup.conf</span><br />
<span style="color: #000000; font-weight: bold;">for</span> CONFIG <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www <span style="color: #660033;">-mindepth</span> <span style="color: #000000;">2</span> <span style="color: #660033;">-maxdepth</span> <span style="color: #000000;">2</span> <span style="color: #660033;">-name</span> backup.conf<span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; . <span style="color: #007800;">$CONFIG</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Если в конфиге установлено имя БД, до делаем её дамп</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># и добавляем в архив</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-z</span> <span style="color: #007800;">$DBNAME</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; mysqldump <span style="color: #660033;">--user</span>=<span style="color: #007800;">$DBUSER</span> <span style="color: #660033;">--password</span>=<span style="color: #007800;">$DBPASS</span> <span style="color: #007800;">$DBNAME</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$SQLFILE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">TARFILES</span>=<span style="color: #007800;">$TARFILES</span><span style="color: #ff0000;">&quot; -C &quot;</span><span style="color: #007800;">$TEMPDIR</span><span style="color: #ff0000;">&quot; &quot;</span><span style="color: #007800;">$SQLFILE</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cf</span> <span style="color: #007800;">$DESTFILE</span> <span style="color: #007800;">$TARFILES</span><br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #660033;">-9</span> <span style="color: #007800;">$DESTFILE</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Отправляем полученный архив на FTP; не забываем</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># включить бинарный режим передачи, иначе архивы побъются </span><br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$FTPHOST</span> <span style="color: #000000; font-weight: bold;">&lt;&lt;</span>EOF<br />
&nbsp; &nbsp; quote USER <span style="color: #007800;">$FTPUSER</span><br />
&nbsp; &nbsp; quote PASS <span style="color: #007800;">$FTPPASS</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; binary <br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$FTPPATH</span><span style="color: #007800;">$PROJECTNAME</span><br />
&nbsp; &nbsp; put <span style="color: #007800;">$DESTFILE</span><span style="color: #ff0000;">&quot;.gz&quot;</span><br />
&nbsp; &nbsp; quit<br />
&nbsp; &nbsp; EOF<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot; - &quot;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%F %T'</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #ff0000;">&quot; проект &quot;</span><span style="color: #007800;">$PROJECTNAME</span><span style="color: #ff0000;">&quot; сохранен, размер архива &quot;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">stat</span> <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">%</span>s <span style="color: #007800;">$DESTFILE</span><span style="color: #ff0000;">'.gz'</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #ff0000;">&quot; байт;&quot;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Удаляем за собой все файлы</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> TFILE <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$TEMPDIR</span><span style="color: #ff0000;">&quot;/*&quot;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #007800;">$TFILE</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">done</span><br />
<span style="color: #000000; font-weight: bold;">done</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Удаляем за собой временную директорию</span><br />
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #007800;">$TEMPDIR</span></div></div>
<p>Полученный файл назовем <code class="codecolorer bash default"><span class="bash">sites-backup</span></code> и положим его в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily<span style="color: #000000; font-weight: bold;">/</span></span></code> таким образом он будет запускаться один раз в сутки, вместе с остальными служебными скриптами, такими как ротация логов и другие. Для пущей надежности права на файл лучше дать 700 и сделать владельцем рута:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> root:root <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily<span style="color: #000000; font-weight: bold;">/</span>sites-backup<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> 0700 <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily<span style="color: #000000; font-weight: bold;">/</span>sites-backup</div></div>
<p>Осталось только для каждого проекта создать файл конфига. К примеру для проекта svdev, получаем следующий конфиг <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev.ru<span style="color: #000000; font-weight: bold;">/</span>backup.conf</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #007800;">DBNAME</span>=<span style="color: #ff0000;">&quot;svdev&quot;</span><br />
<span style="color: #007800;">PROJECTNAME</span>=<span style="color: #ff0000;">&quot;svdev.ru&quot;</span><br />
<span style="color: #007800;">TARFILES</span>=<span style="color: #ff0000;">&quot; -C /var/www/svdev.ru/htdocs wp-config.php -C /var/www/svdev.ru/htdocs/wp-content uploads&quot;</span></div></div>
<p>Если БД не используется, то необходимо указать пустую строку в качестве имени БД:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #007800;">DBNAME</span>=<span style="color: #ff0000;">&quot;&quot;</span><br />
<span style="color: #007800;">PROJECTNAME</span>=<span style="color: #ff0000;">&quot;svdev.ru&quot;</span><br />
<span style="color: #007800;">TARFILES</span>=<span style="color: #ff0000;">&quot; -C /var/www/svdev.ru/htdocs wp-config.php -C /var/www/svdev.ru/htdocs/wp-content uploads&quot;</span></div></div>
<p>Теперь <strong>для создания бэкапов</strong> нового проекта <strong>необходимо дать права пользователю скрипта на БД</strong>, <strong>создать на удаленном FTP директорию</strong> куда будут складываться архивы <strong>и добавить конфиг из 3х строчек</strong>.</p>
<p>Главное не забывать вовремя чистить FTP.</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/backup-advanced/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ротация логов nginx</title>
		<link>http://svdev.ru/blog/nginx-logrotate/</link>
		<comments>http://svdev.ru/blog/nginx-logrotate/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 14:45:07 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[logrotate]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=385</guid>
		<description><![CDATA[Простенький скрипт, который проверяет доступность пакета logrotate и запускает ротацию. Кладется в /etc/cron.daily и запускается как правило в 4 часа утра, за это отвечает запись в /etc/crontab (у меня в 6 часов 25 минут): 25 6 &#160; &#160;* * * &#160; root &#160; &#160;test -x /usr/sbin/anacron &#124;&#124; &#40; cd / &#38;&#38; run-parts --report /etc/cron.daily &#41; [...]]]></description>
			<content:encoded><![CDATA[<p>Простенький скрипт, который проверяет доступность пакета <code class="codecolorer bash default"><span class="bash">logrotate</span></code> и запускает ротацию. Кладется в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily</span></code> и запускается как правило в 4 часа утра, за это отвечает запись в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>crontab</span></code> (у меня в 6 часов 25 минут):</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">25</span> <span style="color: #000000;">6</span> &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">*</span> &nbsp; root &nbsp; &nbsp;<span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #660033;">-x</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>anacron <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">run-parts</span> <span style="color: #660033;">--report</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>cron.daily <span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>Сам скрипт, запускающий суточные задания:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #660033;">-x</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>logrotate <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span><br />
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>logrotate <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>logrotate.conf</div></div>
<p>Среди которых ротация логов nginx:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/*</span>.log <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/*/</span>logs<span style="color: #000000; font-weight: bold;">/</span>error.log <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; daily<br />
&nbsp; &nbsp; &nbsp; &nbsp; missingok<br />
&nbsp; &nbsp; &nbsp; &nbsp; rotate <span style="color: #000000;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; compress<br />
&nbsp; &nbsp; &nbsp; &nbsp; delaycompress<br />
&nbsp; &nbsp; &nbsp; &nbsp; notifempty<br />
&nbsp; &nbsp; &nbsp; &nbsp; create <span style="color: #000000;">640</span> root adm<br />
&nbsp; &nbsp; &nbsp; &nbsp; sharedscripts<br />
&nbsp; &nbsp; &nbsp; &nbsp; postrotate<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">kill</span> <span style="color: #660033;">-USR1</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx.pid<span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>error.log.1 <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #660033;">-s</span> <span style="color: #ff0000;">&quot;Nginx error log&quot;</span> root<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/*/</span>logs<span style="color: #000000; font-weight: bold;">/</span>error.log.1 <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #660033;">-s</span> <span style="color: #ff0000;">&quot;Sitests nginx error log&quot;</span> root<br />
&nbsp; &nbsp; &nbsp; &nbsp; endscript<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Что здесь происходит? Ротируются логи nginx из <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx</span></code> а за позапрошлый день сжимаются и так же с логами для всех проектов, если учесть что проекты находятся в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www</span></code> а логи соответственно в директории <code class="codecolorer text default"><span class="text">logs</span></code> проекта. А логи за предыдущий день отправляются на почту рута двумя письмами &#8211; одно со всех проектов, а второе самого nginx.</p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/nginx-logrotate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup проекта</title>
		<link>http://svdev.ru/blog/backup-simple/</link>
		<comments>http://svdev.ru/blog/backup-simple/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 20:20:07 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=351</guid>
		<description><![CDATA[Люди делятся на тех кто еще не делает и тех, кто уже делает бэкапы Обязательным свойством любого проекта являются резервное сохранение данных. И так, приступим. Допустим все данные у нас хранятся в БД (в моем случае mysql, но если это postgres &#8211; отличие будет в одной строчке) и существуют различные файлы загружаемые пользователями. Файлы проекта [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;"><em>Люди делятся на тех кто <strong>еще</strong> не делает<br />
и тех, кто <strong>уже</strong> делает бэкапы</em></p>
<p style="text-align: left;">Обязательным свойством любого проекта являются резервное сохранение данных. И так, приступим. Допустим все данные у нас хранятся в БД (в моем случае mysql, но если это postgres &#8211; отличие будет в одной строчке) и существуют различные файлы загружаемые пользователями. Файлы проекта хранятся в репозитории, поэтому за их сохранность можно не беспокоиться (можно на всякий случай еще сохранять конфиг). Так же понадобится другая машина для сохранения бэкапов, более чем достаточно иметь FTP на другой машине.</p>
<p style="text-align: left;"><strong>UPD:</strong> Немного подчищен код и приведен к соответствию соглашениям.</p>
<p><span id="more-351"></span></p>
<p style="text-align: left;">Начнем с сохранения БД:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Данные для подключения к БД</span><br />
<span style="color: #007800;">DBUSER</span>=<span style="color: #ff0000;">&quot;dbuser&quot;</span><br />
<span style="color: #007800;">DBNAME</span>=<span style="color: #ff0000;">&quot;dbname&quot;</span><br />
<span style="color: #007800;">DBPASS</span>=<span style="color: #ff0000;">&quot;password&quot;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Дата, для именования файла бэкапа в формате YYYY.MM.DD</span><br />
<span style="color: #007800;">DT</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%Y.%m.%d'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #666666; font-style: italic;"># Временная директория для хранения файлов</span><br />
<span style="color: #007800;">TEMPDIR</span>=<span style="color: #ff0000;">&quot;/tmp/backup-&quot;</span><span style="color: #007800;">$DT</span><span style="color: #ff0000;">&quot;/&quot;</span><br />
<span style="color: #007800;">SQLFILE</span>=<span style="color: #ff0000;">&quot;backup.sql&quot;</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #007800;">$TEMPDIR</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$TEMPDIR</span><br />
<br />
mysqldump <span style="color: #660033;">--user</span>=<span style="color: #007800;">$DBUSER</span> <span style="color: #660033;">--password</span>=<span style="color: #007800;">$DBPASS</span> <span style="color: #007800;">$DBNAME</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$SQLFILE</span></div></td></tr></tbody></table></div>
<p>Итак у нас теперь есть дамп БД и мы знаем какие пользовательские файлы необходимо сохранять. Собираем их в один архив, сжимаем его и кладем через FTP на другую машину. В итоге получается следующий скрипт:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Данные для подключения к БД</span><br />
<span style="color: #007800;">DBUSER</span>=<span style="color: #ff0000;">&quot;dbuser&quot;</span><br />
<span style="color: #007800;">DBNAME</span>=<span style="color: #ff0000;">&quot;dbname&quot;</span><br />
<span style="color: #007800;">DBPASS</span>=<span style="color: #ff0000;">&quot;password&quot;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Данные для подключения по FTP</span><br />
<span style="color: #007800;">FTPUSER</span>=<span style="color: #ff0000;">'ftpuser'</span><br />
<span style="color: #007800;">FTPHOST</span>=<span style="color: #ff0000;">'ftp.svdev.ru'</span><br />
<span style="color: #007800;">FTPPASS</span>=<span style="color: #ff0000;">'password'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Дата, для именования файла бэкапа в формате YYYY.MM.DD</span><br />
<span style="color: #007800;">DT</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #ff0000;">'+%Y.%m.%d'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #666666; font-style: italic;"># Временная директория для хранения файлов</span><br />
<span style="color: #007800;">TEMPDIR</span>=<span style="color: #ff0000;">&quot;/tmp/backup-&quot;</span><span style="color: #007800;">$DT</span><span style="color: #ff0000;">&quot;/&quot;</span><br />
<span style="color: #007800;">SQLFILE</span>=<span style="color: #ff0000;">&quot;backup.sql&quot;</span><br />
<span style="color: #666666; font-style: italic;"># Путь на FTP куда положим файл</span><br />
<span style="color: #666666; font-style: italic;"># !!! Путь от корня домашней директории FTP</span><br />
<span style="color: #007800;">REMOTEDIR</span>=<span style="color: #ff0000;">&quot;backups/svdev&quot;</span><br />
<span style="color: #666666; font-style: italic;"># Файл архива</span><br />
<span style="color: #007800;">DESTFILE</span>=<span style="color: #007800;">$DT</span><span style="color: #ff0000;">&quot;.tar&quot;</span><br />
<br />
<span style="color: #007800;">TARFILES</span>=<span style="color: #ff0000;">&quot; -C /var/www/svdev/htdocs wp-config.php -C /var/www/svdev/htdocs/wp-content uploads -C &quot;</span><span style="color: #007800;">$TEMPDIR</span><span style="color: #ff0000;">&quot; backup.sql&quot;</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #007800;">$TEMPDIR</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$TEMPDIR</span><br />
mysqldump <span style="color: #660033;">--user</span>=<span style="color: #007800;">$DBUSER</span> <span style="color: #660033;">--password</span>=<span style="color: #007800;">$DBPASS</span> <span style="color: #007800;">$DBNAME</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$SQLFILE</span><br />
<span style="color: #c20cb9; font-weight: bold;">tar</span> cf <span style="color: #007800;">$DESTFILE</span> <span style="color: #007800;">$TARFILES</span><br />
<span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #660033;">-9</span> <span style="color: #007800;">$DESTFILE</span><br />
<span style="color: #c20cb9; font-weight: bold;">ftp</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$FTPHOST</span> <span style="color: #cc0000; font-style: italic;">&lt;&lt;EOF<br />
quote USER $FTPUSER<br />
quote PASS $FTPPASS<br />
binary<br />
cd $REMOTEDIR<br />
put $DESTFILE&quot;.gz&quot;<br />
quit<br />
EOF</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Удаляем за собой все временные файлы</span><br />
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> <span style="color: #007800;">$TEMPDIR</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></div></td></tr></tbody></table></div>
<p>Вот в принципе и все, осталось прописать его в крон и можно наслаждаться результатом.</p>
<p>Данный пример является самым простым, что хотелось бы добавить:</p>
<ul>
<li>вынесение алгоритма в общий шаблон, а для проекта оставить только определение констант. Таким образом при наличии нескольких проектов &#8211; подключение/отключение бэкапов будет задаваться одним симлинком</li>
<li>скрипта для удаления старых бэкапов (в данной схеме это необходимо делать вручную)</li>
</ul>
<p>Можно скачать приведенный пример: <a href="/wp-content/uploads/2009/11/backup.tar.gz">backup.tar.gz</a> и поэксперементировать с ним в свое удовольствие.</p>
<p><span style="text-decoration: underline;">Использованный полезный материал:</span></p>
<ul>
<li><a href="http://www.opennet.ru/docs/RUS/bash_scripting_guide/index.html" target="_blank">Advanced Bash-Scripting Guide</a></li>
<li><a href="http://www.opennet.ru/base/dev/shell_coding.txt.html" target="_blank">Shell-кодинг</a> (азы так сказать)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/backup-simple/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Вывод ошибок PHP в логи nginx</title>
		<link>http://svdev.ru/blog/php-error-log-to-nginx-log/</link>
		<comments>http://svdev.ru/blog/php-error-log-to-nginx-log/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 19:06:34 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PHP-FastCGI]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=268</guid>
		<description><![CDATA[После того как не осталось Apache, то и негде посмотреть ошибки PHP привычным способом (в логах Апача); сделаем что бы nginx вел лог ошибок PHP. nginx перехватывает то, что ему пришло от php-fastcgi на stderr и пишет это в лог, предваряя примерно следующим: 2009/08/10 22:54:38 &#91;error&#93; 11004#0: *7 FastCGI sent in stderr: Теперь же осталось [...]]]></description>
			<content:encoded><![CDATA[<p>После того как не осталось Apache, то и негде посмотреть ошибки PHP привычным способом (в логах Апача); сделаем что бы nginx вел лог ошибок PHP. nginx перехватывает то, что ему пришло от php-fastcgi на <code class="codecolorer bash default"><span class="bash">stderr</span></code> и пишет это в лог<span id="more-268"></span>, предваряя примерно следующим:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">2009</span><span style="color: #000000; font-weight: bold;">/</span>08<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">10</span> <span style="color: #000000;">22</span>:<span style="color: #000000;">54</span>:<span style="color: #000000;">38</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>error<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000;">11004</span><span style="color: #666666; font-style: italic;">#0: *7 FastCGI sent in stderr:</span></div></div>
<p>Теперь же осталось только отдавать эти самые ошибки и предупреждения из PHP на <code class="codecolorer bash default"><span class="bash">stderr</span></code>, для этого надо немного подправить конфиг <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cgi<span style="color: #000000; font-weight: bold;">/</span>php.ini</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">; лишним здесь ничего не будет :<span style="color: #7a0874; font-weight: bold;">&#41;</span> пусть пишет все<span style="color: #000000; font-weight: bold;">!</span><br />
error_reporting &nbsp;= &nbsp;E_ALL<br />
<br />
; первый параметр отвечает как раз за отдаду ошибок на фронтэед<br />
display_errors = <span style="color: #ff0000;">&quot;stderr&quot;</span><br />
;<br />
; stdout <span style="color: #7a0874; font-weight: bold;">&#40;</span>On<span style="color: #7a0874; font-weight: bold;">&#41;</span> - Display errors to STDOUT<br />
; здесь же ошибки будут выводиться на экран, для сервера разработки -<br />
; это оптимальный вариант, а вот на боевом их все таки лучше отключить<br />
display_errors = On<br />
; Ну и последняя опция, что бы PHP все таки <br />
; писал ошибки в лог <span style="color: #7a0874; font-weight: bold;">&#40;</span>в нашем случае отдавал на stderr<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
log_errors = On</div></div>
<p>Готово! Осталось только перезапустить php-cgi:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>init-fastcgi restart</div></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/php-error-log-to-nginx-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php + memcached</title>
		<link>http://svdev.ru/blog/php-memcached/</link>
		<comments>http://svdev.ru/blog/php-memcached/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 18:36:48 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=142</guid>
		<description><![CDATA[Установим все что может понадобиться для использования связки php + memcached. 1sudo apt-get install memcached php5-memcache Единственный файл конфига /etc/memcached.conf: 123456789101112131415161718192021# запустить как &#34;демон&#34; -d # лог файл logfile /var/log/memcached.log # я так понимаю расширенный формат лога :) # -v # ограничение памяти в мегабайтах -m 512 # слушать порт -p 11211 # от имени [...]]]></description>
			<content:encoded><![CDATA[<p>Установим все что может понадобиться для использования связки <strong>php + memcached</strong>.<br />
<span id="more-142"></span></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> memcached php5-memcache</div></td></tr></tbody></table></div>
<p>Единственный файл конфига <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>memcached.conf</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># запустить как &quot;демон&quot;</span><br />
<span style="color: #660033;">-d</span><br />
<br />
<span style="color: #666666; font-style: italic;"># лог файл</span><br />
logfile <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>memcached.log<br />
<br />
<span style="color: #666666; font-style: italic;"># я так понимаю расширенный формат лога :)</span><br />
<span style="color: #666666; font-style: italic;"># -v</span><br />
<br />
<span style="color: #666666; font-style: italic;"># ограничение памяти в мегабайтах</span><br />
<span style="color: #660033;">-m</span> <span style="color: #000000;">512</span><br />
<br />
<span style="color: #666666; font-style: italic;"># слушать порт</span><br />
<span style="color: #660033;">-p</span> <span style="color: #000000;">11211</span><br />
<br />
<span style="color: #666666; font-style: italic;"># от имени какого пользователя запускать, </span><br />
<span style="color: #666666; font-style: italic;"># если параметр не указан, то будет запущен от root</span><br />
<span style="color: #660033;">-u</span> nobody<br />
<br />
<span style="color: #666666; font-style: italic;"># какой интерфейс слушать </span><br />
<span style="color: #660033;">-l</span> 127.0.0.1</div></td></tr></tbody></table></div>
<p>И ротация единственного файла логов <code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>logrotate.d<span style="color: #000000; font-weight: bold;">/</span>memcached</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>memcached.log <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; daily<br />
&nbsp; &nbsp; missingok<br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">size</span> 2M<br />
&nbsp; &nbsp; rotate <span style="color: #000000;">2</span><br />
&nbsp; &nbsp; compress<br />
&nbsp; &nbsp; delaycompress<br />
&nbsp; &nbsp; notifempty<br />
&nbsp; &nbsp; create <span style="color: #000000;">640</span> root adm<br />
&nbsp; &nbsp; sharedscripts<br />
&nbsp; &nbsp; postrotate<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>memcached restart <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null<br />
&nbsp; &nbsp; endscript<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>Команда скорее всего не понадобится, т. к. в автозагрузку пакет добавится при установке, но на всякий случай:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> update-rc.d memcached defaults</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/php-memcached/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx + PHP-FastCGI или избавляемся от apache</title>
		<link>http://svdev.ru/blog/nginx-php-fastcgi-remove-apache/</link>
		<comments>http://svdev.ru/blog/nginx-php-fastcgi-remove-apache/#comments</comments>
		<pubDate>Sat, 01 Aug 2009 13:41:16 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[PHP-FastCGI]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=110</guid>
		<description><![CDATA[В предыдущем шаге мы уже убрали apache слушать только локальные запросы (те которые приходят от nginx) теперь же пришло время убрать его совсем и заставить nginx обрабатывать все самому! Для этого понадобится php5-cgi, если он еще не установлен, необходимо поставить: 1sudo apt-get install php5-cgi Для запуска php потребуется утилита spawn-fcgi от lighttpd. Сейчас она идёт [...]]]></description>
			<content:encoded><![CDATA[<p>В <a href="http://svdev.ru/?p=76">предыдущем шаге</a> мы уже убрали apache слушать только локальные запросы (те которые приходят от nginx) теперь же пришло время убрать его совсем и заставить nginx обрабатывать все самому!<br />
<span id="more-110"></span><br />
Для этого понадобится <code class="codecolorer bash default"><span class="bash">php5-cgi</span></code>, если он еще не установлен, необходимо поставить:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> php5-cgi</div></td></tr></tbody></table></div>
<p>Для запуска php потребуется утилита <code class="codecolorer bash default"><span class="bash">spawn-fcgi</span></code> от <code class="codecolorer bash default"><span class="bash">lighttpd</span></code>. Сейчас она идёт как отдельный проект и расположена по адресу <a href="http://redmine.lighttpd.net/projects/spawn-fcgi">http://redmine.lighttpd.net/projects/spawn-fcgi</a>. Можно получить последнюю версию оттуда, а можно воспользоваться советом <a href="http://moreintelligentweb.net/post/555">отсюда</a> и взять её из <code class="codecolorer bash default"><span class="bash">lighttpd</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>sources<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>sources<br />
<span style="color: #666666; font-style: italic;"># возможно будет уже и более свежая версия</span><br />
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.lighttpd.net<span style="color: #000000; font-weight: bold;">/</span>download<span style="color: #000000; font-weight: bold;">/</span>lighttpd-1.4.19.tar.bz2<br />
<span style="color: #c20cb9; font-weight: bold;">tar</span> jxvf lighttpd-1.4.19.tar.bz2<br />
<span style="color: #666666; font-style: italic;"># необходимые пакеты для установочного скрипта</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> libpcre3-dev libbz2-dev<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> lighttpd-1.4.19<br />
<span style="color: #666666; font-style: italic;"># здесь может возникнуть ошибка, но и тут же предлагается решение - </span><br />
<span style="color: #666666; font-style: italic;"># конфигурировать с параметром --without-zlib</span><br />
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--without-zlib</span><br />
<span style="color: #c20cb9; font-weight: bold;">make</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> src<span style="color: #000000; font-weight: bold;">/</span>spawn-fcgi <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>spawn-fcgi<br />
<span style="color: #666666; font-style: italic;"># И удалим за собой ненужныеболее файлы </span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-Rf</span> sources<span style="color: #000000; font-weight: bold;">/</span></div></td></tr></tbody></table></div>
<p>Таким образом, или взяв отдельный пакет, но <code class="codecolorer bash default"><span class="bash">spawn-fcgi</span></code> у нас получился установлен. Теперь необходимо все это дело запускать. Сделаем скрипт, который будет устанавливать дополнительные управляющие переменные и запускать <code class="codecolorer bash default"><span class="bash">php5-cgi</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php-fastcgi</div></td></tr></tbody></table></div>
<p>и вставляем:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #666666; font-style: italic;"># сколько процессов запускать</span><br />
<span style="color: #007800;">PHP_FCGI_CHILDREN</span>=<span style="color: #000000;">3</span><br />
<span style="color: #666666; font-style: italic;"># через сколько обработанных запросов перезапускать экземпляр</span><br />
<span style="color: #007800;">PHP_FCGI_MAX_REQUESTS</span>=<span style="color: #000000;">1000</span><br />
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php5-cgi</div></td></tr></tbody></table></div>
<p>Скрипт для запуска <code class="codecolorer bash default"><span class="bash">php5-cgi</span></code> готов, теперь нам нужен скрипт, для запуска <code class="codecolorer bash default"><span class="bash">spawn-fcgi</span></code>, который будет дергать уже наш скрипт для установки переменных и запуска <code class="codecolorer bash default"><span class="bash">php5-cgi</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>init-fastcgi</div></td></tr></tbody></table></div>
<p>и вставляем сюда:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<span style="color: #007800;">PHP_SCRIPT</span>=<span style="color: #ff0000;">&quot;/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php-fastcgi&quot;</span><br />
<span style="color: #007800;">RETVAL</span>=<span style="color: #000000;">0</span><br />
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #000000; font-weight: bold;">in</span><br />
start<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #007800;">$PHP_SCRIPT</span><br />
<span style="color: #007800;">RETVAL</span>=<span style="color: #007800;">$?</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
stop<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #c20cb9; font-weight: bold;">killall</span> <span style="color: #660033;">-9</span> php5-cgi<br />
<span style="color: #007800;">RETVAL</span>=<span style="color: #007800;">$?</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
restart<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #c20cb9; font-weight: bold;">killall</span> <span style="color: #660033;">-9</span> php5-cgi<br />
<span style="color: #007800;">$PHP_SCRIPT</span><br />
<span style="color: #007800;">RETVAL</span>=<span style="color: #007800;">$?</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: sudo /etc/init.d/init-fastcgi {start|stop|restart}&quot;</span><br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">esac</span><br />
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #007800;">$RETVAL</span></div></td></tr></tbody></table></div>
<p>Осталось только сделать оба новых скрипта доступных для запуска:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">755</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php-fastcgi<br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">755</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>init-fastcgi</div></td></tr></tbody></table></div>
<p>Теперь можно попробовать запустить наш <code class="codecolorer bash default"><span class="bash">FastCGI</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>init-fastcgi start<br />
<span style="color: #666666; font-style: italic;"># В ответ должно получится примерно следующее:</span><br />
spawn-fcgi.c.197: child spawned successfully: PID: <span style="color: #000000;">16428</span></div></td></tr></tbody></table></div>
<p>Осталось только добавит наш скрипт в автозагрузку:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> update-rc.d init-fastcgi defaults</div></td></tr></tbody></table></div>
<p>Теперь надо подправить все конфиги, что бы nginx обрабатывал PHP сам, а не передавал их на apache. У меня в конфиге</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>svdev.ru</div></td></tr></tbody></table></div>
<p>получилось примерно следующее:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen <span style="color: #000000;">80</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name www.svdev.ru;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># здесь при заходе на www.svdev.ru происходит редирект на svdev.ru</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; rewrite ^<span style="color: #7a0874; font-weight: bold;">&#40;</span>.<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> http:<span style="color: #000000; font-weight: bold;">//</span>svdev.ru<span style="color: #007800;">$1</span> permanent;<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
server <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; <span style="color: #000000;">80</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name svdev.ru;<br />
&nbsp; &nbsp; &nbsp; &nbsp; error_log <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev.ru<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>error.log warn;<br />
&nbsp; &nbsp; &nbsp; &nbsp; access_log &nbsp;<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; root <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev.ru<span style="color: #000000; font-weight: bold;">/</span>htdocs;<br />
&nbsp; &nbsp; &nbsp; &nbsp; charset utf-<span style="color: #000000;">8</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># страницы с ошибками, вместо стандартных, путь указывается от root (выше)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; error_page &nbsp; &nbsp; &nbsp;<span style="color: #000000;">404</span> &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>error<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">404</span>.html;<br />
&nbsp; &nbsp; &nbsp; &nbsp; error_page &nbsp; &nbsp; &nbsp;<span style="color: #000000;">403</span> &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>error<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">403</span>.html;<br />
&nbsp; &nbsp; &nbsp; &nbsp; error_page &nbsp; &nbsp; &nbsp;<span style="color: #000000;">500</span> &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>error<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">500</span>.html;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location ~ .<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>gif<span style="color: #000000; font-weight: bold;">|</span>jpg<span style="color: #000000; font-weight: bold;">|</span>jpeg<span style="color: #000000; font-weight: bold;">|</span>png<span style="color: #000000; font-weight: bold;">|</span>ico<span style="color: #000000; font-weight: bold;">|</span>css<span style="color: #000000; font-weight: bold;">|</span>swf<span style="color: #000000; font-weight: bold;">|</span>js<span style="color: #000000; font-weight: bold;">|</span>html<span style="color: #000000; font-weight: bold;">|</span>htm<span style="color: #7a0874; font-weight: bold;">&#41;</span>$ <span style="color: #7a0874; font-weight: bold;">&#123;</span> <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Для wordpess - это директория с upload и по умолчанию получится</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># что залив php скрипт можно будет выполнить его по прямой ссылке &nbsp; &nbsp; &nbsp; &nbsp;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; location ~ wp-content<span style="color: #000000; font-weight: bold;">/</span>uploads<span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #000000; font-weight: bold;">*</span>\.php <span style="color: #7a0874; font-weight: bold;">&#123;</span> <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location ~ \.php$<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>fastcgi_params;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_FILENAME <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev.ru<span style="color: #000000; font-weight: bold;">/</span>htdocs<span style="color: #007800;">$fastcgi_script_name</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param QUERY_STRING &nbsp; &nbsp;<span style="color: #007800;">$query_string</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass &nbsp;127.0.0.1:<span style="color: #000000;">9000</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Директива определяет что ответы FastCGI-сервера с кодом больше или равные 400 </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># перенаправлять на обработку nginx'у с помощью директивы error_page</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_intercept_errors on;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_index index.php;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;127.0.0.1:<span style="color: #000000;">9000</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_FILENAME <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev.ru<span style="color: #000000; font-weight: bold;">/</span>htdocs<span style="color: #007800;">$fastcgi_script_name</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param QUERY_STRING &nbsp; &nbsp;<span style="color: #007800;">$query_string</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>fastcgi_params;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_intercept_errors on;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>и на этом можно пока остановиться. Теперь <code class="codecolorer bash default"><span class="bash">apache</span></code> можно окончательно удалить с сервера. <img src='http://svdev.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get remove</span> apache2</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/nginx-php-fastcgi-remove-apache/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Настройка nginx + apache на debian</title>
		<link>http://svdev.ru/blog/setup-nginx-apache-under-debian/</link>
		<comments>http://svdev.ru/blog/setup-nginx-apache-under-debian/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 20:24:44 +0000</pubDate>
		<dc:creator>Дерябин Сергей</dc:creator>
				<category><![CDATA[неразобранное]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://svdev.ru/?p=76</guid>
		<description><![CDATA[Основная задача &#8211; что бы apache слушал запросы на 127.0.0.1:81 #порт можно взять и другой, к примеру 8080 а nginx слушал запросы с внешних адресов на 80 порту, разбирал статику или еще какие действия выполнял, а остальные запросы прокидывал на apache на локальный адрес 127.0.0.1 и 81 порт Установка nginx: 1apt-get install nginx Сначала настроим [...]]]></description>
			<content:encoded><![CDATA[<p>Основная задача &#8211; что бы apache слушал запросы на<br />
<code class="codecolorer bash default"><span class="bash">127.0.0.1:<span style="color: #000000;">81</span> <span style="color: #666666; font-style: italic;">#порт можно взять и другой, к примеру 8080</span></span></code><br />
а nginx слушал запросы с внешних адресов на 80 порту, разбирал статику или еще какие действия выполнял, а остальные запросы прокидывал на apache на локальный адрес 127.0.0.1 и 81 порт</p>
<p><span id="more-76"></span></p>
<p>Установка nginx:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">apt-get install</span> nginx</div></td></tr></tbody></table></div>
<p>Сначала настроим nginx для работы, дефолтный конфиг и создадим конфиги для все используемых сайтов.<br />
В самом конфиге (<code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>nginx.conf</span></code>) получилось следующее:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">user www-data;<br />
worker_processes &nbsp;<span style="color: #000000;">1</span>;<br />
<br />
error_log &nbsp;<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>error.log;<br />
pid &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx.pid;<br />
<br />
events <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
worker_connections &nbsp;<span style="color: #000000;">1024</span>;<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
http <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
include &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>mime.types;<br />
default_type &nbsp;application<span style="color: #000000; font-weight: bold;">/</span>octet-stream;<br />
server_names_hash_bucket_size <span style="color: #000000;">64</span>;<br />
access_log &nbsp;<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>access.log;<br />
<br />
sendfile &nbsp; &nbsp; &nbsp; &nbsp;on;<br />
<br />
keepalive_timeout &nbsp;<span style="color: #000000;">65</span>;<br />
tcp_nodelay &nbsp; &nbsp; &nbsp; &nbsp;on;<br />
<br />
<span style="color: #c20cb9; font-weight: bold;">gzip</span> &nbsp;on;<br />
<br />
include <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>conf.d<span style="color: #000000; font-weight: bold;">/*</span>.conf;<br />
include <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-enabled<span style="color: #000000; font-weight: bold;">/*</span>;<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>И проверяем что не закралась ошибка:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> nginx <span style="color: #660033;">-t</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000;">31015</span><span style="color: #666666; font-style: italic;">#0: the configuration file /etc/nginx/nginx.conf syntax is ok</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000;">31015</span><span style="color: #666666; font-style: italic;">#0: the configuration file /etc/nginx/nginx.conf was tested successfully</span></div></td></tr></tbody></table></div>
<p>Далее правим дефолтный конфиг <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>default</span></code>, для всех запросов. Так как запросы, кроме определенных сайтов нам не нужны, повесим их переадресацию на заглушку <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>nginx-default<span style="color: #000000; font-weight: bold;">/</span>index.html</span></code>, больше нам здесь ничего не надо &#8211; 404 можно перекидывать сюда же:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; <span style="color: #000000;">80</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name &nbsp;localhost;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; access_log &nbsp;<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>localhost.access.log;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>nginx-default;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index index.html;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; error_page &nbsp; &nbsp; &nbsp;<span style="color: #000000;">404</span> &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>index.html;<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>В итоге все неразобранные запросы попадут на нашу заглушку: <a href="http://77.220.185.16/">http://77.220.185.16/</a>.</p>
<p>Далее создаем настройки для всех поддерживаемых ресурсов, по аналогии с apache конфиги хранятся в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span></span></code>, а подключенные в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-enabled<span style="color: #000000; font-weight: bold;">/</span></span></code>. Создаем <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>svdev.ru</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">server <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; listen &nbsp; <span style="color: #000000;">80</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; server_name svdev.ru www.svdev.ru;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; access_log &nbsp;<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>svdev.ru<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>nginx-access.log;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; location <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_pass &nbsp; &nbsp; &nbsp; &nbsp; http:<span style="color: #000000; font-weight: bold;">//</span>127.0.0.1:<span style="color: #000000;">81</span><span style="color: #000000; font-weight: bold;">/</span>; <span style="color: #666666; font-style: italic;"># делаем переадресацию запросов на apache</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_redirect &nbsp; &nbsp; off;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_set_header &nbsp; Host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007800;">$host</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Эти настройки необходимы, что бы из скриптов было видно реальные IP пользователя, а не фронт-части</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_set_header &nbsp; X-Real-IP &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #007800;">$remote_addr</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_set_header &nbsp; X-Forwarded-For &nbsp;<span style="color: #007800;">$proxy_add_x_forwarded_for</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; client_max_body_size &nbsp; &nbsp; &nbsp; 10m;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; client_body_buffer_size &nbsp; &nbsp;128k;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_connect_timeout &nbsp; &nbsp; &nbsp;<span style="color: #000000;">90</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_send_timeout &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">90</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_read_timeout &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">90</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_buffer_size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4k;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_buffers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">4</span> 32k;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_busy_buffers_size &nbsp; &nbsp;64k;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; proxy_temp_file_write_size 64k;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></td></tr></tbody></table></div>
<p>Перовоначальные настройки позволяют просто перенаправлять запросы с nginx на apache. Настройкой правил для отдачи статики без участия apache и прочим займемся позже. После создания настроек их необходимо подключить, по аналогии apache утилит <code class="codecolorer bash default"><span class="bash">a2ensite</span></code> и <code class="codecolorer bash default"><span class="bash">a2dissite</span></code> нет и надо создать симлинк самому:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>svdev.ru <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>sites-enabled<span style="color: #000000; font-weight: bold;">/</span>svdev.ru</div></td></tr></tbody></table></div>
<p>Далее заставляем apache слушать 81 порт с внутреннего интерфейса, поправив <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>ports.conf</span></code>:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">NameVirtualHost *:81<br />
Listen 127.0.0.1:81</div></td></tr></tbody></table></div>
<p>И необходимо подправить настройки хостов apache <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>sites-available<span style="color: #000000; font-weight: bold;">/</span>svdev.ru</span></code>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># заменить 80 порт на выбранный, у меня 81</span><br />
<span style="color: #000000; font-weight: bold;">&lt;</span>VirtualHost <span style="color: #000000; font-weight: bold;">*</span>:<span style="color: #000000;">81</span><span style="color: #000000; font-weight: bold;">&gt;</span></div></td></tr></tbody></table></div>
<p>Таким образом попасть на apache теперь можно только через nginx, т. е. снаружи он недоступен!</p>
<p>Для удобства необходимо еще установить пакет</p>
<code><strong>libapache2-mod-rpaf</strong> - module for Apache2 which takes the last IP from the 'X-Forwarded-For' header</code>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get install</span> libapache2-mod-rpaf</div></td></tr></tbody></table></div>
<p>Мне дополнительно настраивать ничего не пришлось, после установки в <code class="codecolorer php default"><span class="php"><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;REMOTE_ADDR&quot;</span><span style="color: #009900;">&#93;</span></span></code> начал подставляться реальный IP посетителя, вместо 127.0.0.1 Дополнительную информацию по модулю можно найти погуглив, в документации или по ссылкам ниже.</p>
<p>Далее настроим ротацию логов. Сначала для nginx, приятно был удивлен, увидев <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>logrotate.d<span style="color: #000000; font-weight: bold;">/</span>nginx</span></code>, добавим туда еще один файл:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/*</span>.log <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; daily<br />
&nbsp; &nbsp; missingok<br />
&nbsp; &nbsp; rotate <span style="color: #000000;">2</span><br />
&nbsp; &nbsp; compress<br />
&nbsp; &nbsp; delaycompress<br />
&nbsp; &nbsp; notifempty<br />
&nbsp; &nbsp; create <span style="color: #000000;">640</span> root adm<br />
&nbsp; &nbsp; sharedscripts<br />
&nbsp; &nbsp; postrotate<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-f</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx.pid <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #c20cb9; font-weight: bold;">kill</span> <span style="color: #660033;">-USR1</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>nginx.pid<span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>error.log.1 <span style="color: #000000; font-weight: bold;">|</span> mail root <br />
&nbsp; &nbsp; endscript<br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></td></tr></tbody></table></div>
<p><code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>error.log.1 <span style="color: #000000; font-weight: bold;">|</span> mail root</span></code> &#8211; таким образом данные из последнего обработанного файла будут отправлену на почту рута, а уж куда она придет можно настраивать в <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>aliases</span></code></p>
<h3>Полезные ссылки</h3>
<p><a href="http://sysoev.ru/nginx/" target="_blank">Официальная документация по nginx</a><br />
<a href="http://www.opennet.ru/base/net/nginx_ipb.txt.html" target="_blank">OperNET: Настройка совместной работы Apache и nginx (web nginx http)</a><br />
<a href="http://server-help.ru/?p=14" target="_blank">Установка и настройка Nginx.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://svdev.ru/blog/setup-nginx-apache-under-debian/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

