<?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>Кибер-Фанк v2.0 &#187; wordpress</title>
	<atom:link href="http://www.shatlovsky.ru/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.shatlovsky.ru</link>
	<description>Information must be free</description>
	<lastBuildDate>Fri, 12 Aug 2011 09:06:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>WordPress бэкенд: устанавливаем правильный REMOTE_ADDR для комментариев</title>
		<link>http://www.shatlovsky.ru/2008/12/12/wordpress-comment-remote_addr/</link>
		<comments>http://www.shatlovsky.ru/2008/12/12/wordpress-comment-remote_addr/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 09:06:45 +0000</pubDate>
		<dc:creator>Alex Shatlovsky</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.shatlovsky.ru/?p=59</guid>
		<description><![CDATA[В случае, если WordPress живет на бекенд-сервере, например за акселератором nginx, при настройках по-умолчанию комментарии будут содержать вместо IP отправителя IP фронтенда: From: wordpress@shatlovsky.ru Fri, Nov 21, 2008 at 7:59 AM To: shatlovsky@gmail.com Новый комментарий к записи #22 "Макросы RCS" ожидает одобрения http://shatlovsky.ru/blog/2008/10/13/makrosy-rcs/ Автор : evikalley (IP: 10.1.0.1 , 10.1.0.1) E-mail: URL : http:// Whois [...]]]></description>
			<content:encoded><![CDATA[<p>В случае, если WordPress живет на бекенд-сервере, например за акселератором <code>nginx</code>, при настройках по-умолчанию комментарии будут содержать вместо IP отправителя IP фронтенда:</p>
<pre>From: wordpress@shatlovsky.ru              Fri, Nov 21, 2008 at 7:59 AM
To: shatlovsky@gmail.com
Новый комментарий к записи #22 "Макросы RCS" ожидает одобрения

http://shatlovsky.ru/blog/2008/10/13/makrosy-rcs/

Автор : evikalley (IP: 10.1.0.1 , 10.1.0.1)
E-mail: <spam-removed>
URL   : http://<spam-removed>
Whois  : http://ws.arin.net/cgi-bin/whois.pl?queryinput=10.1.0.1
Комментарий:
Спасибо! Буду теперь заходить на этот блог каждый день!</pre>
<p>Видим, что вместо IP спамера записан IP фронтенд-сервера (10.1.0.1).</p>
<p>Решение этой проблемы заключается в подстановке корректного адреса в переменную <code>$_SERVER["REMOTE_ADDR"]</code> (в понятиях PHP, на котором написан WordPress). Корректный адрес может быть в переменных <code>HTTP_X_FORWARDED_FOR</code>, <code>X_REAL_IP</code> и некоторых других.</p>
<p>Решим задачу так, чтобы:</p>
<ol>
<li>не трогать код WordPress;</li>
<li>это работало во всех наших скриптах.</li>
</ol>
<p>Для этого воспользуемся фичей php autoprepepend (файл, который добавляется и исполняется перед каждым php-скриптом). Скрипт (автор <a href="http://www.grantburton.com/tag/http_x_forwarded_for/">Grant Burton</a>), кладем в любое место сайта:</code></p>
<p><code>autoprepend.inc.php</code>:</p>
<pre class="php"><span style="color: #808080; font-style: italic;">/* By Grant Burton @ BURTONTECH.COM (11-30-2008): IP-Proxy-Cluster Fix */</span>
<span style="color: #000000; font-weight: bold;">function</span> checkIP<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<a href="http://www.php.net/empty"><span style="color: #000066;">empty</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span> &amp;&amp; <a href="http://www.php.net/ip2long"><span style="color: #000066;">ip2long</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span>!=<span style="color: #cc66cc;">-1</span> &amp;&amp; <a href="http://www.php.net/ip2long"><span style="color: #000066;">ip2long</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span>!=<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #0000ff;">$private_ips</span> = <a href="http://www.php.net/array"><span style="color: #000066;">array</span></a> <span style="color: #66cc66;">&#40;</span>
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'0.0.0.0'</span>,<span style="color: #ff0000;">'2.255.255.255'</span><span style="color: #66cc66;">&#41;</span>,
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'10.0.0.0'</span>,<span style="color: #ff0000;">'10.255.255.255'</span><span style="color: #66cc66;">&#41;</span>,
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'127.0.0.0'</span>,<span style="color: #ff0000;">'127.255.255.255'</span><span style="color: #66cc66;">&#41;</span>,
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'169.254.0.0'</span>,<span style="color: #ff0000;">'169.254.255.255'</span><span style="color: #66cc66;">&#41;</span>,
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'172.16.0.0'</span>,<span style="color: #ff0000;">'172.31.255.255'</span><span style="color: #66cc66;">&#41;</span>,
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'192.0.2.0'</span>,<span style="color: #ff0000;">'192.0.2.255'</span><span style="color: #66cc66;">&#41;</span>,
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'192.168.0.0'</span>,<span style="color: #ff0000;">'192.168.255.255'</span><span style="color: #66cc66;">&#41;</span>,
		<a href="http://www.php.net/array"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'255.255.255.0'</span>,<span style="color: #ff0000;">'255.255.255.255'</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #b1b100;">foreach</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$private_ips</span> <span style="color: #b1b100;">as</span> <span style="color: #0000ff;">$r</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0000ff;">$min</span> = <a href="http://www.php.net/ip2long"><span style="color: #000066;">ip2long</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$r</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #0000ff;">$max</span> = <a href="http://www.php.net/ip2long"><span style="color: #000066;">ip2long</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$r</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/ip2long"><span style="color: #000066;">ip2long</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span> &gt;= <span style="color: #0000ff;">$min</span><span style="color: #66cc66;">&#41;</span> &amp;&amp; <span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/ip2long"><span style="color: #000066;">ip2long</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span> &lt;= <span style="color: #0000ff;">$max</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span>;
	<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> determineIP<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>checkIP<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_CLIENT_IP&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_CLIENT_IP&quot;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">foreach</span> <span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/explode"><span style="color: #000066;">explode</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;,&quot;</span>,<span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_X_FORWARDED_FOR&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>checkIP<span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/trim"><span style="color: #000066;">trim</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$ip</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>checkIP<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_X_FORWARDED&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_X_FORWARDED&quot;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #66cc66;">&#40;</span>checkIP<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_X_CLUSTER_CLIENT_IP&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_X_CLUSTER_CLIENT_IP&quot;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #66cc66;">&#40;</span>checkIP<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_FORWARDED_FOR&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_FORWARDED_FOR&quot;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #66cc66;">&#40;</span>checkIP<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_FORWARDED&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;HTTP_FORWARDED&quot;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;REMOTE_ADDR&quot;</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #808080; font-style: italic;">//Override server variable for WordPress comments</span>
<span style="color: #0000ff;">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">&quot;REMOTE_ADDR&quot;</span><span style="color: #66cc66;">&#93;</span> = determineIP<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;</pre>
<p>Далее редактируем .htaccess в корне сайта, добавляем туда ссылку на этот скрипт:</p>
<pre class="bash">php_value auto_prepend_file /home/username/htdocs/autoprepend.inc.php</pre>
<p>(путь надо скорректировать в соответствии с вашими настройками).</p>
<p>Готово! Теперь WordPress видит правильный IP комментатора.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shatlovsky.ru/2008/12/12/wordpress-comment-remote_addr/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

