переписать основанный журнал доступа, используя apache + mod_rewrite - возможно? - PullRequest
2 голосов
/ 02 июля 2011

у нас есть куча правил mod_rewrite.

это простые URI + GeoIP Continent = R = 302, правила L.

они отлично работают.мы протестировали использование ящиков на разных континентах, и все работает как положено.

мы хотели бы добавить окончательное правило, которое просто включает журнал доступа для запросов, которые не соответствуют ни одному из вышеуказанных правил, но позволяетзапрос должен быть выполнен в соответствии с просьбой.просто чтобы мы могли получить более четкое представление о том, что делает его не перенаправленным по всем правилам.

возможно с использованием apache2 + mod_rewrite?


как мы достигли этого, какответ от regilero гласит ниже (кредит - это все его):

1)

в конце правил перезаписи мы добавили правило, которое было своего рода перехватом всего для конкретного файла, который мыхотел войти.мы использовали E = envname: значение, как указано в regilero.

RewriteRule ^filename.ext$ filename.ext [L,E=logme:true]

2)

Затем мы добавили следующую запись в настраиваемом журнале

CustomLog /var/log/httpd/your_custom_log.log "%v:%p | %r | %{User-agent}i" env=logme

, как вы можете видеть,окр = logme.в основном это означает, что если переменная logme установлена, то customlog, что shizzle.

вышеупомянутый customlog довольно минимален, мы просто хотим знать сервер: port |запрошенный URL |UserAgent.Вы можете изменить его, как считаете нужным, используя «Пользовательские форматы журналов», найденные в http://httpd.apache.org/docs/2.0/mod/mod_log_config.html.

3)

, используя вышеизложенное, мы можем выяснить, что (если что-нибудь) делаетэто через наши слегка сложные (useragent + geoip continent) правила перезаписи и действуют на эту информацию соответствующим образом.

последнее замечание: хотя мы не проводили никакого реального эмпирического тестирования, я уверен, что эти «перехватить все» правила переписываниядовольно тяжелый.поэтому в идеале вы захотите сделать это только в качестве инструмента принятия решений и отключать их, как только вы определитесь с правильным курсом действий.хотя я уверен, что все зависит от того, насколько занят ваш веб-ресурс;)


, это ОЧЕНЬ полезно.Используя этот метод, вы можете регистрировать все виды деятельности.еще раз, сердце поблагодарило regilero.мы будем использовать это повсюду.

1 Ответ

3 голосов
/ 04 июля 2011

Вы можете использовать mod_rewrite, чтобы установить переменную окружения в последнем правиле всеохватывающего доступа (для тех, которые не соответствуют ни одному из правил geoIp) с тегом [E=myspecialenvname:1], вы можете сбросить эту переменную в другом подходящем случае в случаеконкретного многопетлевого процесса с [E=!myspecialenvname] по другим правилам.

Тогда вам придется регистрироваться на основе этого env.Если вы проверите customLog директиву , вы увидите синтаксис:

CustomLog file|pipe format|nickname [env=[!]environment-variable]

Третий аргумент является необязательным и определяет, регистрировать или нет конкретный запрос на основе присутствияили отсутствие конкретной переменной в серверной среде.Если указанная переменная среды установлена ​​для запроса (или не задана, в случае предложения 'env =! Name'), запрос будет зарегистрирован.

должен написать что-то вроде:

CustomLog path/to/unmatched-geoip.log "%h %l %a %A %t \"%r\" %>s %b" env=myspecialenvname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...