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

<channel>
	<title>The WebDevil &#187; apache</title>
	<atom:link href="http://dmitry.shaposhnik.name/category/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://dmitry.shaposhnik.name</link>
	<description>Enjoy development</description>
	<lastBuildDate>Mon, 24 May 2010 01:29:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Monitoring apache with GOD</title>
		<link>http://dmitry.shaposhnik.name/2009/11/30/monitoring-apache-with-god/</link>
		<comments>http://dmitry.shaposhnik.name/2009/11/30/monitoring-apache-with-god/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 09:38:07 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=301</guid>
		<description><![CDATA[&#8220;Посчастливилось&#8221; мне заполучить VPS с сайтом на битриксе. Из-за Zend Optimizer (сорсы покриптованы) нет возможности установить APC. Вроде бы умеет xcache работать вместе с ним, еще не проверял. Периодически апач съедает всю память, свап, и машинка умирает окончательно. Хуже то, что апач работает с mpm-prefork, то есть он порождает не потоки, а процессы. И при [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Посчастливилось&#8221; мне заполучить VPS с сайтом на битриксе. Из-за Zend Optimizer (сорсы покриптованы) нет возможности установить APC. Вроде бы умеет xcache работать вместе с ним, еще не проверял. Периодически апач съедает всю память, свап, и машинка умирает окончательно. Хуже то, что апач работает с mpm-prefork, то есть он порождает не потоки, а процессы. И при мониторинге виден родительский процесс, который занимает всего 13М памяти. </p>
<p>Вначале для рестарта апача в период дикого роста я пытался использовать monit, но результат был неадекватный &#8211; при указании memory > 90% он убивал его когда памяти была занята всего треть.</p>
<p>После <a href="http://mmonit.com/monit/">monit</a> я попробовал использовать <a href="http://god.rubyforge.org/">god</a>. Но он мониторит только один процесс, без его чайлдов. Вроде бы есть проект <a href="http://github.com/arya/bluepill/">bluepill</a>, который идейно растет из god. Но примеры найти оказалось проблематично, да и в процессе решил таки остаться с god.</p>
<p>Среди условий у god была обнаружена фича &#8211; :lambda. После недолгого размышления на bash была написана строка, показывающая занятый апачем процент памяти:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ps -e -o pmem,cmd | grep apache2 | grep -v grep | awk '{sum += $1;}END{print sum;}'</div></div>
<p>что сразу переродилось в</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">w.restart_if do |restart|<br />
&nbsp; restart.condition(:lambda) do |c|<br />
&nbsp; &nbsp; c.lambda = lambda{`ps -e -o pmem,cmd | grep apache2 | grep -v grep | awk '{sum += \$1;}END{print sum;}'`.to_i &gt; 90}<br />
&nbsp; end<br />
end</div></div>
<p>Итого конфиг для апача выглядит так:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">God::Contacts::Email.delivery_method = :sendmail<br />
<br />
God.contact(:email) do |c|<br />
&nbsp; c.name = 'maintainer'<br />
&nbsp; c.email = 'pager@sms.gate.isp'<br />
end<br />
<br />
<br />
God::Contacts::Email.format = lambda do |name, email, message, time, priority, category, host|<br />
&nbsp; &lt; &lt;-EOF<br />
From: god<br />
To: #{name} &lt;#{email}&gt;<br />
Subject: Alert!<br />
Date: #{Time.now.httpdate}<br />
Message-Id: &lt; #{rand(1000000000).to_s(36)}.#{$$}.#{self.message_settings[:from]}&gt;<br />
<br />
#{host} (#{priority}): #{message}<br />
&nbsp; EOF<br />
end<br />
<br />
<br />
%w{80}.each do |port|<br />
&nbsp; God.watch do |w|<br />
&nbsp; &nbsp; w.name = &quot;apache2&quot;<br />
&nbsp; &nbsp; w.pid_file = &quot;/var/run/apache2.pid&quot;<br />
&nbsp; &nbsp; w.interval = 10.seconds # default<br />
&nbsp; &nbsp; w.start = &quot;/etc/init.d/apache2 start&quot;<br />
&nbsp; &nbsp; w.stop = &quot;/etc/init.d/apache2 stop&quot;<br />
&nbsp; &nbsp; w.restart = &quot;/etc/init.d/apache2 restart&quot;<br />
&nbsp; &nbsp; w.start_grace = 10.seconds<br />
&nbsp; &nbsp; w.restart_grace = 20.seconds<br />
<br />
&nbsp; &nbsp; w.start_if do |start|<br />
&nbsp; &nbsp; &nbsp; start.condition(:process_running) do |c|<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.interval = 5.seconds<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.running = false<br />
&nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; end<br />
&nbsp; &nbsp; w.restart_if do |restart|<br />
&nbsp; &nbsp; &nbsp; restart.condition(:lambda) do |c|<br />
&nbsp; &nbsp; &nbsp; &nbsp; c.lambda = lambda{`ps -e -o pmem,cmd | grep apache2 | grep -v grep | awk '{sum += \$1;}END{print sum;}'`.to_i &gt; 90}<br />
&nbsp; &nbsp; &nbsp; &nbsp; c.notify = 'maintainer'<br />
&nbsp; &nbsp; &nbsp; end<br />
&nbsp; &nbsp; end<br />
&nbsp; end<br />
end</div></div>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/11/30/monitoring-apache-with-god/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LAMP through fcgid with suexec</title>
		<link>http://dmitry.shaposhnik.name/2009/08/11/lamp-through-fcgid-with-suexec/</link>
		<comments>http://dmitry.shaposhnik.name/2009/08/11/lamp-through-fcgid-with-suexec/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 08:11:49 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[webtech]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=294</guid>
		<description><![CDATA[Взглянем на Apache+mod_php. Плюсы:

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

Минусы: 

mpm_prefork далеко не самый быстрый
все работает под одним пользователем (да-да, можно накрутить mod_itk)

В попытках сделать секьюрно и по возможности быстро я решил скрутить apache (mpm_worker) + mod_fcgid + suexec.
Сам по себе CGI очень небыстр за счет того, что при каждом запросе подымается интерпретатор. [...]]]></description>
			<content:encoded><![CDATA[<p>Взглянем на Apache+mod_php. Плюсы:</p>
<ul>
<li>настраивается максимально просто</li>
<li>интерпретатор стартует вместе с каждым форком апача</li>
</ul>
<p>Минусы: </p>
<ul>
<li>mpm_prefork далеко не самый быстрый</li>
<li>все работает под одним пользователем (да-да, можно накрутить mod_itk)</li>
</ul>
<p>В попытках сделать секьюрно и по возможности быстро я решил скрутить apache (mpm_worker) + <a href="http://fastcgi.coremail.cn/">mod_fcgid</a> + suexec.<br />
Сам по себе CGI очень небыстр за счет того, что при каждом запросе подымается интерпретатор. FastCGI быстрее, так как интерпретатор держится отдельным процессом. А mod_fcgid &#8211; модуль, бинарно совместимый с mod_fastcgi, с новой стратегией управления процессами.</p>
<p>Suexec в свою очередь позволяет выполнять CGI/FastCGI/SSI с указанными uid/gid. Да-да, в системе будут заводиться реальные пользователи.</p>
<p>Расстановкой прав можно добиться того, что даже взломав один сайт злоумышленник не сможет увидеть другие сайты.<br />
<span id="more-294"></span><br />
Приступим.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">apt-get install apache2-mpm-worker apache2-suexec ache2-threaded-dev libapache2-mod-fcgid php5-cgi</div></div>
<p>Теперь когда у нас все есть, создадим скелет для будущих площадок.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mkdir -p /root/web/skel<br />
cd /root/web/skel<br />
mkdir {cgi-bin,etc,logs,tmp,www}<br />
chmod 770 tmp<br />
chmod 751 {etc,logs,www}<br />
cp /etc/php5/cgi/php.ini ./etc</div></div>
<p>Правим php.ini на предмет вывода ошибок и прочих мелких твиков.<br />
Теперь сделаем враппер для самого обработчика (cgi-bin/php-cgi):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$CGI_BIN_DIR</span><br />
<span style="color: #007800;">PHP_INI</span>=..<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.ini<br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$PHP_INI</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #007800;">PHP_INI</span>=<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>cgi<span style="color: #000000; font-weight: bold;">/</span>php.ini<br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php5-cgi <span style="color: #660033;">-c</span> <span style="color: #007800;">$PHP_INI</span></div></div>
<p>И делаем</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">chown -R 755 cgi-bin<br />
cd /root/web<br />
touch {adduser,awstats,vhost}.skel<br />
touch add_site.sh &amp;&amp; chmod +x add_site.sh</div></div>
<p><strong>adduser.skel</strong>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">DSHELL</span>=<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">false</span><br />
<span style="color: #007800;">DHOME</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<br />
<span style="color: #007800;">GROUPHOMES</span>=no<br />
<span style="color: #007800;">LETTERHOMES</span>=no<br />
<span style="color: #007800;">SKEL</span>=<span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #000000; font-weight: bold;">/</span>web<span style="color: #000000; font-weight: bold;">/</span>skel<br />
<span style="color: #007800;">FIRST_SYSTEM_UID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_SYSTEM_UID</span>=<span style="color: #000000;">2999</span><br />
<span style="color: #007800;">FIRST_SYSTEM_GID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_SYSTEM_GID</span>=<span style="color: #000000;">2999</span><br />
<span style="color: #007800;">FIRST_UID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_UID</span>=<span style="color: #000000;">29999</span><br />
<span style="color: #007800;">FIRST_GID</span>=<span style="color: #000000;">2000</span><br />
<span style="color: #007800;">LAST_GID</span>=<span style="color: #000000;">2999</span><br />
<span style="color: #007800;">USERGROUPS</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span><br />
<span style="color: #007800;">USERS_GID</span>=<span style="color: #000000;">100</span><br />
<span style="color: #007800;">DIR_MODE</span>=0751<br />
<span style="color: #007800;">SETGID_HOME</span>=no<br />
<span style="color: #007800;">QUOTAUSER</span>=<span style="color: #ff0000;">&quot;&quot;</span><br />
<span style="color: #007800;">SKEL_IGNORE_REGEX</span>=<span style="color: #ff0000;">&quot;dpkg-(old|new|dist)&quot;</span></div></div>
<p><strong>awstats.skel</strong>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">LogFile</span>=<span style="color: #ff0000;">&quot;/var/www/#USER/logs/#SITE-access.log&quot;</span><br />
<span style="color: #007800;">SiteDomain</span>=<span style="color: #ff0000;">&quot;#SITE&quot;</span><br />
<span style="color: #007800;">HostAliases</span>=<span style="color: #ff0000;">&quot;localhost 127.0.0.1 REGEX[#SITE$]&quot;</span><br />
Include <span style="color: #ff0000;">&quot;/etc/awstats/awstats.conf.local&quot;</span></div></div>
<p><strong>vhost.skel</strong>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><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;">&lt;</span>virtualhost <span style="color: #000000; font-weight: bold;">*&gt;</span><br />
&nbsp; &nbsp; ServerName <span style="color: #666666; font-style: italic;">#SITE</span><br />
&nbsp; &nbsp; ServerAlias www.<span style="color: #666666; font-style: italic;">#SITE</span><br />
&nbsp; &nbsp; DocumentRoot <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #666666; font-style: italic;">#USER/www/#SITE/public_html</span><br />
<br />
&nbsp; &nbsp; SuexecUserGroup <span style="color: #666666; font-style: italic;">#USER #USER</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; ScriptAlias <span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #666666; font-style: italic;">#USER/cgi-bin/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;</span>directory <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #666666; font-style: italic;">#USER/www/#SITE/public_html&gt;</span><br />
&nbsp; &nbsp; Options <span style="color: #660033;">-Indexes</span> +ExecCGI<br />
&nbsp; &nbsp; AllowOverride All<br />
&nbsp; &nbsp; AddHandler fcgid-script .php<br />
&nbsp; &nbsp; FCGIWrapper <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #666666; font-style: italic;">#USER/cgi-bin/php-cgi .php</span><br />
&nbsp; &nbsp; Order allow,deny<br />
&nbsp; &nbsp; Allow from all<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;/</span>directory<span style="color: #000000; font-weight: bold;">&gt;</span><br />
<br />
&nbsp; &nbsp; ErrorLog <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #666666; font-style: italic;">#USER/logs/#SITE-error.log</span><br />
&nbsp; &nbsp; CustomLog <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #666666; font-style: italic;">#USER/logs/#SITE-access.log combined</span><br />
<br />
&nbsp; &nbsp; SetEnv AWSTATS_FORCE_CONFIG <span style="color: #666666; font-style: italic;">#SITE</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;</span>location <span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</span>awstats.pl <span style="color: #000000; font-weight: bold;">&gt;</span><br />
&nbsp; &nbsp; AuthUserFile <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #666666; font-style: italic;">#USER/etc/awstats.passwd</span><br />
&nbsp; &nbsp; AuthName <span style="color: #ff0000;">&quot;Website stats for #SITE&quot;</span><br />
&nbsp; &nbsp; AuthType Basic<br />
&nbsp; &nbsp; require valid-user<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">&lt;/</span>location<span style="color: #000000; font-weight: bold;">&gt;</span><br />
<span style="color: #000000; font-weight: bold;">&lt;/</span>virtualhost<span style="color: #000000; font-weight: bold;">&gt;</span></div></div>
<p><strong>add_site.sh</strong>:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #007800;">$1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> <span style="color: #007800;">$2</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Oops. Some param not given.&quot;</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #666666; font-style: italic;"># If no such user exists - add one right now</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$2</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; adduser <span style="color: #660033;">--conf</span> .<span style="color: #000000; font-weight: bold;">/</span>adduser.skel <span style="color: #660033;">--disabled-login</span> <span style="color: #660033;">--gecos</span> <span style="color: #ff0000;">''</span> <span style="color: #007800;">$2</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Buld generic folders</span><br />
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$2</span><span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$1</span><span style="color: #000000; font-weight: bold;">/</span>public_html<br />
<span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> <span style="color: #007800;">$2</span>:<span style="color: #007800;">$2</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$2</span><span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$1</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Build generic vhost for apache</span><br />
<span style="color: #c20cb9; font-weight: bold;">cat</span> vhost.skel <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/#USER/<span style="color: #007800;">${2}</span>/g;s/#SITE/<span style="color: #007800;">${1}</span>/g&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #800000;">${2}</span>_<span style="color: #800000;">${1}</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Activate vhost</span><br />
a2ensite <span style="color: #800000;">${2}</span>_<span style="color: #800000;">${1}</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Build generic awstats config</span><br />
<span style="color: #c20cb9; font-weight: bold;">cat</span> awstats.skel <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/#USER/<span style="color: #007800;">${2}</span>/g;s/#SITE/<span style="color: #007800;">${1}</span>/g&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>awstats<span style="color: #000000; font-weight: bold;">/</span>awstats.<span style="color: #800000;">${1}</span>.conf<br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Restart apache...&quot;</span><br />
apache2ctl configtest <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> apache2ctl restart</div></div>
<p>Вот таким нехитрым образом можно добавить сайт:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cd /root/web<br />
./add_site example.org web_example</div></div>
<p>В результате будет создан пользователь web_example и у него сайт &#8211; example.org.</p>
<h3>Tip</h3>
<p>Иногда надо позволить скрипту выполяться боее 30 секунд. Думаете для этого достаточно подправить php.ini? Нет, в таком случае fcgid отстрелит скрипт по достижении 40 секунд. Для этих случаев в конфиге vhost&#8217;а требуется задать значение <strong>IPCCommTimeout</strong> в секундах (например, 300). Есть баг &#8211; глобальное значение отчего-то не хочет применяться к vhost&#8217;у, потому надо указать его непосредственно в vhost&#8217;е.</p>
<p>В общем и целом &#8211; конфиги показал, идею донес (надеюсь). Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/08/11/lamp-through-fcgid-with-suexec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache, suexec and awstats</title>
		<link>http://dmitry.shaposhnik.name/2009/07/09/apache-suexec-and-awstats/</link>
		<comments>http://dmitry.shaposhnik.name/2009/07/09/apache-suexec-and-awstats/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:41:24 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=289</guid>
		<description><![CDATA[Столкнулся сегодня с проблемой: переменные, установленные через SetEnv в апаче не видны в cgi-скриптах.
Поиски произростания ног привели к suEXEC, который фильтрует набор переменных окружения. И, естественно, в списке разрешенных нет ничего про AWSTATS_FORCE_CONFIG.
Проблему решил следующим образом:
mkdir ~/build_suexec &#38;&#38; cd ~/build_suexec
wget http://svn.apache.org/repos/asf/httpd/httpd/trunk/support/suexec.&#123;c,h&#125;
Далее в suexec.c находим внутри большой список переменных, и добавляем туда то, что нужно:
# diff [...]]]></description>
			<content:encoded><![CDATA[<p>Столкнулся сегодня с проблемой: переменные, установленные через SetEnv в апаче не видны в cgi-скриптах.<br />
Поиски произростания ног привели к suEXEC, который фильтрует набор переменных окружения. И, естественно, в списке разрешенных нет ничего про AWSTATS_FORCE_CONFIG.<br />
Проблему решил следующим образом:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>build_suexec <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>build_suexec<br />
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>svn.apache.org<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>asf<span style="color: #000000; font-weight: bold;">/</span>httpd<span style="color: #000000; font-weight: bold;">/</span>httpd<span style="color: #000000; font-weight: bold;">/</span>trunk<span style="color: #000000; font-weight: bold;">/</span>support<span style="color: #000000; font-weight: bold;">/</span>suexec.<span style="color: #7a0874; font-weight: bold;">&#123;</span>c,h<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>
<p>Далее в suexec.c находим внутри большой список переменных, и добавляем туда то, что нужно:</p>
<div class="codecolorer-container diff default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="diff codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># diff ./suexec.c.orig ./suexec.c <br />
<span style="color: #440088;">77a78</span><br />
<span style="color: #00b000;">&gt; &nbsp; &nbsp; &quot;AWSTATS_FORCE_CONFIG=&quot;,</span></div></div>
<p>И собираем получившееся такой командой (при условии что установлены пакеты apache2-threaded-dev и build-essential):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gcc -DLOG_EXEC='&quot;/var/log/apache2/suexec.log&quot;' \<br />
&nbsp; &nbsp; -DAP_DOC_ROOT='&quot;/var/www&quot;' \<br />
&nbsp; &nbsp; -DAP_GID_MIN=100 \<br />
&nbsp; &nbsp; -DAP_HTTPD_USER='&quot;www-data&quot;' \<br />
&nbsp; &nbsp; -DAP_LOG_EXEC='&quot;/var/log/apache2/suexec.log&quot;' \<br />
&nbsp; &nbsp; -DAP_SAFE_PATH='&quot;/usr/local/bin:/usr/bin:/bin&quot;' \<br />
&nbsp; &nbsp; -DAP_UID_MIN=100 \<br />
&nbsp; &nbsp; -DAP_USERDIR_SUFFIX='&quot;public_html&quot;' \<br />
&nbsp; &nbsp; -I/usr/include/apr-1.0 \<br />
&nbsp; &nbsp; -I/usr/include/apache2 \<br />
&nbsp; &nbsp; -o suexec suexec.c &amp;&amp; chmod 4755 suexec</div></div>
<p>В убунту надо будет заменить получившимся бинарником враппер /usr/lib/apache2/suexec.</p>
<p>PS: да, для того чтоб у пользователя работал awstats при suexec, который ставит ограничение на скрипты в /var/www, да еще и разыменовывает симлинки, достаточно в cgi-bin создать простейший враппер (awstats.pl):</p>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/usr/bin/env perl</span><br />
<br />
<a href="http://perldoc.perl.org/functions/exec.html"><span style="color: #000066;">exec</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'/usr/lib/cgi-bin/awstats.pl'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Хотя можно (по идее!) в AP_DOC_ROOT прописать &#8216;&#8221;/var/www,/usr/lib/cgi-bin&#8221;&#8216;.</p>
<p>PS2: в списке разрешенных переменных окружения можно задавать множества &#8211; например, &#8220;AWSTATS_&#8221;.</p>
<p>PS3: посоветовал бы кто-то настраиваемую замену для злого suEXEC &#8211; у него-то все опции при компиляции задаются.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/07/09/apache-suexec-and-awstats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LVM Rocks</title>
		<link>http://dmitry.shaposhnik.name/2009/03/01/lvm-rocks/</link>
		<comments>http://dmitry.shaposhnik.name/2009/03/01/lvm-rocks/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 23:18:18 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Newbie]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[webtech]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=251</guid>
		<description><![CDATA[Давно заметил что в Ubuntu (server edition) во время инсталляции начали предлагать использовать LVM. Но я все не решался поставить production на него. Затем пообщался со теми кто его использовал, почитал доку &#8211; и последний год стал его использовать, так как постиг скрытую в нем мощь  

Допустим, у нас есть простенький бюджетный сервер. Мы [...]]]></description>
			<content:encoded><![CDATA[<p>Давно заметил что в Ubuntu (server edition) во время инсталляции начали предлагать использовать LVM. Но я все не решался поставить production на него. Затем пообщался со теми кто его использовал, почитал доку &#8211; и последний год стал его использовать, так как постиг скрытую в нем мощь <img src='http://dmitry.shaposhnik.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-251"></span></p>
<p>Допустим, у нас есть простенький бюджетный сервер. Мы развернули новое приложение, и его база стала расти весьма стремительно. Итого &#8211; база, веб-файлы и система живут на одном физическом диске.</p>
<p>Был куплен диск WD Razor, и на него перенесли базу. Нагрузка диска (<tt>iostat -x -m 1</tt>) составила 1-2%. Решено перенести туда же и веб-файлы, однако решение это пришло лишь через пару дней. Так что получилось наглядно продемонстрировать возможности LVM.</p>
<h3>Part1. Creating&#8230;</h3>
<p>Когда поставили разор на нем создали один раздел &#8211; LVM:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># fdisk -l</span><br />
<br />
Disk <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb: <span style="color: #000000;">74.3</span> GB, <span style="color: #000000;">74355769344</span> bytes<br />
<span style="color: #000000;">255</span> heads, <span style="color: #000000;">63</span> sectors<span style="color: #000000; font-weight: bold;">/</span>track, <span style="color: #000000;">9039</span> cylinders<br />
Units = cylinders of <span style="color: #000000;">16065</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000;">512</span> = <span style="color: #000000;">8225280</span> bytes<br />
Disk identifier: 0x00000000<br />
<br />
&nbsp; &nbsp;Device Boot &nbsp; &nbsp; &nbsp;Start &nbsp; &nbsp; &nbsp; &nbsp; End &nbsp; &nbsp; &nbsp;Blocks &nbsp; Id &nbsp;System<br />
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">1</span> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">9039</span> &nbsp; &nbsp;<span style="color: #000000;">72605736</span> &nbsp; 8e &nbsp;Linux LVM</div></div>
<p>Пару слов об организации LVM.<br />
<strong>Уровень 1</strong>: volume group (vg). Это наивысший уровень абстракции, объединяющий в себе logical volumes и physical volumes.<br />
<strong>Уровень 2</strong>: physical volume (pv). Это некое блочное устройство, способное хранить данные (HDD, RAID, &#8230;)<br />
<strong>Уровень 3</strong>: logical volume (lv). Это эквивалент раздела на жестком диске.</p>
<p>Таким образом в группу добавляются физические тома (pv), и потом во всем этом пространстве свободного места создаются разделы (lv), на которых уже создается файловая система.</p>
<p>Итак, сначала создавался pv:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">pvcreate <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1</div></div>
<p>Затем vg:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">vgcreate sys_vg <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1</div></div>
<p>И затем на все свободное место указанного pv (/dev/sdb1) создали lv с именем var_lib_mysql:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lvcreate <span style="color: #660033;">-L</span> <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span>PVS -nvar_lib_mysql sys_vg <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb1</div></div>
<p>Дело за малым:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mkreiserfs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql stop<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<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> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<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>.<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<br />
<span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> mysql:mysql <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql start</div></div>
<p>Вот собственно и почти все. Последний штрих &#8211; прописать монтирование раздела в fstab, дабы это происходило при загрузке автоматом. Можно скучно сделать это через blkid, увидеть там нужный UUID (например, f6946e54-c7d6-4688-8fac-05dcb1bf9973), скопировать его, открыть /etc/fstab и вставить туда строку вида:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">UUID</span>=f6946e54-c7d6-<span style="color: #000000;">4688</span>-8fac-05dcb1bf9973 &nbsp; <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql reiserfs defaults <span style="color: #000000;">0</span> <span style="color: #000000;">2</span></div></div>
<p>а можно сделать так:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>UUID=<span style="color: #780078;">`blkid | grep sys_vg-var_lib_mysql | sed -r 's/.*UUID=&quot;([^&quot;]*).*/\1/i'`</span><span style="color: #000099; font-weight: bold;">\t</span>/var/lib/mysql reiserfs defaults 0 2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>fstab</div></div>
<p>Да, если сделать umount /var/lib/mysql &#038;&#038; mount /var/lib/mysql до ребута &#8211; то /dev/disk/by-uuid/f6946e54-c7d6-4688-8fac-05dcb1bf9973 (или какой там получится) там еще не будет. Для того чтоб появился до ребута надо перезапустить udev:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>udev restart</div></div>
<h3>Part2. Resizing&#8230;</h3>
<p>Как я говорил раньше, с опозданием пришла мысль о том, что неплохо бы вынести и статические файлы на этот же винт. И сделать это совсем просто! Для этого от того lv что был создан раньше (и именуется var_lib_mysql) откусим немного места.</p>
<p>Сначала остановим все службы (говорят, reiserfs увеличивается/уменьшается без проблем налету, но я этого пока не пробовал на себе):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql stop<br />
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql</div></div>
<p>Затем уменьшим файловую систему, а затем и lv на 20ГБ:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">resize_reiserfs <span style="color: #660033;">-s-20G</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql<br />
lvreduce <span style="color: #660033;">-L-20G</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql</div></div>
<p>На всякий случай я предпочел проверить фс на ошибки (а вдруг!):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">reiserfsck <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_lib_mysql</div></div>
<p>Ну и возвращаем обратно MySQL:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>mysql<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql start</div></div>
<p>Теперь создадим lv для веб-файлов, и так как их намного меньше 20ГБ, я решил оставить 5ГБ про запас, никому их не присвоив. Потом можно будет налету добавить туда где закончится место.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lvcreate <span style="color: #660033;">-L</span> 15G -nvar_www sys_vg<br />
mkreiserfs <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_www</div></div>
<p>Далее &#8211; перенос файлов:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nginx stop<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 stop<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_www <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<br />
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>sys_vg-var_www <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 start<br />
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>nginx start</div></div>
<p>И опять не забываем про fstab:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>UUID=<span style="color: #780078;">`blkid | grep sys_vg-var_www | sed -r 's/.*UUID=&quot;([^&quot;]*).*/\1/i'`</span><span style="color: #000099; font-weight: bold;">\t</span>/var/lib/mysql reiserfs defaults 0 2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>fstab</div></div>
<p>По материалам:</p>
<ol>
<li><a href="http://wiki.linuxquestions.org/wiki/LVM#example">http://wiki.linuxquestions.org/wiki/LVM#example</a></li>
<li><a href="http://www.tldp.org/HOWTO/LVM-HOWTO/reducelv.html">http://www.tldp.org/HOWTO/LVM-HOWTO/reducelv.html</a></li>
</ol>
<p>PS: после изменения размера мог измениться UUID для lv var_lib_mysql, хотя я и не уверен в этом. Но проверить не помешает.<br />
PS2: если работаете удаленно &#8211; не забывайте про <a href="http://www.gnu.org/software/screen/screen.html">screen</a>.<br />
PS3: писалось по памяти, так что могут быть некоторые неточности. Тупой копипаст без вовлечения мыслительного процесса чреват боком. Я предупредил <img src='http://dmitry.shaposhnik.name/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2009/03/01/lvm-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Server moving adventures</title>
		<link>http://dmitry.shaposhnik.name/2008/08/07/server-moving-adventures/</link>
		<comments>http://dmitry.shaposhnik.name/2008/08/07/server-moving-adventures/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 01:45:28 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Newbie]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Общее]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/?p=215</guid>
		<description><![CDATA[Второй день занимаюсь переездом содержимого одного сервера на другой. Другой &#8211; VPS под FreeBSD (привет, ДЦ Воля).
В общем, это последний раз когда я до оплаты сказал что он неплох. Теперь только реальные сервера. Ну и может VDS под Linux&#8230; В общем, именно эта реализация ужасна. Меня мало интересует как и что &#8211; факт налицо.


Первая ласточка [...]]]></description>
			<content:encoded><![CDATA[<p>Второй день занимаюсь переездом содержимого одного сервера на другой. Другой &#8211; VPS под FreeBSD (привет, ДЦ Воля).</p>
<p>В общем, это последний раз когда я до оплаты сказал что он неплох. Теперь только реальные сервера. Ну и может VDS под Linux&#8230; В общем, именно эта реализация ужасна. Меня мало интересует как и что &#8211; факт налицо.<br />
<span id="more-215"></span><br />
<img src="http://dmitry.shaposhnik.name/files/2008/08/mysql-logo.png" alt="" title="mysql-logo" width="200" height="103" class="aligncenter size-medium wp-image-218" /><br />
Первая ласточка &#8211; mysql. Сообщение о нехватке памяти в логах:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">080806 13:39:10 [ERROR] /usr/local/libexec/mysqld: Out of memory (Needed 1043824 bytes)</div></div>
<p>Судя по найденому в гугле и попыткам что-либо изменить, это вылазит из-за дефолтного в i386 FreeBSD значения максимального количества памяти на процесс. И изменить его у меня не удалось. В результате куцые буфера, и веселые запросы толпятся в очереди, а MySQL уверенно пухнет. И опухает:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[root@vps ~]# ps axu | grep mysql<br />
bash: fork: Cannot allocate memory</div></div>
<p>Причем, такое поведение я уже встречал ранее. Дважды. Тогда еще и файловые дескрипторы заканчивались (привет phpbb с кучей плагинов).</p>
<p>Но все был бы ничего, однако базы в большинстве своем живут в MyISAM, но самая тяжелая &#8211; как и полагается, в InnoDB. И вот любой запрос с джоинами на ней ложил тачку. </p>
<p>Во время разборок с мускулем был применен киллер, найденый в темном переулке на форумах мускуля:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/usr/local/bin/php<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <br />
<a href="http://www.php.net/mysql_connect"><span style="color: #990000;">mysql_connect</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'pass'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/mysql_query"><span style="color: #990000;">mysql_query</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SHOW FULL PROCESSLIST&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #339933;">=</span><a href="http://www.php.net/mysql_fetch_array"><span style="color: #990000;">mysql_fetch_array</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000088;">$process_id</span><span style="color: #339933;">=</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;Id&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;Time&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">10</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'User'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">'root'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$sql</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;KILL <span style="color: #006699; font-weight: bold;">$process_id</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span style="color: #990000;">mysql_query</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Теперь появилось время на мысли. <a href="http://mtop.sourceforge.net/">mtop</a> помог отследить, что во всем виновата одна эта БД. После запора в ней более-менее тяжелые запросы в других БД тоже застряют.</p>
<p>Результатом был переезд этой большой базы на другой хост, и использование ее оттуда. Сервер с двухядреным оптероном и 4ГБ памяти не заметил появления балласта: запросы пролетали мгновенно. И это без попыток тюнинговать мускуль.</p>
<p><img src="/files/2008/08/nginx-n-apache.png" alt="" title="nginx-n-apache" width="247" height="103" class="aligncenter size-medium wp-image-219" /></p>
<p>Далее начались проблемы с милой связкой nginx+apache. Как описано у <a href="http://blog.kovyrin.net/2006/05/18/nginx-as-reverse-proxy/">Алексея</a>, все заработало. Но некоторые странички отказывались показываться &#8211; браузер ругался на невозможность понять что же ему пришло. Такой ошибки я не встречал, и как оказалось никто из моего контакт-листа тоже.</p>
<p>А получилось следующее: обожаемый ExpressionEngine (и тебе привет) пытался все отдать за-gzip-леное. Апач справедливо отдавал это как HTTP/1.1 Transfer-Encoding: chunked. Но это в ответ на запрос HTTP/1.0 от nginx! Последний нифига не понимал и результирующий фарш доставлялся браузеру. Еще бы, он не хотел это нечто отображать&#8230;</p>
<p>Выключением опции gzip-сжатия в ExpressionEngine 1.5.3 это полечилось, однако&#8230;</p>
<p><img src="/files/2008/08/store_ee.gif" alt="" title="store_ee" width="111" height="102" class="aligncenter size-medium wp-image-220" /></p>
<p>&#8230; приключения с этим белым и пушистым зверьком не закончились. В форуме при публикации сообщения символы кириллицы отсутствовали. Долго я искал помощи через гугль, пока не полез в код. А в коде методом тыка нашел, что это все <a href="http://codeigniter.com/bug_tracker/bug/1919/">виноват xss_clean в версии 1.5.3</a>.</p>
<p>Заменив строки с</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">...</span><br />
<span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/preg_replace"><span style="color: #990000;">preg_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#(&amp;\#*\w+)[\x00-\x20]+;#u'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>1;&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">...</span><br />
<span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/preg_replace"><span style="color: #990000;">preg_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#(&amp;\#x*)([0-9A-F]+);*#iu'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>1<span style="color: #000099; font-weight: bold;">\\</span>2;&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">...</span></div></div>
<p>на</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/preg_replace"><span style="color: #990000;">preg_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#(&amp;\#?[0-9a-z]+)[\x00-\x20]*;?#i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>1;&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<span style="color: #339933;">...</span><br />
<span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/preg_replace"><span style="color: #990000;">preg_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#(&amp;\#x?)([0-9A-F]+);?#i'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>1<span style="color: #000099; font-weight: bold;">\\</span>2;&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>проблему вылечил.</p>
<p>С нетерпением жду что обнаружится дальше&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/08/07/server-moving-adventures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webservers benchmark</title>
		<link>http://dmitry.shaposhnik.name/2008/02/03/webservers-benchmark/</link>
		<comments>http://dmitry.shaposhnik.name/2008/02/03/webservers-benchmark/#comments</comments>
		<pubDate>Sun, 03 Feb 2008 05:08:54 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lighttpd]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/2008/02/03/webservers-benchmark/</guid>
		<description><![CDATA[Решил потестировать PHP в разных связках, а именно &#8211; Apache + mod_php, Apache + mod_fcgid + php, Lighttpd + mod_fastcgi + php. Все это еще в двух вариантах &#8211; с APC (Advanced PHP Cache) и без него.
Тестировал выполнением вот такой команды:
ab -c 5 -n 500 http://dmitry.shaposhnik.name/
Выполнял команду на другом сервере чтобы снизить влияние случайных факторов.
И [...]]]></description>
			<content:encoded><![CDATA[<p>Решил потестировать PHP в разных связках, а именно &#8211; Apache + mod_php, Apache + mod_fcgid + php, Lighttpd + mod_fastcgi + php. Все это еще в двух вариантах &#8211; с APC (Advanced PHP Cache) и без него.</p>
<p>Тестировал выполнением вот такой команды:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ab <span style="color: #660033;">-c</span> <span style="color: #000000;">5</span> <span style="color: #660033;">-n</span> <span style="color: #000000;">500</span> http:<span style="color: #000000; font-weight: bold;">//</span>dmitry.shaposhnik.name<span style="color: #000000; font-weight: bold;">/</span></div></div>
<p>Выполнял команду на другом сервере чтобы снизить влияние случайных факторов.</p>
<p>И вот что получилось в результате:<br />
<a href='http://dmitry.shaposhnik.name/files/2008/02/screenshot1.png' title='testing results, table' rel="lightbox"><img src='http://dmitry.shaposhnik.name/files/2008/02/screenshot1.thumbnail.png' alt='testing results, table' /></a><br />
Вот полный вывод в текстовом виде:<br />
<a href='http://dmitry.shaposhnik.name/files/2008/02/tests.txt' title='testing results'>testing results</a></p>
<p>UPD: вот на том же сервере решил протестировать приложение-блогодвижек (<a href="http://sergey.tatarenkov.name/">Записки айтишника</a>) на рельсах той же командой.<br />
<span id="more-170"></span></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Document Length: &nbsp; &nbsp; &nbsp; &nbsp;13176 bytes<br />
<br />
Concurrency Level: &nbsp; &nbsp; &nbsp;5<br />
Time taken for tests: &nbsp; 15.141659 seconds<br />
Complete requests: &nbsp; &nbsp; &nbsp;500<br />
Failed requests: &nbsp; &nbsp; &nbsp; &nbsp;0<br />
Write errors: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0<br />
Total transferred: &nbsp; &nbsp; &nbsp;6743500 bytes<br />
HTML transferred: &nbsp; &nbsp; &nbsp; 6588000 bytes<br />
Requests per second: &nbsp; &nbsp;33.02 [#/sec] (mean)<br />
Time per request: &nbsp; &nbsp; &nbsp; 151.417 [ms] (mean)<br />
Time per request: &nbsp; &nbsp; &nbsp; 30.283 [ms] (mean, across all concurrent requests)<br />
Transfer rate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;434.89 [Kbytes/sec] received<br />
<br />
Connection Times (ms)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min &nbsp;mean[+/-sd] median &nbsp; max<br />
Connect: &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp;0 &nbsp; 0.0 &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; 1<br />
Processing: &nbsp; &nbsp; 6 &nbsp;100 1126.2 &nbsp; &nbsp; &nbsp;7 &nbsp; 15141<br />
Waiting: &nbsp; &nbsp; &nbsp; &nbsp;4 &nbsp; 98 1126.1 &nbsp; &nbsp; &nbsp;5 &nbsp; 15139<br />
Total: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;6 &nbsp;100 1126.2 &nbsp; &nbsp; &nbsp;7 &nbsp; 15141<br />
<br />
Percentage of the requests served within a certain time (ms)<br />
&nbsp; 50% &nbsp; &nbsp; &nbsp;7<br />
&nbsp; 66% &nbsp; &nbsp; &nbsp;8<br />
&nbsp; 75% &nbsp; &nbsp; &nbsp;9<br />
&nbsp; 80% &nbsp; &nbsp; 10<br />
&nbsp; 90% &nbsp; &nbsp; 11<br />
&nbsp; 95% &nbsp; &nbsp; 13<br />
&nbsp; 98% &nbsp; &nbsp;110<br />
&nbsp; 99% &nbsp; &nbsp;211<br />
&nbsp;100% &nbsp;15141 (longest request)</div></div>
<p><strong>UPD:</strong> по коментариям Вадима сделал более жесткий тест:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ab -c300 -n3000 http://dmitry.shaposhnik.name/test.php</div></div>
<p><a href='http://dmitry.shaposhnik.name/files/2008/02/test2.txt' title='testing results, heavy testing'>testing results, heavy testing</a><br />
Без APC mod_fcgid отлетает (2 запроса). Подскажите как подтюнинговать.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2008/02/03/webservers-benchmark/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>apache restart bug</title>
		<link>http://dmitry.shaposhnik.name/2007/10/31/apache-restart-bug/</link>
		<comments>http://dmitry.shaposhnik.name/2007/10/31/apache-restart-bug/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 11:06:49 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://dmitry.shaposhnik.name/2007/10/31/apache-restart-bug/</guid>
		<description><![CDATA[Проблема: вызываем
/etc/init.d/apache2 restart
и этот зверь ругается, что порт залочен и не может открыть логи.
Причина: когда вызывается apache_stop, то он на самом деле вызывает apache2ctl graceful-stop. Это не убивает апач сразу, а дает ему некоторое время чтоб умереть самому&#8230; Но на нагруженом сервере это и есть проблема &#8211; он умирает очень долго.
Решение: в /etc/init.d/apache2 найти и [...]]]></description>
			<content:encoded><![CDATA[<p>Проблема: вызываем</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 restart</div></div>
<p>и этот зверь ругается, что порт залочен и не может открыть логи.<br />
Причина: когда вызывается apache_stop, то он на самом деле вызывает apache2ctl graceful-stop. Это не убивает апач сразу, а дает ему некоторое время чтоб умереть самому&#8230; Но на нагруженом сервере это и есть проблема &#8211; он умирает очень долго.<br />
Решение: в <tt>/etc/init.d/apache2</tt> найти и заменить</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">$APACHE2CTL</span> graceful-stop</div></div>
<p>на</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">$APACHE2CTL</span> stop</div></div>
<p>Тогда апач умирает мгновенно.</p>
<p>Также есть вариант в рестарте sleep вместо 10 заменить на 15, но мне не помогло.</p>
<p><a href="http://www.mail-archive.com/debian-apache@lists.debian.org/msg09031.html">Ссылка</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/10/31/apache-restart-bug/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>PHP opcode cachers review</title>
		<link>http://dmitry.shaposhnik.name/2007/09/15/php-opcode-cachers-review/</link>
		<comments>http://dmitry.shaposhnik.name/2007/09/15/php-opcode-cachers-review/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 00:07:47 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/09/15/php-opcode-cachers-review/</guid>
		<description><![CDATA[&#8220;Папа обещал &#8211; папа сходил&#8221;

Обещался я сделать сравнение разных средств для ускорения работы скриптов. Если кто будет говорить о неточности или неправильности метода тестирования &#8211; говорите как лучше, сделаем лучше.
Итак, основным камнем преткновения для проведения тестирования послужило использование Zend Framework. Он использует чрезмерно много загрузок разных файлов, что заметно снижает скорость работы.
Тестовый стенд &#8211; ноутбук [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right;"><i>&#8220;Папа обещал &#8211; папа сходил&#8221;</i></div>
<p><br style="display:block; clear: both;" /></p>
<p>Обещался я сделать сравнение разных средств для ускорения работы скриптов. Если кто будет говорить о неточности или неправильности метода тестирования &#8211; говорите как лучше, сделаем лучше.</p>
<p>Итак, основным камнем преткновения для проведения тестирования послужило использование Zend Framework. Он использует чрезмерно много загрузок разных файлов, что заметно снижает скорость работы.</p>
<p>Тестовый стенд &#8211; ноутбук Asus A6Tc, OS: Linux Ubuntu &#8220;Gutsy&#8221;, Lighttpd-1.4.17, PHP 5.2.3 через FastCGI.<br />
Тестовое приложение основано на Zend Framework, использует подключение к БД (но не делает выборок), а для View использован Smarty.</p>
<p>Тестировал Pure PHP, Zend Optimizer 3.3.0, XCache 1.2.1, APC 3.0.14, eAccelerator 0.9.5.2.</p>
<p>Тестировал тривиально и просто &#8211; замерял время запуска и время окончания внутри скрипта, в конце вывода смарти эхал полученое время. И копипастил его (все действия для чистоты эксперимента проводились с другой машинки) в OO SpreadSheets.</p>
<p>Вот результаты (время в мс):</p>
<table border=1>
<tr>
<th><b>Pure PHP</b></th>
<th><b>ZO</b></th>
<th><b>XCache</b></th>
<th><b>APC</b></th>
<th><b>eAccelerator</b></th>
</tr>
<tr>
<td>247.8</td>
<td>272.92</td>
<td>573.43</td>
<td>397.9</td>
<td>156.2</td>
</tr>
<tr>
<td>251.04</td>
<td>271.81</td>
<td>106.81</td>
<td>89.75</td>
<td>74.16</td>
</tr>
<tr>
<td>245.14</td>
<td>286.8</td>
<td>108.96</td>
<td>88.38</td>
<td>110.42</td>
</tr>
<tr>
<td>252.72</td>
<td>267.1</td>
<td>91.01</td>
<td>89.2</td>
<td>534.97</td>
</tr>
<tr>
<td>207.39</td>
<td>221.43</td>
<td>65.54</td>
<td>47.49</td>
<td>69.55</td>
</tr>
<tr>
<td>209.5</td>
<td>221.34</td>
<td>65.89</td>
<td>53.31</td>
<td>71.01</td>
</tr>
<tr>
<td>217.66</td>
<td>232.13</td>
<td>70.04</td>
<td>47.66</td>
<td>70.32</td>
</tr>
<tr>
<td>202.88</td>
<td>222.59</td>
<td>66.1</td>
<td>48.04</td>
<td>70.26</td>
</tr>
<tr>
<td>203.17</td>
<td>220.79</td>
<td>69.94</td>
<td>54.19</td>
<td>70.76</td>
</tr>
<tr>
<td>204.03</td>
<td>235.28</td>
<td>65.76</td>
<td>48.49</td>
<td>70.05</td>
</tr>
</table>
<p>И вот по этому добру график:</p>
<p><img src='http://0804team.kiev.ua/dm/blog/files/2007/09/screenshot3.png' alt='opcode cachers diagram' /></p>
<p>С XCache был замечен баг: если дважды быстро обновить страницу то контент вылазил полтора-два-три раза. Но я думаю это из-за перегенерации шаблона в Smarty. Однако неприятный осадок остался.</p>
<p>Жду комментариев =)</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/09/15/php-opcode-cachers-review/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Apache1 vs apache2.2 vs lighttpd</title>
		<link>http://dmitry.shaposhnik.name/2007/04/11/apache1-vs-apache22-vs-lighttpd/</link>
		<comments>http://dmitry.shaposhnik.name/2007/04/11/apache1-vs-apache22-vs-lighttpd/#comments</comments>
		<pubDate>Wed, 11 Apr 2007 12:19:10 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/04/11/apache1-vs-apache22-vs-lighttpd/</guid>
		<description><![CDATA[Наверняка всех интересует этот вопрос. Надеюсь, этот пост даст пищу размышлениям:
http://www.webhostingtalk.com/showthread.php?t=527963
]]></description>
			<content:encoded><![CDATA[<p>Наверняка всех интересует этот вопрос. Надеюсь, этот пост даст пищу размышлениям:</p>
<p><a href="http://www.webhostingtalk.com/showthread.php?t=527963">http://www.webhostingtalk.com/showthread.php?t=527963</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/04/11/apache1-vs-apache22-vs-lighttpd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache &amp; mod_ssl &#8211; certificate generation</title>
		<link>http://dmitry.shaposhnik.name/2007/04/02/apache-mod_ssl-certificate-generation/</link>
		<comments>http://dmitry.shaposhnik.name/2007/04/02/apache-mod_ssl-certificate-generation/#comments</comments>
		<pubDate>Mon, 02 Apr 2007 15:48:01 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[apache]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/04/02/apache-mod_ssl-certificate-generation/</guid>
		<description><![CDATA[Я безумно благодарен pag&#8216;уза наводку на эту статью. Чтобы она не затерялась в недрах интернета (при поиске я ее не видел) &#8211; я хочу опубликовать ее здесь. Я надеюсь, автор не воспримет это как проявление плагиата.

Исходник: http://slacksite.com/apache/certificate.html
Перевод:  Sergei Karasiov karasiov@yahoo.com
Предисловие переводчика
 Данный текст не является дословным переводом английского оригинала. Это  спровоцировано отчасти ленью [...]]]></description>
			<content:encoded><![CDATA[<p>Я безумно благодарен <a href="http://pagonline.kiev.ua" target="_blank">pag</a>&#8216;уза наводку на эту статью. Чтобы она не затерялась в недрах интернета (при поиске я ее не видел) &#8211; я хочу опубликовать ее здесь. Я надеюсь, автор не воспримет это как проявление плагиата.</p>
<p><span id="more-92"></span></p>
<p>Исходник: <a href="http://slacksite.com/apache/certificate.html">http://slacksite.com/apache/certificate.html</a><br />
Перевод:  Sergei Karasiov <a href="mailto:karasiov@yahoo.com">karasiov@yahoo.com</a></p>
<h4>Предисловие переводчика</h4>
<p><em> </em><em>Данный текст не является дословным переводом английского оригинала. Это  спровоцировано отчасти ленью переводчика, отчасти пробелами в его (переводчика)  образовании. Однако этот текст может послужить неплохим пинком(starting point)  для начала исследований не только модуля mod_ssl, но и пакета openssl в целом.  Тем более что за идеологическую адекватность перевода я поручиться все же  попытаюсь. Во всяком случае, стиль и дух произведения я честно пытался  сохранить.  </em></p>
<p><em>Неплохо зная характер отечественного читателя, я могу предположить, что  некоторые очевидные подробности (такие, например, как рассказ про переменную  PATH ) могут разозлить и оскорбить потенциального потребителя данного текста,  который полагает себя вполне профессионалом не нуждающимся в подобных  подсказках. Однако, про стиль и дух я сказал выше и более добавить ничего не  могу.  </em></p>
<p><em>Дополнения и конструктивная критика &#8211; приветствуются. Авторское право на  перевод принадлежит переводчику. Публикация этого текста разрешена в любом виде,  при условии, что данное предисловие не будет изъято из публикуемого текста.  Ссылка на автора перевода (как вы уже догадались)при публикации обязательна.  </em></p>
<p><em>СПБ-09-2003 </em></p>
<h4>Интродукция</h4>
<p>Предполагается, что этот документ будет кратким пособием по генерации и  установке SSL сертификатов на сервер Apache с установленным модулем mod_ssl.  Хотя это не очень сложный процесс, он сопровождается запуском нескольких длинных  команд с большим количеством ключей. Этого документа должно быть достаточно для  того, чтобы вы могли сгенерировать и установить сертификаты для вашего сервера.</p>
<p>Этот документ не предназначен для обсуждения процессов компиляции и установки  сервера Apache и модуля mod_ssl. Для подробных инструкций смотрите .<a href="http://slacksite.com/apache/webserver.html">Сборка Apache с mod_ssl и  другими модулями.</a> . Так же этот документ не предназначен для подробного  обсуждения конфигурирования SSL на серверах Apache. Будут представлены примеры  конфигурации простого виртуального хоста с использованием SSL, который должен  работать в практически любой стандартной ситуации. Ralf Engelschall, автор  модуля mod_ssl, поддерживает замечательную документацию на <a href="http://www.modssl.org/">http://www.modssl.org/</a>. Для того чтобы более  подробно узнать о конфигурировании SSL или особых случаях смотрите полную  документацию на <a href="http://blog.spb.ru/">http://blog.spb.ru/</a>. В  дополнение дистрибутив содержит подробные страницы мануалов, которые доступны  так же и в формате HTML на <a href="http://blog.spb.ru/">http://blog.spb.ru/</a>.</p>
<h4>Короткий рассказ об SSL</h4>
<p>Эта глава будет очень коротким введением в SSL, Secure Socket Layer.  Криптография очень обширная тема, которая составляет буквально тома материалов.  Последующий материал . это очень упрощенный взгляд на то, как реализован SSL и  какую роль сертификаты играют в рассматриваемом нами случае. В силу того, что  информация намеренно упрощена, возможны небольшие неточности.</p>
<p>Обычный веб-траффик идет через Интернет незашифрованным. Таким образом,  любой, кто имеет доступ к нужным инструментам, может наблюдать за нужным ему  трафиком. Очевидно, что это может привести к проблемам, особенно в тех случаях,  когда необходимы безопасность и приватность, например при работе с кредитками  или в банковских транзакциях. Протокол SSL используется для шифрования трафика  между веб-сервером и веб-клиентом (браузером).</p>
<p>SSL использует асимметричную криптографию, обычно известную как криптография  с открытым ключом. В криптографии с открытым ключом создаются два ключа, одни  публичный . другой секретный. Все зашифрованное с помощью одного ключа может  быть расшифровано только с помощью другого. То есть данные, которые были  зашифрованы секретным ключом сервера могут быть дешифрованы только с помощью  публичного ключа этого же сервера, давая уверенность что, данные пришли оттуда  откуда надо.</p>
<p>Если SSL использует криптографию с открытым ключом, для того чтобы шифровать  поток данных идущих через Интернет, зачем же тогда нужен сертификат? Технический  ответ на этот вопрос, такой, что сертификат на самом деле не нужен . данные  зашифрованы и вряд ли могут быть дешифрованы третьей стороной. Однако  сертификаты играют важную роль в коммуникационном процессе. Сертификат,  подписанный доверенным СА (Certificate Authority), дает гарантию, что владелец  сертификата . тот за кого он себя выдает. Без подписанного сертификата ваши  данные будут зашифрованы, однако, сервер, с которым вы контактируете может быть  не тем о котором вы думаете. Без сертификатов такие нарушения могут быть часты.</p>
<h4>Генерация частного ключа и CSR</h4>
<p>Программный пакет openssl может быть использован для генерации приватного RSA  ключа и создания CSR. Он так же может быть использован для создания  самоподписных сертификатов которые могут быть использованы для тестовых целей  или внутреннего пользования. Программа, которая обычно используется для решения  этих задач, известна как openssl. Она должна быть установлена в директории  /usr/local/ssl. Может быть, вам придется добавить эту директорию в переменную  PATH или же переместить эту программу в директорию, которая уже прописана в  переменной PATH, для того чтобы не писать полный путь. Дальнейшие примеры  полагают, что openssl доступен вам без необходимости писать полный путь.</p>
<p>В первую очередь надо создать ваш приватный ключ. Это будет 1024 битный ключ  стандарта RSA зашифрованный с использованием алгоритма TripleDES и хранящийся в  формате PEM, так что его можно будет читать как простой текст. Мы будем  использовать несколько файлов для усиления случайности и для того чтобы сделать  наш ключ более секретным. Текстовые файлы, которые были сжаты утилитой типа gzip  . станут хорошим выбором. Ключ генерируется следующей командой, где  file1:file2:etc представляют собой случайные сжатые файлы.</p>
<pre>$ openssl genrsa -des3 -rand file1:file2:file3 -out server.key</pre>
<p>Программа предложит вам ввести пароль и сохранит ключ в файле server.key.  Очень важно не забыть пароль. Если ключ будет утерян или пароль будет забыт  сертификат станет бесполезен. Невозможно выразить как важен приватный ключ для  сертификата. Если приватный ключ или пароль скомпрометированы сертификат должен  быть отменен. Как минимум это будет стоить вам денег заплаченных за сертификат.  Было бы хорошей идеей сделать резервную копию на безопасном носителе, таком как  кассета или дискета.</p>
<p>Один неприятный сторонний эффект ключа с паролем это то что Apache будет  всякий раз спрашивать пароль при старте. Понятно что это не очень удобно если  только кто-то не находится постоянно рядом на случай перезагрузки или аварийной  остановки. mod_ssl включает в себя возможность использования внешней программы  вместо встроенного парольного диалога. Возможно убрать пароль из ключа. Если  приватный ключ более не зашифрован, важно чтобы файл его содержащий, был  доступен на чтение только пользователю root. Если ваша система скомпрометирована  и третья сторона получила ваш незашифрованный приватный ключ, производный  сертификат должен быть отменен. После того что мы сказали, используйте следующую  команду для того чтобы убрать пароль из ключа.</p>
<pre>$ openssl rsa -in server.key -out server.pem</pre>
<p>После того как приватный ключ сгенерирован может быть сгенерирован запрос на  подпись сертификатов(CSR &#8212;). CSR может быть использован двояко. В идеале CSR  должен быть послан к CA такому как Tawte или VeriSign, которые проверят  подлинность запрашивающего и выдадут подписанный сертификат. Другой путь &#8211;  подписать CSR самостоятельно, что будет продемонстрировано в следующей главе.</p>
<p>Во время генерации CSR вас попросят ввести некоторое количество информации.  Один из вопросов будет Common Name (eg, YOUR name) []: Важно чтобы это поле  содержало полностью квалифицированное имя домена вашего сервера. Если вебсайт  имеет адрес www.domain.com- то вы должны написать именно www.domain.com. Команда  для генерации CSR выглядит так.</p>
<pre>$ openssl req -new -key server.key -out server.csr</pre>
<p>Пример сессии показан ниже.</p>
<pre>
$ openssl req -new -key server.key -out server.csr
Using configuration from /usr/local/ssl/openssl.cnf
Enter PEM pass phrase:Enter pass phrase here
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New Hampshire
Locality Name (eg, city) []:Nashua
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Domain.com, Inc.
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:www.domain.com
Email Address []:webmaster@domain.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:</pre>
<h4>Генерация самоподписанного сертификата</h4>
<p>На этом этапе вам необходимо сгенерировать самоподписанный сертификат потому  что вы или не планируете заводить сертификат подписанный CA, или хотите  потестировать новую реализацию SSL пока CA подписывает ваш сертификат. Мой опыт  общения с Tawte показывает, что получение сертификата занимает неделю и больше.  Время которое занимает получение сертификата варьируется от того как быстро CA  получит необходимые документы. Временный сертификат будет выдавать ошибку в  клиентском броузере от того, что CA неизвестен и не проверен.</p>
<p>Для того чтобы сгенерировать сертификат годный в течение 60 дней введите  следующую команду.</p>
<pre>$ openssl x509 -req -days 60 -in server.csr -signkey server.key -out server.crt</pre>
<h4>Установка ключа и сертификата</h4>
<p>Когда Apache и mod_ssl установлены &#8211; создаются несколько поддиректорий в  конфигурационной директории Apache. Их расположение зависит от того, как  компилировался Apache. Если использовать мои инструкции, компилируя Apache,  конфигурационная директория будет /usr/local/apache/etc Директории, которые  создает mod_ssl содержат в себе файлы ssl.crt, ssl.csr, и ssl.key Это хорошее  место для хранения сертификатов, запросов на подпись и приватных ключей. Если у  вас будет несколько хостов с SSL хорошей практикой стать включение в имена этих  файлов имен защищаемых хостов.</p>
<p>Добавляя виртуальные хосты к веб-серверу, я обычно предпочитаю хранить их  конфигурации в отдельном файле. Это дает уверенность, что все конфигурации могут  быть быстро найдены, и, заодно, не позволяет основному конфигурационному файлу  разрастаться. Если все виртуальные хосты сохранены в файле ssl.conf, то для того  чтобы Apache нашел его и прочитал надо включить в основной конфиг следующюю  строку:</p>
<pre>Include /usr/local/apache/etc/ssl.conf</pre>
<h4>Конфигурирование виртуального хоста, использующего SSL.</h4>
<p>Обширные примеры конфигурации SSL для виртуальных хостов включены в файл  /usr/local/apache/etc/httpd.conf.default, который устанавливается вместе с  mod_ssl. Ознакомьтесь с документацией на mod_ssl для того чтобы получить более  подробную информацию о возможностях конфигурации. Простой хост использующий SSL  в конфигурационном файле может быть прописан так. SSL Virtual Hosts</p>
<pre>&lt;IfDefine SSL&gt;

&lt;VirtualHost _default_:443&gt;
ServerAdmin webmaster@domain.com
DocumentRoot /usr/local/apache/share/htdocs
ServerName www.domain.com
ScriptAlias /cgi-bin/ /usr/local/apache/share/htdocs/cgi-bin/
SSLEngine on
SSLCertificateFile    /usr/local/apache/etc/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/etc/ssl.key/server.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /usr/local/apache/var/log/ssl_request_log
        "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
&lt;VirtualHost&gt;

&lt;IfDefine&gt;</pre>
<p>Этот пример создаст виртуальный хост с именем. который доступен через порт  443 (стандартный порт для протокола https) сайты с IP адресом вашего сервера.  Можно создать столько дополнительных виртуальных хостов для вашего сервера  сколько IP адресов он обслуживает. Просто добавьте дополнительные  конфигурационные блоки &lt;virtualhost&gt; между дерективами &lt;IfDefine  SSL&gt; и &lt;/IfDefine&gt;. По архитектурным причинам протокол SSL не позволяет  создавать name-based (HTTPS 1.1) виртуальные хосты. Для того чтобы создать новый  виртуальный хост с поддержкой SSL на другом IP адресе просто замените  _default_на новый IP.</p>
<p>Посте добавления виртуального хоста к конфигурационному файлу Apache должен  быть остановлен и вновь запущен для того чтобы новый виртуальный хост заработал.  К несчастью это один из тех случаев когда простая отправка сигнала HUP не  сработает. После перезапуска в зависимости от того какой (шифрованный или нет )  ключ был использован Apache может спросить у вас пароль или пароли. Введите  пароль, и всё заработает.</p>
<p>Теперь вы можете использовать ваш любимый броузер для просмотра содержимого  только что созданного виртуального хоста защищённого SSL . Не забудьте  использовать префикс https:// вместо http://. Вы получите окно с  предупреждением, если вы использовали самоподписанный сертификат. Подтвердите  согласие и страница продолжит загружаться уже защищенная с помощью SSL .  Статусная строка вашего броузера должна содержать иконку в виде замка которая  показывает что страница защищена. Вот и всё.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/04/02/apache-mod_ssl-certificate-generation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
