Cómo verificar la dirección IP real del sitio web del foro Discuz después de usar CDN
Los webmasters que utilizan espacios externos a menudo se preocupan por la lentitud de la velocidad de acceso al espacio y la lentitud de la respuesta de resolución de DNS. Para resolver estos problemas, la mejor manera es utilizar CDN para acelerar la velocidad de acceso a blogs y sitios web de China y mejorar la experiencia del usuario. Y es adecuado para la situación que encontrará DZ después de usar cualquier producto CDN.
Primero hablemos de las consecuencias de este problema:
1. Es posible que el foro de Discuz no pueda obtener la IP real del usuario, lo que hace que algunas IP de usuario muestren la IP del usuario. Nodo de producto CDN
p>2. Si el número de visitas al foro es demasiado grande, es posible que se le pregunte al usuario "Lo sentimos, su dirección IP ya no está permitida o su cuenta está deshabilitada y no puede acceder". este sitio”
Hablemos de las razones:
Usar CDN es equivalente a usar acceso proxy para los visitantes del sitio web, y DZ está diseñado para obtener la IP del proxy primero y otros servidores proxy. Se detectará si se transmite la IP real del usuario, es decir, obtener la IP proxy tiene prioridad sobre la IP real del usuario.
Si su sitio web no requiere demasiadas restricciones de acceso de los usuarios, se recomienda encarecidamente seguir los siguientes métodos:
El primer método (versión DZ X2): abra el DZ, /source/class/class_core. php;
Busque "HTTP_CLIENT_IP" y encuentre el siguiente código:
función _get_client_ip() {
$ip = $_SERVER['REMOTE_ADDR'] ;
if (isset($_SERVER['HTTP_CLIENT_IP']) amp; amp; preg_match('/^([0-9]{1, 3}\.){3}[0-9 ]{ 1, 3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset( $_SERVER ['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s' , $ _SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach ($matches[0] AS $xip) {
if (!preg_match('#^(10 |172 \.16|192\.168)\.#', $xip)) {
$ip = $xip;
romper;
}
}
}
return $ip;
}
Reemplazar con el siguiente código:
función _get_client_ip() {
$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) amp; amp; preg_match ('/^([0-9]{1, 3}\.){3}[0-9]{1, 3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) { p>
$ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR'];
}
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) amp; amp; preg_match(' /^( [0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif (isset($_SERVER['HTTP_CLIENT_IP']) amp; amp; preg_match('/^([0 -9] {1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER ['HTTP_CLIENT_IP '];
}
volver
n $ip;
}
Espero que pueda ayudarte