From: Arthur Date: Tue, 1 Mar 2016 11:15:10 +0000 (+0100) Subject: Merge pull request #505 from ArthurHoaro/hotfix/multi-reverse-proxy X-Git-Tag: v0.6.5~3 X-Git-Url: https://git.immae.eu/?a=commitdiff_plain;h=6e7a3210c3ec2b70b748d513bbd5168a887bf0ea;hp=8710d4da8e21b31a90bdcaed10521e0b937cf6c2;p=github%2Fshaarli%2FShaarli.git Merge pull request #505 from ArthurHoaro/hotfix/multi-reverse-proxy Fixes #477: support multi reverse proxy with comma syntax --- diff --git a/application/HttpUtils.php b/application/HttpUtils.php index e2c1cb47..af7cb371 100644 --- a/application/HttpUtils.php +++ b/application/HttpUtils.php @@ -106,11 +106,21 @@ function server_url($server) // Shaarli is served behind a proxy if (isset($server['HTTP_X_FORWARDED_PROTO'])) { // Keep forwarded scheme - $scheme = $server['HTTP_X_FORWARDED_PROTO']; + if (strpos($server['HTTP_X_FORWARDED_PROTO'], ',') !== false) { + $schemes = explode(',', $server['HTTP_X_FORWARDED_PROTO']); + $scheme = trim($schemes[0]); + } else { + $scheme = $server['HTTP_X_FORWARDED_PROTO']; + } if (isset($server['HTTP_X_FORWARDED_PORT'])) { // Keep forwarded port - $port = ':'.$server['HTTP_X_FORWARDED_PORT']; + if (strpos($server['HTTP_X_FORWARDED_PORT'], ',') !== false) { + $ports = explode(',', $server['HTTP_X_FORWARDED_PORT']); + $port = ':' . trim($ports[0]); + } else { + $port = ':' . $server['HTTP_X_FORWARDED_PORT']; + } } return $scheme.'://'.$server['SERVER_NAME'].$port; diff --git a/tests/HttpUtils/ServerUrlTest.php b/tests/HttpUtils/ServerUrlTest.php index 5096db65..8a55a220 100644 --- a/tests/HttpUtils/ServerUrlTest.php +++ b/tests/HttpUtils/ServerUrlTest.php @@ -67,6 +67,19 @@ class ServerUrlTest extends PHPUnit_Framework_TestCase ) ) ); + + $this->assertEquals( + 'https://host.tld:4974', + server_url( + array( + 'HTTPS' => 'Off', + 'SERVER_NAME' => 'host.tld', + 'SERVER_PORT' => '80', + 'HTTP_X_FORWARDED_PROTO' => 'https, https', + 'HTTP_X_FORWARDED_PORT' => '4974, 80' + ) + ) + ); } /**