M-A-X пишет:Нужно, чтобы нгинкс подставлял в запрос на апач хедер
Вот что сейчас содержат переменные окружения:
REMOTE_ADDR: 127.0.0.1
HTTP_X_FORWARDED_FOR: 10.15.197.32, 81.23.24.124
HTTP_X_REAL_IP: 81.23.24.124
Здесь 81.23.24.124 - мой реальный IP. Судя по всему, nginx верно подставляет соответствующие заголовки
M-A-X пишет:Потом настроить скрипты сервера, чтобы сначала проверялось
Скрипты форума проверяют данные заголовки, за исключением, правда, HTTP_X_REAL_IP. Вот соответствующие функции проверки IP из файла ядра include/vars.class.php:
CODE: function _tst_ip($env) {
if (($ip = getenv($env)) === false) return false;
$i = ip2long($ip);
if ($i === false || $i == -1 || $i == 0) return false;
// RFC 1819
// Class A: 10.0.0.0 - 10.255.255.255
// Class B: 172.16.0.0 - 172.31.255.255
// Class C: 192.168.0.0 - 192.168.255.255
$a = ($i >> 24) & 0xFF;
$b = ($i >> 16) & 0xFFFF;
if (($a == 0x0A) || ($b == 0xC0A8) || ($b >= 0xAC10 && $b <= 0xAC1F)) return false;
return $ip;
}
function Return_IP() {
if (($ip = $this->_tst_ip('HTTP_CLIENT_IP')) !== false) return $ip;
if (($ip = $this->_tst_ip('HTTP_X_FORWARDED_FOR')) !== false) return $ip;
if (($ip = $this->_tst_ip('HTTP_X_FORWARDED')) !== false) return $ip;
if (($ip = $this->_tst_ip('HTTP_FORWARDED_FOR')) !== false) return $ip;
if (($ip = $this->_tst_ip('HTTP_FORWARDED')) !== false) return $ip;
return $_SERVER['REMOTE_ADDR'];
}
Такая проверка не совсем корректна, поскольку при работе с Апачем напрямую можно подделать соответствующие HTTP-заголовки, и тем самым скрыть свой реальный IP (причём прецеденты уже были). Поэтому, в нашем случае (на этом сервере) вышеприведённый фрагмент кода заменяем строками:
CODE: function Return_IP() {
return $_SERVER['HTTP_X_REAL_IP'];
}
Для всех остальных, у кого проблем с REMOTE_ADDR нет, правильной будет такая замена:
CODE: function Return_IP() {
return $_SERVER['REMOTE_ADDR'];
}
----- Ответы на часто задаваемые вопросы в ExBB FAQ
Прежде чем задавать вопросы, попробуйте найти ответ через поиск по форуму
Проект ExBB.org помогает Вам. Узнайте, как можете помочь проекту Вы! |