Sábado, 19 Julio 2014 22:35

Virtuemart, Paypal y la programación PHP en un entorno de Proxy inverso (Reverse Proxy)

Valora este artículo
(0 votos)

Normalmente en un servidor web normal del tipo apache, nginx o similares para descubrir desde cual IP nos están accediendo a la web, con obtener el valor de la variable de estándar 'REMOTE_ADDR' nos dará el valor correcto. Pero esto no siempre es cierto, puede suceder que se haya implementado en el servidor una cache para mejorar el rendimiento y el posicionamiento SEO por reducir el tiempo de respuesta, activando un Proxy inverso (Reverse Proxy) o un balanceador de carga con keealived, con esto conseguimos que las paginas o ficheros mas utilizados sean almacenados en una cache en memoria mejorando sustancialmente el tiempo de respuesta, nosotros utilizamos SQUID como cache para dicho propósito pero existen otras igual de efectivas como varnish o incluso nginx.

Con modificar nuestra programación PHP con estas simples lineas podemos controlar también cuando la IP pasa a través de un PROXY.

Ver código
  1. <?php
  2.     if(!empty($_SERVER['HTTP_CLIENT_IP']))
  3.     {
  4.       echo $_SERVER['HTTP_CLIENT_IP'];
  5.     }
  6.     elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
  7.     {
  8.       echo $_SERVER['HTTP_X_FORWARDED_FOR'];
  9.     }
  10.     else
  11.     {
  12.       echo $_SERVER['REMOTE_ADDR'];
  13.     }
  14. ?>


Existen casos especiales como en virtuemart 2.0 que el sistema de pago paypal genera un error por detectar de forma incorrecta la IP de origen:

Error code 506. Possible fraud. Error with REMOTE IP ADDRESS = 127.0.0.1.
The remote address of the script posting to this notify script does not match a valid PayPal ip address

En INODE64 hemos realizado un pequeño parche que soluciona este problema. Ya lo hemos reportado en el foro, pero aun la versión 2.6.6 aun no lo tiene aplicado.

icon paypal_proxy.diff (2.9 kB 2014-07-20 00:01:35)

Leer 36210 veces Modificado por última vez en Domingo, 20 Julio 2014 00:05

Escribir un comentario


Código de seguridad
Refescar