nginx+apache mod_rpaf — проблема Allow from IP в .htaccess РЕШЕНА

Задача была достаточно простая — закрыть доступ к админ панели WordPress на сайте нашего партнера, где можно купить матрасы

Прописал, как положено в .htaccess следующее:

<Files wp-login.php>
Order deny,allow
Deny from All
Allow from 77.87.37.135
</Files>

где 77.87.37.135 — мой IP адрес, разрешенный для доступа.

Все правильно, но не работает!
Получаем следующее

.htaccess errorr

В чем прикол?!

Начинаем разбираться.

Конфигурация следующая: CentOs 6.4, php 5.5.3 (последняя версия на момент написания статьи), Apache/2.2.25, nginx

Так как у нас стоит nginx в качестве прокси и apache в качестве backend, оказывается неправильно форвардится IP.
И apache получает iP фронтэнда. А нам нужно чтобы apache получал реальный IP адрес клиента.

Настраиваем правильно nginx.

В nginx.conf прописываем следующее:
В секции «location /» добавляем

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

И получаем, в моем случае:

location / {
access_log off;

if ($request_method != GET) { proxy_pass http://backendinsider; break; }
proxy_pass http://backendinsider;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
default_type text/html;
error_page 404 = /fallback;
}

Перезапускаем nginx.
>service nginx restart

Все бы хорошо, но результат тот же
.htaccess errorr

Оказывается, этого не достаточно.
Нам дополнительно понадобится модуль rpaf к apache для нормального форварда IP.

Устанавливаем mod_rpaf

mod_rpaf берем с сайта http://stderr.net/apache/rpaf/download/ ,где лежат все версии
Нас интересует mod_rpaf-0.6.tar.gz
>wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
>tar -xvf mod_rpaf-0.6.tar.gz
>cd mod_rpaf-0.6
>sed -ie 's/apxs2/apxs/' Makefile
>make rpaf-2.0
>make install-2.0

Если все сделали правильно, получаем mod_rpaf-2.0.so
Подключаем к apache. В httpd.conf прописываем следующее:

LoadModule rpaf_module /etc/httpd/modules/mod_rpaf-2.0.so

<IfModule mod_rpaf-2.0.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
</IfModule>

Обратите внимание на название файла mod_rpaf-2.0.c в IfModule !!!
127.0.0.1 — адрес nginx, у Вас может отличаться, если другая конфигурация frontend-backend
Теперь перезапускаем apache
>service httpd restart

Что получаем? А все тоже
.htaccess errorr

Смотрим phpinfo();
И что же видим.
REMOTE_ADDR правильный, но Allow в .htaccess работает некорректно.
И вот здесь оказывается, что mod_rpaf не спасает нас.
А лечится это следующим образом.
В .htaccess надо немного изменить нашу директиву Allow ледующим образом:

<Files wp-login.php>
SetEnvIf Remote_Addr «^77\.87\.37\.135″ realremoteaddr
Order deny,allow
Deny from All
Allow from env=realremoteaddr
</Files>

И наконец, долгожданный

login

Не забываем менять 77.87.37.135 на свой IP адрес, разрешенный для доступа к админке WordPress

Надеюсь, кому-то пригодится.
Актуально с последними версииями: CentOs 6.4 | php 5.5.3 | Apache/2.2.25 | nginx

Возможно, Вам будут интересны матрасы в чернигове на сайте eShopes.com