ОС - Fedora 7.
Имеется схема nginx 0.6.31 + apache 2.2.6 + mod_rpaf 0.6
apache работает как backend, слушает на 8080 порту.
nginx слушает на 80 и всё, кроме статики отдаёт apache.
rpaf настроен. В access_log пишутся "реальные" IP.Заметил такую странную вещь, если есть .htaccess файл и я в корень сайта кладу например
order allow,deny
allow from [ip с которого соединяюсь]
deny from allАпач даёт
Forbidden
You don't have permission to access...
Хотя казалось бы указано allow from [ip с которого соединяюсь]Если я лезу на апач "напрямую" через http://external_ip:8080/, то правило в .htaccess отрабатывает корректно - я вижу странчку.
Что примечательно, если .htaccess выглядит так
order allow,deny
allow from [ip с которого соединяюсь]
allow from 127.0.0.1
deny from all
и соединяюсь к nginx (а он в свою очередь к apache) через http://external_ip/ - получаю страничку! Нету никакого Forbidden!..Т.о., прихожу к выводу что mod_rpaf не работает в конструкциях .htaccess и передаёт ip frontend`а (в моём случае 127.0.0.1).
Поискал в инете, нашёл только один подобный случай для настроек виртуал хоста:
http://www.apsis.ch/pound/pound_list/archive/2007/2007-01/11...Кто-нибудь проверьте пожалуйста на практике, может у меня где-то ошибка.
Есть ли какие-нибудь решения? Может стоит автору rpaf обратить внимание на такой "баг".
Мне проще перекопить нашу статью с кор.википедии. На ней не один сервер сейчас работает :))
===============================================================================Итак, чтобы пофиксить проблему с реальными айпишниками клиентов при использовании связки nginx+apache2, нужн-то всего лишь поставить один модуль к апачу и прописать 3 строки в конфигах.
Чтоб избавится от неудобства необходимо лишь доставить модуль mod_rpaf2 к Apache 2.x.x
[root@server /]# whereis mod_rpaf2
mod_rpaf2: /usr/ports/www/mod_rpaf2
[root@server /]# cd /usr/ports/www/mod_rpaf2Дальше стандартно:
[root@server /]# make install clean
В httpd.conf (конфиг файл Apache) ищем строку:
#LoadModule rpaf_module libexec/apache2/mod_rpaf.so
Де-коментим строку (путь к .so файлу может отличаться)
Далее в тот-же файл httpd.conf в самый низ дописываем 2 строки
RPAFproxy_ips 127.0.0.
RPAFEnable OnПервая строка - это IP прокси (может быть белым IP адресом), вторая - говорит Apache, что rpaf нужно использовать. Что делает rpaf? Он из заголовка X-Forwarded-for делает REMOTE_ADDR.
Собственно остается в конфиге nginx’а в разделе server (виртуального хоста, не в location'e Proxy-преедачи) дописать такие строки:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;Далее перезагружаем Apache и nginx
[root@server /]# apachectl restart
[root@server /]# /etc/rc.d/nginx restart=========================================
Всё.
>Мне проще перекопить нашу статью с кор.википедии. На ней не один сервер
>сейчас работает :))
>===============================================================================
>
>Итак, чтобы пофиксить проблему с реальными айпишниками клиентов при использовании связки nginx+apache2,
>нужн-то всего лишь поставить один модуль к апачу и прописать 3 строки в конфигах.копипастить не надо. Сам не одну статью прочёл про это. Повторюсь, что
это всё уже сделано и mod_rpaf установлен и ИПы нормально обрабатываются - и в скриптах php и в access_log Apache.А не работает в .htaccess - allow, deny директивы для ip адресов.
Сами попробуйте, если у Вас apache 2.2 и mod_rpaf - положите .htaccess файл где пропишите deny from [ваш ip].
Опять таки, если к backend`у обратиться "напрямую" http://ext_ip:port, то .htaccess нормально обрабатывается... Поэкспериментируйте. У меня такой баг имеет место.
>Сами попробуйте, если у Вас apache 2.2 и mod_rpaf - положите .htaccess
>файл где пропишите deny from [ваш ip].
>Опять таки, если к backend`у обратиться "напрямую" http://ext_ip:port, то .htaccess нормально обрабатывается...
>Поэкспериментируйте. У меня такой баг имеет место.На 2.0 такая же проблема.
Вы как-нибудь решили???
>>Сами попробуйте, если у Вас apache 2.2 и mod_rpaf - положите .htaccess
>>файл где пропишите deny from [ваш ip].
>>Опять таки, если к backend`у обратиться "напрямую" http://ext_ip:port, то .htaccess нормально обрабатывается...
>>Поэкспериментируйте. У меня такой баг имеет место.
>
>На 2.0 такая же проблема.
>Вы как-нибудь решили???Нет, не решил. Зато выяснилось, что этот баг имеет место. Думаю, автору mod_rpaf надо показать данный "баг"
Apache/2.2.9 проблем нет, но 1 отличие, у меня блок deny allow описан внутри httpd.conf
>Apache/2.2.9 проблем нет, но 1 отличие, у меня блок deny allow описан
>внутри httpd.confА можно с .htaccess попробовать? Всего лишь маленький файлик...
>>Apache/2.2.9 проблем нет, но 1 отличие, у меня блок deny allow описан
>>внутри httpd.conf
>
>А можно с .htaccess попробовать? Всего лишь маленький файлик...Работает нормально,
Order deny,allow
Deny from all
Allow from 127.0.0.1 172.16.0.4пускает только с 172.16.0.4
>[оверквотинг удален]
>>
>>А можно с .htaccess попробовать? Всего лишь маленький файлик...
>
>Работает нормально,
>
>Order deny,allow
>Deny from all
>Allow from 127.0.0.1 172.16.0.4
>
>пускает только с 172.16.0.4Появилась возможность проверить баг. И так локальная сеть, Apache/2.2.10 (Fedora core 10 rus), ip=10.1.1.1 на котором крутится апач. Апач висит на 8080 (бэкэнд), а на 80 слушает nginx (фронтэнд)
И так:
[root@fc test]# cat /var/www/html/test/.htaccess
Order deny,allow
Deny from all
Allow from 10.1.1.3Комп, с которого запрашиваю - 10.1.1.3.
Случай 1.
http://10.1.1.1/test/
ForbiddenYou don't have permission to access /test/ on this server.
Apache/2.2.10 (Fedora) Server at 10.1.1.1 Port 80
Лог: 10.1.1.3 - - [31/Dec/2008:00:28:28 +0300] "GET /test/ HTTP/1.0" 403 281 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.8.1.17) Gecko/20080829 SeaMonkey/1.1.12"Случай 2.
http://10.1.1.1:8080/test/
Index of /test
[ICO] Name Last modified Size Description
[DIR] Parent Directory -
Apache/2.2.10 (Fedora) Server at 10.1.1.1 Port 8080
Лог: 10.1.1.3 - - [31/Dec/2008:00:29:12 +0300] "GET /test/ HTTP/1.1" 200 688 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.8.1.17) Gecko/20080829 SeaMonkey/1.1.12"
Прихожу к выводу, что баг прогрессирует!
А у меня получилось победить эту проблемуhttp://binblog.ru/2009/07/apache-mod_rpaf-htaccess/
>[оверквотинг удален]
>http://10.1.1.1:8080/test/
>Index of /test
>[ICO] Name Last modified Size Description
>[DIR] Parent Directory -
>Apache/2.2.10 (Fedora) Server at 10.1.1.1 Port 8080
>Лог: 10.1.1.3 - - [31/Dec/2008:00:29:12 +0300] "GET /test/ HTTP/1.1" 200 688 "-"
>"Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.8.1.17) Gecko/20080829 SeaMonkey/1.1.12"
>
>
>Прихожу к выводу, что баг прогрессирует!
>А у меня получилось победить эту проблему
>
>http://binblog.ru/2009/07/apache-mod_rpaf-htaccess/
>Вот бы хорошо, чтобы автор мода
http://stderr.net/apache/rpaf/
обратил внимание на патч и подправил исходники.
>>А у меня получилось победить эту проблему
>>
>>http://binblog.ru/2009/07/apache-mod_rpaf-htaccess/
>>
>
>Вот бы хорошо, чтобы автор мода
>http://stderr.net/apache/rpaf/
>обратил внимание на патч и подправил исходники.этот патч решил одну проблему, но добавил другую:
теперь в конструкциях наподобие "header( 'Location: /newpath/' );" апачь возвращает не domain.com/newpath, а МОЙ-IP-АДРЕС/newpathМОЙ-IP-АДРЕС - это ип с которого коннект, именно клиентского компьютера на котором открыт браузер. идеи?
>этот патч решил одну проблему, но добавил другую:
>теперь в конструкциях наподобие "header( 'Location: /newpath/' );" апачь возвращает не domain.com/newpath,
>а МОЙ-IP-АДРЕС/newpath
>
>МОЙ-IP-АДРЕС - это ип с которого коннект, именно клиентского компьютера на котором
>открыт браузер. идеи?это не поможет? mod_realip http://sysoev.ru/mod_realip/
> это не поможет? mod_realip http://sysoev.ru/mod_realip/Поможет только тем, у кого апач 1.3. О чём вполне ясно написано у Сысоева. Для апача2 только mod_rpaf. Лично я категорический сторонник apache2.
>[оверквотинг удален]
>>>
>>
>>Вот бы хорошо, чтобы автор мода
>>http://stderr.net/apache/rpaf/
>>обратил внимание на патч и подправил исходники.
> этот патч решил одну проблему, но добавил другую:
> теперь в конструкциях наподобие "header( 'Location: /newpath/' );" апачь возвращает не
> domain.com/newpath, а МОЙ-IP-АДРЕС/newpath
> МОЙ-IP-АДРЕС - это ип с которого коннект, именно клиентского компьютера на котором
> открыт браузер. идеи?а этот глюк исправили?
нашел кто-нибудь как исправить?
> а этот глюк исправили?
> нашел кто-нибудь как исправить?на debian работает
Server version: Apache/2.2.9 (Debian)
Server built: Dec 11 2010 21:34:00
nginx version: nginx/0.6.32
на CentOS отказывается
Server version: Apache/2.2.3
Server built: Jan 31 2011 17:50:30
nginx: nginx version: nginx/1.0.0REMOTE_ADDR везде коректно правится. в логах тоже казывается правильный ip, но в centos не работает, в debian работает. в обоих практически одинаково настроены сайты. Видимо в 2.2.9 есть какието изменения которые исправляют проблему.
Добрый день,только что наткнулся на эту проблему. Смотрю ничего не изменилось c того времени.
.htaccess с кодом не работает
order deny,allow
deny from all
allow from 111.111.111.111Решение простое, заменить mod_rpaf на mod_extract_forwarded
1. инсталируем EPEL из http://fedoraproject.org/wiki/EPEL
http://download.fedoraproject.org/pub/epel/5/i386/epel-relea...2. инсталируем mod_extract_forwarded
yum install --enablerepo=epel mod_extract_forwarded.i3864. коректируем конфиг /etc/httpd/conf.d/mod_extract_forwarded.conf
по сути он стандартный, только меняем значени MEFaccept на нужное
MEFaccept 127.0.0.1
все работает. :)
>[оверквотинг удален]
> deny from all
> и соединяюсь к nginx (а он в свою очередь к apache) через
> http://external_ip/ - получаю страничку! Нету никакого Forbidden!..
> Т.о., прихожу к выводу что mod_rpaf не работает в конструкциях .htaccess и
> передаёт ip frontend`а (в моём случае 127.0.0.1).
> Поискал в инете, нашёл только один подобный случай для настроек виртуал хоста:
> http://www.apsis.ch/pound/pound_list/archive/2007/2007-01/11...
> Кто-нибудь проверьте пожалуйста на практике, может у меня где-то ошибка.
> Есть ли какие-нибудь решения? Может стоит автору rpaf обратить внимание на такой
> "баг".
Вы неправильно задаёте конструкцию Order. Последовательность должна быть другой и после запятой недолжно быть пробелов.Правильно так:
Order Deny,Allow
Deny From all
Allow From 10.1.1.1и всё работает как надо.
Для справки. Как обрабатываются эти дериктивы:
Order Allow,Deny
Сперва, проверяются все директивы Allow; по крайней мере одна должна соответствовать, или запрос отвергается. Далее, провеляются все директивы Deny. Если какие-либо соответствуют, то запрос отвергается. В конце, любой запрос, который не соответствует директиве Allow или Deny отвергается по умолчанию.Order Deny,Allow
Сперва, проверяются все директивы Deny; если какая-либо соответствует, то запрос отвергается, если нет соответствия в директиве Allow. Любой запрос, который не соответствует директиве Allow или Deny пропускается.
Спасибо, но тут не в этом дело, mod_rpaf просто неподдерживает этого, так же как и аторизации. Рещение - mod_extract_forwarded.
> Спасибо, но тут не в этом дело, mod_rpaf просто неподдерживает этого, так
> же как и аторизации. Рещение - mod_extract_forwarded.# cat .htaccess
Order Deny,Allow
Deny From all
Allow From xxx.xxx.238.231xxx.xxx.157.114 - - [08/Mar/2012:23:17:12 +0200] "GET /test/ HTTP/1.0" 403 283 "-" "Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"
xxx.xxx.238.231 - - [08/Mar/2012:23:17:27 +0200] "GET /test/ HTTP/1.0" 200 61688 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"
[Thu Mar 08 23:17:12 2012] [error] [client xxx.xxx.157.114] client denied by server configuration: /var/www/vhosts/domain.com.ua/test/
CentOS-6.2
# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Feb 13 2012 22:31:42# apachectl -t -D DUMP_MODULES | grep rpaf
Syntax OK
rpaf_module (shared)# nginx -v
nginx version: nginx/0.8.54ЧЯДНТ?
Возможно mod_rpaf или apache версия играет роль, мы для семя пометили модуль как ненадежный и отказались от его использования. mod_extract_forwarded http://www.openinfo.co.uk/apache/index.html на боевый машинах с хостингом используется пол года, проблем нет, версии разные.>[оверквотинг удален]
> CentOS-6.2
> # httpd -v
> Server version: Apache/2.2.15 (Unix)
> Server built: Feb 13 2012 22:31:42
> # apachectl -t -D DUMP_MODULES | grep rpaf
> Syntax OK
> rpaf_module (shared)
> # nginx -v
> nginx version: nginx/0.8.54
> ЧЯДНТ?
> Возможно mod_rpaf или apache версия играет роль, мы для семя пометили модуль
> как ненадежный и отказались от его использования. mod_extract_forwarded http://www.openinfo.co.uk/apache/index.html
> на боевый машинах с хостингом используется пол года, проблем нет, версии
> разные.Возможно, в 2.4 есть так же модуль http://httpd.apache.org/docs/2.4/mod/mod_remoteip.html
> Возможно mod_rpaf или apache версия играет роль, мы для семя пометили модуль
> как ненадежный и отказались от его использования. mod_extract_forwardedВерсия mod_rpaf играет роль. Используйте 0.6 или патченную 0.5.
> Спасибо, но тут не в этом дело, mod_rpaf просто неподдерживает этого, так
> же как и аторизации. Рещение - mod_extract_forwarded.Выше, в http://www.opennet.me/openforum/vsluhforumID8/6014.html#17 верно написали, как правильно пользоваться директивами (Order / Allow / Deny) .htaccess
Ссылка на оф документацию: http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
Небольшая проверка показывает, что директивы .htaccess отрабатывают идентично как при наличии, так и при отсутствии mod_rpaf-0.6.
debian 6.0модуль mod_extract_forwarded не удалось скомпилить и подключить по нормальному иза ошибки какойто с прокси, в принцыпе там в исходнике правится #define, но почемуто после этого не стало работать, то что работало в centos.
вот что получилось и работает.
rpaf.conf
<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 184.xx.xx.xxx 127.0.0.1
</IfModule>Nginx. 1.2
site.net
server {
<------>listen 80;
<------>server_name site.net *.site.net;<------>root /home/www/tube/site.net/public_html;
#<----->access_log /home/www/tube/site.net/log/ng-acc.log;
<------>error_log /home/www/tube/site.net/log/ng-err.log;location / {
proxy_pass http://184.xx.xx.xx:81;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE_ADDR $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 500m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
charset off;
track_uploads proxied 30s;
}location ^~ /contents/videos/ {
flv;
root /home/www/tube/site.net/public_html;
internal;
}location ^~ /contents/videos_sources/ {
root /home/www/tube/site.net/public_html;
internal;
}location ^~ /contents/albums/sources/ {
root /home/www/tube/site.net/public_html;
internal;
}location ^~ /contents/albums/main/700x525/ {
root /home/www/tube/site.net/public_html;
internal;
}location ~* ^.+\.(gif|jpg|mpg|mp3|mpeg|avi)$ {
valid_referers none blocked site.net *.site.net;
if ($invalid_referer) {
return 403;
}
root /home/www/tube/site.net/public_html;
}location ^~ /admin/include/get_upload_status.php {
<------>report_uploads proxied;
#<----->upload_progress_header hash;
<------>upload_progress_jsonp_output;
}
}--------------------------------
Order Allow,Deny
с пробелом без пробелом в обратном порядке и вовсе без ordera обрабатывается одинаково.
всем удачи.