Magento, Klarna och Lastbalanserare på Amazon   

Vi upptäckte idag när vi körde betalningar på en Magento-lösning att vi skickade fel IP-adress för kunden till Klarna. Modulen är en standardmodul från Klarna för att hantera deras betalningar.

Började undersöka koden från Klarna och insåg ganska snart att de använder REMOTE_ADDR som borde vara satt till klientens IP-adress. Däremot när man kör med Amazon Elastic Load Balancing så sätts den till en annan IP-adress. Klientens IP-adress sätts i HTTP_X_FORWARDED_FOR.

Enklaste lösningen för att få ordning på detta är ett litet "hack" längst upp i din index.php (rooten på Magento-installationen.

if (array_key_exists("HTTP_X_FORWARDED_FOR", $_SERVER)) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

Detta gör att vi skriver över värdet i REMOTE_ADDR med det korrekta värdet innan Magento börjar hantera förfrågan.