<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Мастерская интернет-разработчика</title>
	
	<link>http://adw0rd.ru</link>
	<description>Блог Михаила Андреева (aka adw0rd)</description>
	<lastBuildDate>Wed, 18 Jan 2012 13:52:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/adw0rd" /><feedburner:info uri="adw0rd" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Доступ к Wikipedia на время действия экрана SOPA</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/ZE_fgmT4G1c/</link>
		<comments>http://adw0rd.ru/2012/wikipedia-sopa/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 13:43:32 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[SOPA]]></category>
		<category><![CDATA[Wiki]]></category>
		<category><![CDATA[Wikipedia]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=6547</guid>
		<description><![CDATA[По просьбе моего друга решил запостить этот пост, вдруг кому пригодится! Википедия сегодня, 18 Января 2011 года, протестует против SOPA и закрыла доступ к контенту. Но при желании можно все равно этот контент посмотреть. Википедия никуда не убрала контент, она просто добавила на каждую страничку новый div, который и содержит слой с информацией про протест [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/wp-content/uploads/2012/01/WP_SOPA_Splash_Full.jpg" ><img src="http://adw0rd.ru/wp-content/uploads/2012/01/WP_SOPA_Splash_Full-150x150.jpg" alt="" title="WP_SOPA_Splash_Full" width="150" height="150" class="alignright size-thumbnail wp-image-6548" /></a></p>
<p>По просьбе моего друга решил запостить этот пост, вдруг кому пригодится!</p>
<blockquote>
<p>
Википедия сегодня, 18 Января 2011 года, протестует против SOPA и закрыла доступ к контенту.</p>
<p>Но при желании можно все равно этот контент посмотреть. Википедия никуда не убрала контент, она просто добавила на каждую страничку новый div, который и содержит слой с информацией про протест против SOPA. А также добавила стиль display=none к слоям с контентом.</p>
<p>Все это дело легко отключается следующим скриптом (я написал его за 1-2 минуты), который выполняется из консоли Chrome или Firefox:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> jq <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
jq.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js&quot;</span><span style="color: #339933;">;</span><br />
document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'head'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>jq<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#mw-sopaOverlay'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#content'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Все элементарно: первые три строчки подключают jquery, 4-я строчка удаляет слой SOPA, 5-я строчка показывает слой с контентом.</p>
<p>Можно этот скрипт повесить на Greaemonkey, и тогда автоматически вся википедия будет нормально показываться, как и прежде.</p>
<p>И да, я поддерживаю их протест против SOPA. Просто иногда нужно срочно получить информацию, даже если она скрыта.
</p>
</blockquote>
<p>Автор: Ivan, 18 января 2012 16:18.<br />
Оригинал: <noindex><a rel="nofollow" href="http://jdevnotes.blogspot.com/2012/01/wikipedia-sopa.html" >http://jdevnotes.blogspot.com/2012/01/wikipedia-sopa.html</a></noindex></p>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/ZE_fgmT4G1c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2012/wikipedia-sopa/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2012/wikipedia-sopa/</feedburner:origLink></item>
		<item>
		<title>FreeBSD. Обновление таймзоны по повелению президента</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/fZIP6rbPZjM/</link>
		<comments>http://adw0rd.ru/2011/freebsd-msk-timezone/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 20:49:02 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[FreeBSD]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=6477</guid>
		<description><![CDATA[8 февраля 2011 года президент России Дмитрий Медведев дал поручение правительству об отмене перевода стрелок: после перехода на летнее время 27 марта 2011 года Россия должна жить только по летнему времени, которое опережает поясное (принятое декретом 1919 года) на 1 или 2 часа в зависимости от региона. В соответствии с этим поручением был подготовлен «Закон [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/2011/freebsd-localtime-timezone/" ><img src="http://adw0rd.ru/wp-content/uploads/2009/01/250px-freebsd_logo.png" alt="" title="freebsd" width="250" height="90" class="alignright size-full wp-image-491" /></a></p>
<blockquote>
<p>
8 февраля 2011 года президент России Дмитрий Медведев дал поручение правительству об отмене перевода стрелок: после перехода на летнее время 27 марта 2011 года Россия должна жить только по летнему времени, которое опережает поясное (принятое декретом 1919 года) на 1 или 2 часа в зависимости от региона. В соответствии с этим поручением был подготовлен «Закон об исчислении времени», который Государственная дума приняла 20 мая. 3 июня 2011 года президент подписал Закон, и он вступил в силу с 5 августа 2011 года</p>
<p><noindex><a rel="nofollow" href="http://ru.wikipedia.org/wiki/%D0%9B%D0%B5%D1%82%D0%BD%D0%B5%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D1%8F" >Летнее время</a></noindex>
</p>
</blockquote>
<p>FreeBSD 8.1 как и многий другой софт не подчинился новому закону Дмитрия Анатольевича, так что будем исправлять ситуацию.</p>
<p>Поставим zoneinfo, оттуда будем брать новую таймзону</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<br />
$ portsnap fetch update<br />
$ <span style="color: #7a0874; font-weight: bold;">cd</span> misc<span style="color: #000000; font-weight: bold;">/</span>zoneinfo<br />
$ <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span> clean</div></div>
<p>Проверим работает ли нужная нам таймзона и текущее время:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">zdump</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>zoneinfo<span style="color: #000000; font-weight: bold;">/</span>Europe<span style="color: #000000; font-weight: bold;">/</span>Moscow <br />
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>zoneinfo<span style="color: #000000; font-weight: bold;">/</span>Europe<span style="color: #000000; font-weight: bold;">/</span>Moscow &nbsp;Wed Nov &nbsp;<span style="color: #000000;">9</span> 00:<span style="color: #000000;">16</span>:<span style="color: #000000;">29</span> <span style="color: #000000;">2011</span> MSK<br />
$ <span style="color: #c20cb9; font-weight: bold;">date</span><br />
Wed Nov &nbsp;<span style="color: #000000;">8</span> <span style="color: #000000;">23</span>:<span style="color: #000000;">16</span>:<span style="color: #000000;">40</span> MSK <span style="color: #000000;">2011</span></div></div>
<p>Как видим расходится, так что установим новую хорошую таймзону:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>zoneinfo<span style="color: #000000; font-weight: bold;">/</span>Europe<span style="color: #000000; font-weight: bold;">/</span>Moscow <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>localtime <br />
$ <span style="color: #c20cb9; font-weight: bold;">date</span><br />
Wed Nov &nbsp;<span style="color: #000000;">9</span> 00:<span style="color: #000000;">16</span>:<span style="color: #000000;">56</span> MSK <span style="color: #000000;">2011</span></div></div>
<p><span id="more-6477"></span><br />
Не забудьте перезагрузить &laquo;mysqld&raquo;:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.d<span style="color: #000000; font-weight: bold;">/</span>mysql-server restart</div></div>
<h3>Не взлетел PHP?</h3>
<p>Если PHP не взлетел, то используйте pecl-timezonedb:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<span style="color: #000000; font-weight: bold;">/</span>misc<span style="color: #000000; font-weight: bold;">/</span>pecl-timezonedb<br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span> clean</div></div>
<p>и убедитесь что &laquo;timezonedb.so&raquo; добавился в &laquo;/usr/local/etc/php/extensions.ini&raquo;:</p>
<div class="codecolorer-container ini default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">...<br />
<span style="color: #000099;">extension</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">timezonedb.so</span></div></div>
<h3>Синхронизация</h3>
<p>Просинхронизируйте ваше время:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ntpdate <span style="color: #660033;">-v</span> <span style="color: #660033;">-b</span> europe.pool.ntp.org</div></div>
<p>Можете настроить &laquo;rc.conf&raquo; для постоянной синхронизации времени:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">ntpdate_enable</span>=<span style="color: #ff0000;">&quot;YES&quot;</span><br />
<span style="color: #007800;">ntpdate_hosts</span>=<span style="color: #ff0000;">&quot;europe.pool.ntp.org&quot;</span></div></div>
<p>Так же можете почитать <noindex><a rel="nofollow" href="http://www.manpagez.com/man/8/ntpdate/" >man page ntpdate</a></noindex> и посмотреть какие ещё есть параметры конфигурации для &laquo;rc.conf&raquo;:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">grep</span> <span style="color: #660033;">-r</span> ntpdate <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>defaults<span style="color: #000000; font-weight: bold;">/</span>rc.conf <br />
<span style="color: #007800;">ntpdate_enable</span>=<span style="color: #ff0000;">&quot;NO&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Run ntpdate to sync time on boot (or NO).</span><br />
<span style="color: #007800;">ntpdate_program</span>=<span style="color: #ff0000;">&quot;/usr/sbin/ntpdate&quot;</span> &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># path to ntpdate, if you want a different one.</span><br />
<span style="color: #007800;">ntpdate_flags</span>=<span style="color: #ff0000;">&quot;-b&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;"># Flags to ntpdate (if enabled).</span><br />
<span style="color: #007800;">ntpdate_config</span>=<span style="color: #ff0000;">&quot;/etc/ntp.conf&quot;</span> &nbsp;<span style="color: #666666; font-style: italic;"># ntpdate(8) configuration file</span><br />
<span style="color: #007800;">ntpdate_hosts</span>=<span style="color: #ff0000;">&quot;&quot;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;"># Whitespace-separated list of ntpdate(8) servers.</span></div></div>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/fZIP6rbPZjM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2011/freebsd-msk-timezone/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2011/freebsd-msk-timezone/</feedburner:origLink></item>
		<item>
		<title>Xubuntu. Проблемы с авторизацией после апгрейда с 11.04 на 11.10</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/eE3XH-duJ-M/</link>
		<comments>http://adw0rd.ru/2011/xubuntu-1104-1110/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 18:11:55 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[xubuntu]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=6461</guid>
		<description><![CDATA[Обновил я на той неделе свою Xubuntu с 11.04 на 11.10, как и опасался оно не взлетело с первого раза. Симптомы были следующие: gdm стартовал успешно, но авторизоваться под своим пользователем не получалось, вылетало на авторизацию вновь (gdm), при этом новые учетные записи авторизовывало успешно. Посравнивал свои конфигурационные файлы с другой учетной записью, ничего криминального [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/wp-content/uploads/2011/10/f28838f7915a239766214d95f67-e1319541232350.png" ><img src="http://adw0rd.ru/wp-content/uploads/2011/10/f28838f7915a239766214d95f67-e1319541281528.png" alt="" title="xubuntu" width="99" height="149" class="alignright size-full wp-image-6464" /></a></p>
<p>Обновил я на той неделе свою Xubuntu с 11.04 на 11.10, как и опасался оно не взлетело с первого раза.<br />
Симптомы были следующие: gdm стартовал успешно, но авторизоваться под своим пользователем не получалось, вылетало на авторизацию вновь (gdm), при этом новые учетные записи авторизовывало успешно.<br />
Посравнивал свои конфигурационные файлы с другой учетной записью, ничего криминального не нашёл, кроме того что в моём домашнем каталоге были файлы не от моего пользователя.</p>
<h3>Решение проблемы</h3>
<p>Переключаемся в один из терминалов (например tty1) с помощью Ctrl+Alt+F1 и вводим следующее:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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> <span style="color: #660033;">-R</span> <span style="color: #000000; font-weight: bold;">&lt;</span>username<span style="color: #000000; font-weight: bold;">&gt;</span>:<span style="color: #000000; font-weight: bold;">&lt;</span>usergroup<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/&lt;</span>username<span style="color: #000000; font-weight: bold;">&gt;</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> shutdown <span style="color: #660033;">-r</span> now</div></div>
<p>Это решило мои проблемы.</p>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/eE3XH-duJ-M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2011/xubuntu-1104-1110/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2011/xubuntu-1104-1110/</feedburner:origLink></item>
		<item>
		<title>SSH. Авторизация через ключ</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/_xLHsTX08nc/</link>
		<comments>http://adw0rd.ru/2011/ssh-auth-key/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 17:26:59 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=6386</guid>
		<description><![CDATA[Если вам надоело вводить логин и пароль при подключении по SSH, либо ваше приложение не поддерживает ввод логина и пароля для SSH, а соединиться всётаки надо, то вам просто необходимо использовать авторизацию по ключам! Для этого надо настроить на стороне клиента и сервера ключи, для клиента будет приватный, а на сервере будет храниться публичный ключ. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/2011/ssh-auth-key/"><img src="/wp-content/uploads/2011/08/ssh-auth-key2.jpg" alt="" title="ssh-auth-key2" width="103" height="151" class="alignright size-full wp-image-6403" /></a></p>
<p>Если вам надоело вводить логин и пароль при подключении по <strong>SSH</strong>, либо ваше приложение не поддерживает ввод логина и пароля для <strong>SSH</strong>, а соединиться всётаки надо, то вам просто необходимо использовать авторизацию по ключам!</p>
<p>Для этого надо настроить на стороне клиента и сервера ключи, для клиента будет приватный, а на сервере будет храниться публичный ключ.</p>
<h3>Настройка на стороне клиента</h3>
<p>Создайте и/или отредактируйте файл &laquo;~/.ssh/config&raquo;:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Host example<br />
&nbsp; &nbsp; User username<br />
&nbsp; &nbsp; Hostname example.com<br />
&nbsp; &nbsp; Port <span style="color: #000000;">22</span><br />
&nbsp; &nbsp; IdentityFile ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>username_example</div></div>
<p><strong>Где,</strong></p>
<ul>
<li>&laquo;Host <strong>example&raquo;</strong>&nbsp;&mdash; название хоста, которое вы будете указывать при подключении по SSH (Пример: &laquo;ssh example&raquo;);</li>
<li>&laquo;User <strong>username&raquo;</strong>&nbsp;&mdash; имя вашего пользователя на сервере;</li>
<li>&laquo;Hostname <strong>example.com&raquo;</strong>&nbsp;&mdash; имя хоста вашего сервера (в отличии от <strong>Host</strong> это действительно имя сервера, а не просто имя для соединения);</li>
<li>&laquo;Port <strong>22&raquo;</strong>&nbsp;&mdash; SSH порт;</li>
<li>&laquo;IdentityFile <strong>~/.ssh/username_example&raquo;</strong>&nbsp;&mdash; файл с публичным ключом.</li>
</ul>
<p><span id="more-6386"></span></p>
<h3>Генерация ключей и передача их на сервер</h3>
<p>Далее, сгенерируем ключи.<br />
После чего сразу же перешлём публичный ключ на сервер, а приватный переименуем в &laquo;~/.ssh/username_example&raquo;:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">ssh-keygen</span><br />
<span style="color: #c20cb9; font-weight: bold;">scp</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>id_rsa.pub username<span style="color: #000000; font-weight: bold;">@</span>example.com:~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>authorized_keys<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>id_rsa ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>username_example<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #660033;">-R</span> <span style="color: #000000;">600</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">700</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh</div></div>
<p>Теперь должно подключаться по ключу:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">ssh</span> example</div></div>
<p>Если нет, то пишите камменты :)</p>
<h3>Утилита ssh-copy-id</h3>
<p>Также есть более быстрый (меньше телодвижений) и правильный (он добавляет ключ в &laquo;~/.ssh/authorized_keys&raquo; на сервере, а не замещает как &laquo;scp&raquo;) способ передавать публичный ключ на сервер, это утилита <strong>ssh-copy-id</strong>.</p>
<p>То есть вместо:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">ssh-keygen</span><br />
<span style="color: #c20cb9; font-weight: bold;">scp</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>id_rsa.pub username<span style="color: #000000; font-weight: bold;">@</span>example.com:~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>authorized_keys</div></div>
<p>надо использовать так:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">ssh-keygen</span><br />
ssh-copy-id <span style="color: #660033;">-i</span> username<span style="color: #000000; font-weight: bold;">@</span>example.com</div></div>
<p>Ну вот и всё, смотрите также:<br />
<a href="/2011/wordpress-update-ssh/">WordPress. Обновление движка и плагинов через ssh</a><br />
<a href="/2010/first-measures-security-freebsd/">Первые меры безопасности во FreeBSD</a><br />
<a href="/2009/ssh-auth-keys/">FreeBSD. Без парольный доступ по SSH с использованием шифрованных ключей</a><br />
<a href="/2009/denyhosts/">FreeBSD. DenyHosts защитит вас от брутфорса SSH</a></p>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/_xLHsTX08nc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2011/ssh-auth-key/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2011/ssh-auth-key/</feedburner:origLink></item>
		<item>
		<title>WordPress. Обновление движка и плагинов через ssh</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/GE5zsDY6j9s/</link>
		<comments>http://adw0rd.ru/2011/wordpress-update-ssh/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 14:26:52 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Wordpress и плагины]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=6353</guid>
		<description><![CDATA[Допустим мы имеем блог http://example.org/ и надо обновлять переодически его плагины и сам движок WordPress. Беда в том, что поддерживается по дефолту только FTP, а у меня его нет, из возможных вариантов есть только SSH, его и будем внедрять! Настройка Отредактируем наш конфиг &#171;wp-config.php&#187;: $project_root = dirname&#40;__file__&#41;; /* FS_METHOD forces the filesystem method. It should [...]]]></description>
			<content:encoded><![CDATA[<p><noindex><a href="/2011/wordpress-update-ssh/"><img src="http://adw0rd.ru/wp-content/uploads/2009/02/wordpress.png"  alt="" title="wordpress" width="250" height="68" class="alignright size-full wp-image-746" /></a></noindex></p>
<p>Допустим мы имеем блог <strong>http://example.org/</strong> и надо обновлять переодически его плагины и сам движок <strong>WordPress</strong>.<br />
Беда в том, что поддерживается по дефолту только <strong>FTP</strong>, а у меня его нет, из возможных вариантов есть только <strong>SSH</strong>, его и будем внедрять!</p>
<h3>Настройка</h3>
<p>Отредактируем наш конфиг &laquo;wp-config.php&raquo;:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">$project_root</span> = <span style="color: #c20cb9; font-weight: bold;">dirname</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>__file__<span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">/*</span><br />
FS_METHOD forces the filesystem method. It should only be <span style="color: #ff0000;">&quot;direct&quot;</span>, <span style="color: #ff0000;">&quot;ssh&quot;</span>, <span style="color: #ff0000;">&quot;ftpext&quot;</span>, or <span style="color: #ff0000;">&quot;ftpsockets&quot;</span>.<br />
Generally, You should only change this <span style="color: #000000; font-weight: bold;">if</span> you are experiencing update problems, If you change it, and<br />
it doesnt <span style="color: #7a0874; font-weight: bold;">help</span> change it back<span style="color: #000000; font-weight: bold;">/</span>remove it, Under most circumstances, setting it to <span style="color: #ff0000;">'ftpsockets'</span> will<br />
work <span style="color: #000000; font-weight: bold;">if</span> the automatically chosen method does not. <br />
See: http:<span style="color: #000000; font-weight: bold;">//</span>codex.wordpress.org<span style="color: #000000; font-weight: bold;">/</span>Editing_wp-config.php<span style="color: #666666; font-style: italic;">#WordPress_Upgrade_Constants</span><br />
<span style="color: #000000; font-weight: bold;">*/</span><br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FS_METHOD'</span>, <span style="color: #ff0000;">'direct'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_BASE'</span>, <span style="color: #007800;">$project_root</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_CONTENT_DIR'</span>, <span style="color: #007800;">$project_root</span> . <span style="color: #ff0000;">'/wp-content/'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_PLUGIN_DIR '</span>, <span style="color: #007800;">$project_root</span> . <span style="color: #ff0000;">'/wp-content/plugins/'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_PUBKEY'</span>, <span style="color: #ff0000;">'/home/example_user/.ssh/id_rsa.pub'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_PRIKEY'</span>, <span style="color: #ff0000;">'/home/example_user/.ssh/id_rsa'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_USER'</span>, <span style="color: #ff0000;">'example_user'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
<span style="color: #000000; font-weight: bold;">//</span> define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_PASS'</span>, <span style="color: #ff0000;">'password'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;<br />
define<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'FTP_HOST'</span>, <span style="color: #ff0000;">'127.0.0.1:22'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>;</div></div>
<p><span id="more-6353"></span><br />
Где &laquo;example_user&raquo;&nbsp;&mdash; имя пользователя из под которого и будет выполняться подключение.</p>
<p>Теперь надо сгенерировать ключи (вместо этого конечно можем использовать &laquo;password&raquo;, но мне не нравится такое решение) и настроим наш .ssh:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">ssh-keygen</span><br />
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<br />
<span style="color: #c20cb9; font-weight: bold;">cat</span> id_rsa.pub <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> authorized_keys<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #660033;">-R</span> <span style="color: #000000;">644</span> .<br />
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">755</span> .</div></div>
<p>Проверяем соединение с сервера (т.е. сами себя):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">ssh</span> example_user<span style="color: #000000; font-weight: bold;">@</span>127.0.0.1 <span style="color: #660033;">-p</span> <span style="color: #000000;">22</span></div></div>
<p>Если не соединяется, то надо поправить &laquo;/etc/ssh/sshd_config&raquo; и расскоментировать или добавить:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ListenAddress 127.0.0.1</div></div>
<p>Если не установлено расширение <strong>ssh2</strong> для PHP, то вы можете скачать его и поставить ручками <noindex><a rel="nofollow" href="http://pecl.php.net/package/ssh2" >http://pecl.php.net/package/ssh2</a></noindex>, либо можно установить из портов, если у вас FreeBSD:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<span style="color: #000000; font-weight: bold;">/</span>security<span style="color: #000000; font-weight: bold;">/</span>pecl-ssh2<br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span> clean</div></div>
<h3>Использование</h3>
<p>Заходим в админку <strong>WordPress</strong>, в раздел <strong>&laquo;Обновления WordPress&raquo;->&laquo;Обновить автоматически&raquo;</strong> (&laquo;http://example.org/wp-admin/update-core.php?action=do-core-upgrade&raquo;) и обновляем все что нам необходимо.</p>
<p>Если при обновлении у вас отваливается соединение (как было у меня), то увеличивайте таймауты для своего веб-сервера.<br />
Если вы используете <strong>Nginx</strong>, то установите соответствующий <noindex><a rel="nofollow" href="http://sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_read_timeout" >proxy_read_timeout</a></noindex> или <noindex><a rel="nofollow" href="http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html#fastcgi_read_timeout" >fastcgi_read_timeout</a></noindex>.</p>
<p>P.S. По мотивам <noindex><a rel="nofollow" href="http://kbeezie.com/view/wordpress-autoupdate-ssh/" >http://kbeezie.com/view/wordpress-autoupdate-ssh/</a></noindex></p>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/GE5zsDY6j9s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2011/wordpress-update-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2011/wordpress-update-ssh/</feedburner:origLink></item>
		<item>
		<title>Андрей Аксенов: “Как готовить Sphinx” / мастер-класс, Киев, 18-ое июня</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/5Zvul5L6BJA/</link>
		<comments>http://adw0rd.ru/2011/sphinx-master-class/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 19:28:24 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Конференции]]></category>
		<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Sphinx]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=6322</guid>
		<description><![CDATA[В субботу, 18-го июня в Киеве пройдет мастер-класс создателя движка полнотекстового поиска Sphinx Андрея Аксенова ”Как готовить Sphinx”. Мастер-класс будет интересен разработчикам, руководителям и владельцам проектов, которые сталкиваются с проблемой поиска при высоких нагрузках. Sphinx используют такие монстры, как CraigsList, DailyMotion, Meetup, HupPages, HabraHabr и еще десятки высоконагруженных сайтов такие как Кинсбург. Андрей Аксенов выступал [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/2011/sphinx-master-class/" ><img src="http://adw0rd.ru/wp-content/uploads/2011/06/axenov.jpg" alt="" title="axenov" width="100" height="112" class="alignright size-full wp-image-6323" /></a><br />
<strong>В субботу, 18-го июня в Киеве</strong> пройдет мастер-класс создателя движка полнотекстового поиска Sphinx Андрея Аксенова ”Как готовить Sphinx”.</p>
<p>Мастер-класс будет интересен разработчикам, руководителям и владельцам проектов, которые сталкиваются с проблемой поиска при высоких нагрузках.</p>
<p>Sphinx используют такие монстры, как <strong>CraigsList</strong>, <strong>DailyMotion</strong>, <strong>Meetup</strong>, <strong>HupPages</strong>, <strong>HabraHabr</strong> и еще десятки высоконагруженных сайтов такие как <noindex><a rel="nofollow" href="http://kinsburg.ru/" >Кинсбург</a></noindex>. Андрей Аксенов  выступал на многочисленных конференциях в России: <strong>“DevPoint 1-2″, “РИТ”, “DevConf 2011″, “HighLoad ++”</strong>. Организатор конференции пользователей Sphinx в Москве. Автор нашумевшего доклада “Как прекратить писать”.</p>
<p>Дополнительная информация и подробный план мастер-класса можно посмотреть на сайте <noindex><a rel="nofollow" href=" http://www.smartme.com.ua/sphinx-workshop/" >http://www.smartme.com.ua/sphinx-workshop/</a></noindex></p>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/5Zvul5L6BJA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2011/sphinx-master-class/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2011/sphinx-master-class/</feedburner:origLink></item>
		<item>
		<title>FreeBSD. Установка MySQL 5.5.9 и SphinxSE</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/_7OFqJ8L3Cg/</link>
		<comments>http://adw0rd.ru/2011/mysql55-sphinxse/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 21:31:41 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sphinx]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=6290</guid>
		<description><![CDATA[Захотелось поставить на новый сервер MySQL 5.5, но в документации по установке SphinxSE этой версии MySQL нету. Погуглив и попробовав разные варианты я составил небольшую статью... Сборка плагина Тут все просто, сливаем из портов сорцы MySQL, сливаем патч, сливаем sphinx из транка и собираем все вместе. cd /usr/ports/database/mysql55-server make fetch cp /usr/ports/distfiles/mysql-5.5.9.tgz /tmp cd /tmp [...]]]></description>
			<content:encoded><![CDATA[<p>Захотелось поставить на новый сервер MySQL 5.5, но в <noindex><a rel="nofollow" href="http://sphinxsearch.com/docs/manual-1.10.html#sphinxse-mysql51" >документации по установке SphinxSE</a></noindex> этой версии MySQL нету. Погуглив и попробовав разные варианты я составил небольшую статью...</p>
<h3>Сборка плагина</h3>
<p>Тут все просто, сливаем из портов сорцы MySQL, сливаем патч, сливаем sphinx из транка и собираем все вместе.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<span style="color: #000000; font-weight: bold;">/</span>database<span style="color: #000000; font-weight: bold;">/</span>mysql55-server<br />
<span style="color: #c20cb9; font-weight: bold;">make</span> fetch<br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<span style="color: #000000; font-weight: bold;">/</span>distfiles<span style="color: #000000; font-weight: bold;">/</span>mysql-5.5.9.tgz <span style="color: #000000; font-weight: bold;">/</span>tmp<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<br />
<span style="color: #c20cb9; font-weight: bold;">svn co</span> http:<span style="color: #000000; font-weight: bold;">//</span>sphinxsearch.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>trunk sphinx-trunk<br />
fetch http:<span style="color: #000000; font-weight: bold;">//</span>www.coreseek.cn<span style="color: #000000; font-weight: bold;">/</span>uploads<span style="color: #000000; font-weight: bold;">/</span>csft<span style="color: #000000; font-weight: bold;">/</span>patch<span style="color: #000000; font-weight: bold;">/</span>Sphinx_1.11-dev_sphinxse_mysql-5.5.8.diff<br />
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzf</span> mysql-5.5.9.tar.gz<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> sphinx-trunk<br />
<span style="color: #c20cb9; font-weight: bold;">patch</span> <span style="color: #660033;">-p0</span> <span style="color: #000000; font-weight: bold;">&lt;</span> ..<span style="color: #000000; font-weight: bold;">/</span>Sphinx_1.11-dev_sphinxse_mysql-5.5.8.diff<br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-R</span> mysqlse ..<span style="color: #000000; font-weight: bold;">/</span>mysql-5.5.9<span style="color: #000000; font-weight: bold;">/</span>storage<span style="color: #000000; font-weight: bold;">/</span>sphinx<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>mysql-5.5.9<br />
cmake . -DCMAKE_BUILD_TYPE=Release -DWITH_SPHINX_STORAGE_ENGINE=<span style="color: #000000;">1</span><br />
<span style="color: #c20cb9; font-weight: bold;">make</span><br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> storage<span style="color: #000000; font-weight: bold;">/</span>sphinx<span style="color: #000000; font-weight: bold;">/</span>ha_sphinx.so <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<span style="color: #000000; font-weight: bold;">/</span>plugin<span style="color: #000000; font-weight: bold;">/</span>ha_sphinx.so</div></div>
<p>Так как у меня уже был поставлен MySQL 5.5 из портов, то я не запускал make install, поэтому его тут и не привел. И вам советую поставить из портов.</p>
<h3>Установка плагина</h3>
<p>Заходим в mysql-клиент:</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">INSTALL PLUGIN sphinx <span style="color: #993333; font-weight: bold;">SONAME</span> <span style="color: #ff0000;">&quot;ha_sphinx.so&quot;</span>;<br />
<span style="color: #993333; font-weight: bold;">SHOW</span> ENGINES;</div></div>
<p>По мотивам <noindex><a rel="nofollow" href="http://sphinxsearch.com/forum/view.html?id=6862#32268" >http://sphinxsearch.com/forum/view.html?id=6862#32268</a></noindex></p>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/_7OFqJ8L3Cg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2011/mysql55-sphinxse/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2011/mysql55-sphinxse/</feedburner:origLink></item>
		<item>
		<title>Nginx. Использование PHP в режиме FastCGI с помощью spawn-fcgi</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/PYP6IFe2ij0/</link>
		<comments>http://adw0rd.ru/2010/nginx-spawn-fcgi/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 01:54:08 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[spawn-fcgi]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=4875</guid>
		<description><![CDATA[В прошлой статье о FastCGi&#160;&#8212; Nginx. Использование PHP в режиме FastCGI с помощью php-fpm я рассказал как использовать php-fpm спаунер (надо сказать, что с тех времен все сильно поменялось, например вышел php 5.3.3 и php-fpm стал входить в дистрибутив php, а так же поменялся формат конфига php-fpm). Сегодня расскажу как использовать spawn-fcgi, некогда входивший в [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/2009/nginx-spawn-fcgi/" ><img src="http://adw0rd.ru/wp-content/uploads/2009/06/php-fastcgi.png" alt="php-fastcgi" title="php-fastcgi" width="150" height="80" class="alignright size-full wp-image-4631" /></a></p>
<p>В прошлой статье о FastCGi&nbsp;&mdash; <a href="http://adw0rd.ru/2010/nginx-and-php-fpm/" >Nginx. Использование PHP в режиме FastCGI с помощью php-fpm</a> я рассказал как использовать php-fpm спаунер (надо сказать, что с тех времен все сильно поменялось, например вышел php 5.3.3 и php-fpm стал входить в дистрибутив php, а так же поменялся формат конфига php-fpm). Сегодня расскажу как использовать spawn-fcgi, некогда входивший в дистрибутив lighttpd, а ныне являющийся <noindex><a rel="nofollow" href="http://redmine.lighttpd.net/projects/spawn-fcgi/news" >отдельным проектом</a></noindex>.</p>
<h3>Установка</h3>
<p>Перед установкой спаунера убедимся, что PHP собран с поддержкой CGi:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[X] CGI &nbsp; &nbsp; &nbsp; &nbsp;Build CGI version</div></div>
<p>Далее заходим в порты и устанавливаем <strong>spawn-fcgi</strong>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>spawn-fcgi<br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span> clean</div></div>
<p><span id="more-4875"></span></p>
<h3>Настройка</h3>
<p>Отредактируйте &laquo;nginx.conf&raquo; и добавьте upstream:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">upstream spawn-fcgi {<br />
&nbsp; &nbsp; server unix:/tmp/spawn-fcgi.sock;<br />
}</div></div>
<p>Откройте на редактирование файл &laquo;/etc/rc.conf&raquo; и укажите необходимые настройки:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># При запуске системы загружать spawn-fcgi<br />
spawn_fcgi_enable=&quot;YES&quot;<br />
<br />
# Пользователь от которой работать будет php-cgi<br />
spawn_fcgi_username=&quot;www&quot;<br />
<br />
# Группа<br />
spawn_fcgi_groupname=&quot;www&quot;<br />
<br />
# Путь до unix-сокета, именно его мы используем<br />
spawn_fcgi_bindsocket=&quot;/tmp/spawn-fcgi.sock&quot;<br />
<br />
# Количество запущенных php-cgi процессов<br />
spawn_fcgi_children=&quot;5&quot;<br />
<br />
# Кол-во запросов, после которых перезагружается процесс (для предотвращения утечек памяти)<br />
spawn_fcgi_max_requests=&quot;1000&quot;</div></div>
<p>Полный перечень допустимых настроек можно посмотреть в &laquo;/usr/local/etc/rc.d/spawn-fcgi&raquo;, вот некоторые из них, о которых я не упоминал выше:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># Путь до php-cgi приложения<br />
spawn_fcgi_app=&quot;/usr/local/bin/php-cgi&quot;<br />
<br />
# Дополнительные аргументы для php-cgi (их можно узнать командой &quot;php-cgi -h&quot;)<br />
spawn_fcgi_app_args=&quot;&quot;<br />
<br />
# Вы можете указать путь до песочницы<br />
spawn_fcgi_chroot_dir=&quot;&quot;<br />
<br />
# IP адрес, который будет слушать демон<br />
spawn_fcgi_bindaddr=&quot;127.0.0.1&quot;<br />
<br />
# Соответственно порт<br />
spawn_fcgi_bindport=&quot;9000&quot;<br />
<br />
# Путь до PID файла<br />
spawn_fcgi_pidfile=&quot;/var/run/spawn-fcgi.pid&quot;<br />
<br />
# Права на файл unix-сокета<br />
spawn_fcgi_bindsocket_mode=&quot;0777&quot;</div></div>
<h3>Запуск</h3>
<p>Запускаем spawn-fcgi и перезагружаем nginx:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.d<span style="color: #000000; font-weight: bold;">/</span>spawn-fcgi start<br />
nginx <span style="color: #660033;">-s</span> reload</div></div>
<p>Используемая версия <strong>spawn-fcgi</strong>&nbsp;&mdash; 1.6.3</p>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/PYP6IFe2ij0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2010/nginx-spawn-fcgi/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2010/nginx-spawn-fcgi/</feedburner:origLink></item>
		<item>
		<title>FreeBSD. XHProf для анализа производительности PHP</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/OLx4RtgjU10/</link>
		<comments>http://adw0rd.ru/2010/freebsd-xhprof-php/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 23:00:20 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XHProf]]></category>
		<category><![CDATA[Оптимизация]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=5510</guid>
		<description><![CDATA[Решил я воспользоваться утилитой для профилирования производительности веб-приложения XHProf от Facebook. И она мне так понравилась, что я решил написать про неё небольшой пост. Утилита проводит анализ работы сайта, выводит информацию о использование каждой функции на пути работы приложения (например, загрузки определенной страницы сайта), а именно: количество вызовов определенной функции, затраченное время, кол-во потребляемой памяти [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/wp-content/uploads/2010/04/xhprof.jpg" ><img src="http://adw0rd.ru/wp-content/uploads/2010/04/xhprof.jpg" alt="" title="xhprof" width="199" height="100" class="alignright size-full wp-image-5526" /></a></p>
<p>Решил я воспользоваться утилитой для профилирования производительности веб-приложения <strong>XHProf</strong> от Facebook. И она мне так понравилась, что я решил написать про неё небольшой пост.</p>
<p>Утилита проводит анализ работы сайта, выводит информацию о использование каждой функции на пути работы приложения (например, загрузки определенной страницы сайта), а именно: количество вызовов определенной функции, затраченное время, кол-во потребляемой памяти и ресурсов процессора.</p>
<blockquote>
<p>
<strong>Профилирование</strong> — сбор характеристик работы программы, таких как время выполнения отдельных фрагментов (обычно подпрограмм), число верно предсказанных условных переходов, число кэш промахов и т. д. Инструмент, используемый для анализа работы, называют профилировщиком. Обычно выполняется совместно с оптимизацией программы.</p>
<p><noindex><a rel="nofollow" href="http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%28%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%29" >Профилирование в Wikipedia</a></noindex>
</p>
</blockquote>
<p><span id="more-5510"></span></p>
<p>Данные выводятся в виде таблицы:</p>
<p><img src="http://adw0rd.ru/wp-content/uploads/2010/05/xhprof_table.jpg" alt="" title="xhprof_table" width="809" height="407" class="alignnone size-full wp-image-6186" style="border:dotted 2px gray;padding:10px;" /></p>
<p>Так же она может отрисовать граф с помощью <noindex><a rel="nofollow" href="http://ru.wikipedia.org/wiki/Graphviz" >GraphViz</a></noindex>, но для этого он должен быть предварительно собран в системе (об этом ниже):</p>
<p><img src="http://adw0rd.ru/wp-content/uploads/2010/05/xhprof_callgraph.jpg" alt="" title="xhprof_callgraph" width="223" height="528" class="alignnone size-full wp-image-6187" style="border:dotted 2px gray;padding:10px;" /></p>
<p><strong>XHProf</strong> представляет собой pecl-расширение для PHP, написана она на си, поэтому достигается высокая с ее стороны производительность и ее можно использовать на продакшен сервере для анализа реальных данных.</p>
<h3>Установка</h3>
<p>Я собирал расширение из сорцов, для этого заходим на <noindex><a rel="nofollow" href="http://pecl.php.net/package/xhprof" >страницу расширения</a></noindex> и качаем необходимую нам версию, у меня это <noindex><a rel="nofollow" href="http://pecl.php.net/get/xhprof-0.9.2.tgz" >xhprof-0.9.2</a></noindex>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<br />
fetch http:<span style="color: #000000; font-weight: bold;">//</span>pecl.php.net<span style="color: #000000; font-weight: bold;">/</span>get<span style="color: #000000; font-weight: bold;">/</span>xhprof-0.9.2.tgz<br />
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzf</span> xhprof-0.9.2.tgz<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> xhprof-0.9.2<span style="color: #000000; font-weight: bold;">/</span>extension<span style="color: #000000; font-weight: bold;">/</span><br />
phpize<br />
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--with-php-config</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php-config<br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></div></div>
<p>Пропишите расширение в php.ini или в php/extensions.ini:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">extension=xhprof.so</div></div>
<blockquote>
<p>
Вы можете поставить расширение <strong>XHProf</strong> из портов (/usr/ports/devel/pecl-xhprof/).<br />
В мае, когда я практически написал эту статью, его ещё там небыло.
</p>
</blockquote>
<p>Укажите в php.ini каталог, который будет играть роль хранилища ваших данных:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[xhprof] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
xhprof.output_dir=/usr/local/xhprof/out</div></div>
<p>Ну и создать его тоже надо, естественно:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mkdir -p /usr/local/xhprof/out</div></div>
<h4>XHProf UI</h4>
<p>Теперь настроим веб-интерфейс <strong>XHProf</strong>, для этого скопируем сорцы в свой каталог:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>xhprof<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-R</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>xhprof-0.9.2<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>xhprof<span style="color: #000000; font-weight: bold;">/</span></div></div>
<p>И пропишем новый хост в nginx:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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; listen <span style="color: #000000;">80</span>;<br />
&nbsp; &nbsp; server_name xhprof.test;<br />
&nbsp; &nbsp; charset utf8;<br />
&nbsp; &nbsp; root <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>xhprof<span style="color: #000000; font-weight: bold;">/</span>xhprof_html;<br />
&nbsp; &nbsp; index index.php;<br />
<br />
&nbsp; &nbsp; location ~ \.php$ <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass php-fpm;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_index index.php;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_FILENAME <span style="color: #007800;">$document_root</span><span style="color: #007800;">$fastcgi_script_name</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; include fastcgi_params;<br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Перезагружаем nginx:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nginx <span style="color: #660033;">-s</span> reload</div></div>
<p>А в локальном файле hosts завяжем домен:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">123.45.67.89 xhprof.test</div></div>
<p>Где &laquo;123.45.67.89&raquo;&nbsp;&mdash; ip машины на которой стоит <strong>XHProf</strong>, то есть где мы его только что устанавливали.</p>
<h4>Собираем Graphviz</h4>
<p>Для построение визуализации соберем Graphviz (крайне рекомендую это сделать, будет намного нагляднее).</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<span style="color: #000000; font-weight: bold;">/</span>graphics<span style="color: #000000; font-weight: bold;">/</span>graphviz<br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span> clean</div></div>
<h4>Собираем Ctype</h4>
<p>Вам так же может понадобится Ctype</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>ports<span style="color: #000000; font-weight: bold;">/</span>textproc<span style="color: #000000; font-weight: bold;">/</span>php5-ctype<br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span> clean</div></div>
<h3>Настройка</h3>
<p>Теперь настроим <strong>XHProf</strong> так, чтобы он профилировал только когда у нас установлена специальная кука. Для это создадим два файла &laquo;/usr/local/xhprof/header.php&raquo; и &laquo;/usr/local/xhprof/footer.php&raquo;, со следующим содержимым:</p>
<p>1. Отредактируйте &laquo;/usr/local/xhprof/header.php&raquo;:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;?php</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_COOKIE</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'xhprof'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">extension_loaded</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'xhprof'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$utils_path</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/usr/local/xhprof/xhprof_lib/utils/&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">include_once</span> <span style="color: #000088;">$utils_path</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'xhprof_lib.php'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">include_once</span> <span style="color: #000088;">$utils_path</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'xhprof_runs.php'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; xhprof_enable<span style="color: #009900;">&#40;</span>XHPROF_FLAGS_CPU <span style="color: #339933;">+</span> XHPROF_FLAGS_MEMORY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Он срабатывает только если установлена кука &laquo;xhprof&raquo;, подключает необходимые библиотеки и устанавливает необходимые флаги (об этом чуть ниже).</p>
<p>2. Отредактируйте &laquo;/usr/local/xhprof/footer.php&raquo;:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;?php</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_COOKIE</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'xhprof'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">extension_loaded</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'xhprof'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$profiler_namespace</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'myapp'</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// namespace for your application</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$xhprof_data</span> <span style="color: #339933;">=</span> xhprof_disable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$xhprof_runs</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> XHProfRuns_Default<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$run_id</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xhprof_runs</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save_run</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xhprof_data</span><span style="color: #339933;">,</span> <span style="color: #000088;">$profiler_namespace</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// url to the XHProf UI libraries (change the host name and path)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$profiler_url</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://xhprof.test/index.php?run=%s&amp;source=%s'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$run_id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$profiler_namespace</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;a href=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$profiler_url</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;Profiler output&lt;/a&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Он срабатывает только если установлена кука &laquo;xhprof&raquo;, устанавливает неймспейс и сохраняет собранные показатели. После чего отрисовывает ссылку на веб-интерфейс <strong>XHProf</strong> для последующего анализа.</p>
<p>Теперь добавим в конец две строки в php.ini, для того чтобы эти два скрипта стартовали в начале и конце соответственно:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">auto_prepend_file = /usr/local/xhprof/header.php<br />
auto_append_file = /usr/local/xhprof/footer.php</div></div>
<p>Более подробная документация по <strong>XHProf</strong>: <noindex><a rel="nofollow" href="http://mirror.facebook.net/facebook/xhprof/doc.html" >http://mirror.facebook.net/facebook/xhprof/doc.html</a></noindex></p>
<h3>Проблема с dot</h3>
<p>Утилита dot это тот самый Graphviz и с ним бывает проблема, что-то типа того:</p>
<blockquote>
<p>Error: either we can not find profile data for run_id 4ced888563969 or the threshold 0.01 is too small or you do not have &#39;dot&#39; image generation utility installed.</p>
</blockquote>
<p>Сначала зайдите в &laquo;/usr/local/xhprof/xhprof_lib/utils/callgraph_utils.php&raquo; и найдите функцию &laquo;xhprof_generate_image_by_dot&raquo; (примерно 96 строка). Отредактируйте массив $descriptorspec, указав путь до файла лога:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; <span style="color: #000088;">$descriptorspec</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// stdin is a pipe that the child will read from</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc66cc;">0</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pipe&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// stdout is a pipe that the child will write to</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc66cc;">1</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pipe&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;w&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// stderr is a file to write to</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">//2 =&gt; array(&quot;file&quot;, &quot;/dev/null&quot;, &quot;a&quot;)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Путь до файла лога</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc66cc;">2</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;file&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;/var/log/xhprof.log&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;a+&quot;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Ну и теперь запускайте и смотрите лог, если у вас там:</p>
<blockquote>
<p>
dot: not found
</p>
</blockquote>
<p>То просто укажите полный путь до dot:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$cmd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot; /usr/local/bin/dot -T&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$type</span><span style="color: #339933;">;</span></div></div>
<p>Это примерно 107 строка того же файла &laquo;/usr/local/xhprof/xhprof_lib/utils/callgraph_utils.php&raquo;.</p>
<h3>Ссылки</h3>
<p>Посты, от которых я узнал о <strong>XHProf</strong>:</p>
<ul>
<li><noindex><a rel="nofollow" href="http://highload.com.ua/index.php/2009/08/21/xhprof-%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-php-%D0%BE%D1%82-facebook/" >XHprof&nbsp;&mdash; профилирование PHP от Facebook</a></noindex></li>
<li><noindex><a rel="nofollow" href="http://habrahabr.ru/blogs/php/78210/" >Профилирование PHP-кода</a></noindex></li>
</ul>
<p>Советую почитать:</p>
<ul>
<li><noindex><a rel="nofollow" href="http://tigor.com.ua/blog/2009/12/13/profiling-php-with-xhprof/" >XHprof – профайлер PHP от Facebook</a></noindex></li>
<li><noindex><a rel="nofollow" href="http://mirror.facebook.net/facebook/xhprof/doc.html" >XHProf Documentation</a></noindex></li>
</ul>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/OLx4RtgjU10" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2010/freebsd-xhprof-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2010/freebsd-xhprof-php/</feedburner:origLink></item>
		<item>
		<title>Nginx. Кеширование с помощью fastcgi_cache</title>
		<link>http://feedproxy.google.com/~r/adw0rd/~3/ypS4T2f1Bls/</link>
		<comments>http://adw0rd.ru/2010/nginx-fastcgi-cache/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 01:10:58 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[SSI]]></category>
		<category><![CDATA[Кеш]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=5750</guid>
		<description><![CDATA[Устал я от того что мой блог долго грузится, но менять движок с WordPress на что-либо другое пока нет времени, а переезд на новый более мощный сервер всё время затягивается и решил прикрутить кеширование на стороне Nginx. Так как блог работает на fastcgi, то буду использовать fastcgi_cache, если вы используете связку Nginx+Apache, то вам следует [...]]]></description>
			<content:encoded><![CDATA[<p><noindex><a href="/2010/nginx-fastcgi-cache/"><img src="http://adw0rd.ru/wp-content/uploads/2009/02/nginx.png"  alt="" title="nginx" width="242" height="64" style="padding:0 20px" class="alignright size-full wp-image-1374" /></a></noindex></p>
<p>Устал я от того что мой блог долго грузится, но менять движок с <strong>WordPress</strong> на что-либо другое пока нет времени, а переезд на новый более мощный сервер всё время затягивается и решил прикрутить кеширование на стороне <strong>Nginx</strong>. Так как блог работает на <strong>fastcgi</strong>, то буду использовать <strong>fastcgi_cache</strong>, если вы используете связку <a href="/2009/nginx-and-apache-install/">Nginx+Apache</a>, то вам следует использовать <strong>proxy_cache</strong>, как я понял там отличий особых нет.</p>
<p>Некоторые блоки мне всетаки надо оставить вне кеша, поэтому буду использовать <strong>ssi</strong>.</p>
<h3>Настройка</h3>
<p>У меня много хостов на одном сервере, но мне надо настроить кеш только для одного хоста. Определим кеш для моего блога в <strong>nginx.conf</strong>, секция <strong>http</strong>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fastcgi_cache_path <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>cache<span style="color: #000000; font-weight: bold;">/</span>nginx<span style="color: #000000; font-weight: bold;">/</span>adw0rd<br />
&nbsp; &nbsp; <span style="color: #007800;">levels</span>=<span style="color: #000000;">1</span>:<span style="color: #000000;">2</span><br />
&nbsp; &nbsp; <span style="color: #007800;">keys_zone</span>=adw0rd:16m<br />
&nbsp; &nbsp; <span style="color: #007800;">max_size</span>=256m<br />
&nbsp; &nbsp; <span style="color: #007800;">inactive</span>=1d;</div></div>
<p><span id="more-5750"></span><br />
Где,</p>
<blockquote>
<p><strong>fastcgi_cache_path <PATH></strong>&nbsp;&mdash; путь до каталога кеша, создайте его заблаговременно.<br />
<strong>levels=<LEVEL></strong>&nbsp;&mdash; разделять файлы кеша на сабкаталоги заданного уровня, то есть &laquo;1:2&raquo;&nbsp;&mdash; это так:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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><span style="color: #000000;">0</span><span style="color: #000000; font-weight: bold;">/</span>ab<span style="color: #000000; font-weight: bold;">/</span>b7f54b2df7773722d382f4809d650ab0</div></div>
<p>либо так, если не указывать LEVEL, то есть levels оставить пустым (levels=):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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>b7f54b2df7773722d382f4809d650ab0</div></div>
<p><strong>max_size</strong>&nbsp;&mdash; максимальный размер кеша.<br />
<strong>incative</strong>&nbsp;&mdash; время жизни кеша.
</p>
</blockquote>
<h4>Настройка виртуального хоста</h4>
<p>Я разделяю конфиги на основной (nginx.conf) и на хосты (adw0rd.conf, pyha.conf, etc). Сейчас мы разберемся с adw0rd.conf:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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; <span style="color: #666666; font-style: italic;"># Порт который слушаем</span><br />
&nbsp; &nbsp; listen <span style="color: #000000;">80</span>;<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Имя хоста</span><br />
&nbsp; &nbsp; server_name adw0rd.ru;<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Путь до htdocs (document_root)</span><br />
&nbsp; &nbsp; root <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>www;<br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># включаем использование ssi</span><br />
&nbsp; &nbsp; ssi on;<br />
<br />
&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; <span style="color: #666666; font-style: italic;"># Если такой файл не существует физически, то переходить на крайний аргумент, то есть @wordpress</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; try_files <span style="color: #007800;">$uri</span> <span style="color: #000000; font-weight: bold;">@</span>wordpress;<br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># обработчик для wordpress</span><br />
&nbsp; &nbsp; location <span style="color: #000000; font-weight: bold;">@</span>wordpress <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Проксируем на php-fpm</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass php-fpm;<br />
&nbsp; &nbsp; &nbsp; &nbsp; include fastcgi_params;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_FILENAME <span style="color: #007800;">$document_root</span><span style="color: #000000; font-weight: bold;">/</span>index.php;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_NAME <span style="color: #000000; font-weight: bold;">/</span>index.php;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Настройки кеширования</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_temp_path <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>nginx <span style="color: #000000;">1</span> <span style="color: #000000;">2</span>; <span style="color: #666666; font-style: italic;"># Каталог для хранение временных файлов</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_cache adw0rd; <span style="color: #666666; font-style: italic;"># Имя зоны кеша</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_cache_key <span style="color: #ff0000;">&quot;<span style="color: #007800;">$request_method</span>|<span style="color: #007800;">$host</span>|<span style="color: #007800;">$request_uri</span>&quot;</span>; <span style="color: #666666; font-style: italic;"># Из этих данных строится хеш</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_hide_header <span style="color: #ff0000;">&quot;Set-Cookie&quot;</span>; <span style="color: #666666; font-style: italic;"># Не передавать клиенту заголовки кук</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_cache_min_uses <span style="color: #000000;">1</span>; <span style="color: #666666; font-style: italic;"># Кол-во запросов, после которых ответ будет закеширован</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_cache_valid 10m; <span style="color: #666666; font-style: italic;"># Время жизни кеша</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_cache_use_stale error timeout invalid_header http_500; <span style="color: #666666; font-style: italic;"># Случаи при которых будет использоватся старый кеш</span><br />
<br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># обработчик для динамических данных на странице, ниже я покажу как юзать это</span><br />
&nbsp; &nbsp; location ~ ^<span style="color: #000000; font-weight: bold;">/</span>ssi<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass php-fpm;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_FILENAME <span style="color: #007800;">$document_root</span><span style="color: #007800;">$fastcgi_script_name</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; include fastcgi_params; &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Обработчик *.php файлов, например &quot;wp-comments-post.php&quot;</span><br />
&nbsp; &nbsp; location ~ \.php$ <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># если файл физически не существует, то переходим в @wordpress</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; try_files <span style="color: #007800;">$uri</span> <span style="color: #000000; font-weight: bold;">@</span>wordpress;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># иначе обрабатываем запрос</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass php-fpm;<br />
&nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param SCRIPT_FILENAME <span style="color: #007800;">$document_root</span><span style="color: #007800;">$fastcgi_script_name</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; include fastcgi_params;<br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Обо всех директивах можете прочитать в оф. доке <noindex><a rel="nofollow" href="http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html" >Директивы модуля ngx_http_fastcgi_module</a></noindex>.</p>
<h3>Тестирование</h3>
<p>Перезагружаем Nginx:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nginx <span style="color: #660033;">-s</span> reload</div></div>
<p>Для тестирования кеша я встроил в шаблон html-комментарий, который формирую так:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;!-- cache: <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span> --&gt;</div></div>
<p>И теперь вижу в сорце странице закешировалась страница или нет.</p>
<h3>Вставка динамических блоков при помощи SSI</h3>
<p>Отредактируйте шаблон своей страницы и вставьте нечто подобное:</p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">&lt;!-- uncached_data: &lt;!--# include virtual=&quot;/ssi/uncached.php&quot; wait=&quot;no&quot; --&gt;</span> --&gt;</div></div>
<p>Теперь приведите файл &laquo;/ssi/uncached.php&raquo; к следующему виду:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;?php</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Так как у нас есть обработчик действующий для /ssi/* и он не отдает кешированные данные, то у нас будет подгружатся динамика, все просто! :)</p>
<h3>Дополнение</h3>
<p>Раздел добавлен 8 августа 2011 г., чтобы дополнить эту статью недостоющими материалами. В основном причиной была статья <noindex><a rel="nofollow" href="http://habrahabr.ru/blogs/nginx/124684/" >Прозрачное кэширование в nginx для всех и каждого</a></noindex>, спасибо авторам.</p>
<h4>Директива fastcgi_ignore_headers для игнорирования инструкци от FastCGI-сервера</h4>
<p>Директива fastcgi_ignore_headers запрещает обработку некоторых строк заголовка из ответа FastCGI-сервера.<br />
В директиве можно указать строки &laquo;X-Accel-Redirect&raquo;, &laquo;X-Accel-Expires&raquo;, &laquo;Expires&raquo; и &laquo;Cache-Control&raquo;.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fastcgi_ignore_headers Expires Cache-Control;</div></div>
<p>То есть указываем Nginx кэшировать страницы в любом случае, независимо от заголовков кэширования выставленных FasCGI-сервером.</p>
<h4>Директивы fastcgi_cache_bypass и fastcgi_no_cache</h4>
<p>Директива задаёт условия, при которых <strong>ответ не будет браться из кэша</strong>.<br />
Если значение хотя бы одной из строк переменных не пустое и не равно &laquo;0&raquo;, то ответ не берётся из кэша:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fastcgi_cache_bypass $cookie_session $cookie_nocache;</div></div>
<p>Директива задаёт условия, при которых <strong>ответ не будет сохраняться в кэш</strong>.<br />
Если значение хотя бы одной из строк переменных не пустое и не равно &laquo;0&raquo;, то ответ не будет сохранён:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fastcgi_no_cache $cookie_session $cookie_nocache;</div></div>
<h4>Управление кеширование через заголовок X-Accel-Expires</h4>
<p>Будем управлять кеширование из PHP:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;?php</span><br />
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;X-Accel-Expires: <span style="color: #006699; font-weight: bold;">$seconds</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ставим на $seconds секунд</span><br />
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;X-Accel-Expires: 0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// или отключаем кеширование для определенной страницы</span></div></div>
<h4>Принудительное обновление кэша</h4>
<p>Обновим наш bypass,  добавим еще одну переменную для заголовка &laquo;X-Update&raquo;:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">fastcgi_cache_bypass $cookie_session $http_x_update;</div></div>
<p>Ну а теперь обновим кеш:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">curl -s -o /dev/null -H &quot;X-Update: 1&quot; example.com</div></div>
<p>Как и рекомендуют авторы статьи необходимо изменить &laquo;$http_x_update&raquo; и &laquo;X-Update&raquo; на что-то своё, чтобы скрипткидесы не баловались.</p>
<h3>Полезные материалы</h3>
<p>Вот небольшой список статей, который вам могут пригодится:</p>
<ul>
<li><noindex><a rel="nofollow" href="http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html" >Директивы модуля ngx_http_fastcgi_module</a></noindex> (оф. документация)</li>
<li>Описание модуля <noindex><a rel="nofollow" href="http://wiki.nginx.org/NginxHttpFcgiModule" >NginxHttpFcgiModule</a></noindex> на wiki.nginx.org</li>
<li><noindex><a rel="nofollow" href="http://habrahabr.ru/blogs/nginx/71501/" >Кеширование FastCGI-запросов в nginx</a></noindex></li>
<li><noindex><a rel="nofollow" href="http://dklab.ru/chicken/nablas/56.html" >56. Подводные камни при использовании кэширования в nginx</a></noindex></li>
<li><a href="/2010/ubuntu-php53/">Ubuntu. Рабочее окружение Nginx+PHP5.3+FPM+MySQL</a></li>
<li><a href="/2010/nginx-and-php-fpm/">Nginx. Использование PHP в режиме FastCGI с помощью php-fpm</a></li>
<li><a href="/2009/nginx-gzip/">Настройка Gzip в Nginx</a></li>
<li><a href="/2009/nginx-and-apache-install/">Nginx и Apache2. Установка и быстрая настройка!</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/adw0rd/~4/ypS4T2f1Bls" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2010/nginx-fastcgi-cache/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://adw0rd.ru/2010/nginx-fastcgi-cache/</feedburner:origLink></item>
	</channel>
</rss>

