aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArthurHoaro <arthur@hoa.ro>2016-02-28 16:24:18 +0100
committerArthurHoaro <arthur@hoa.ro>2016-02-28 16:24:18 +0100
commit85244fa0d06eec620f8476817f68d8ea2dca0e38 (patch)
tree0513dad3f290e1e5d41c0760d24aa96a7590c2ce
parent8710d4da8e21b31a90bdcaed10521e0b937cf6c2 (diff)
downloadShaarli-85244fa0d06eec620f8476817f68d8ea2dca0e38.tar.gz
Shaarli-85244fa0d06eec620f8476817f68d8ea2dca0e38.tar.zst
Shaarli-85244fa0d06eec620f8476817f68d8ea2dca0e38.zip
Fixes #477: support multi reverse proxy with comma syntax
Going through multiple reverse proxy will store multiple scheme and port in HTTP header separated by a comma. Shaarli will use the first one to generate server_url.
-rw-r--r--application/HttpUtils.php14
-rw-r--r--tests/HttpUtils/ServerUrlTest.php13
2 files changed, 25 insertions, 2 deletions
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)
106 // Shaarli is served behind a proxy 106 // Shaarli is served behind a proxy
107 if (isset($server['HTTP_X_FORWARDED_PROTO'])) { 107 if (isset($server['HTTP_X_FORWARDED_PROTO'])) {
108 // Keep forwarded scheme 108 // Keep forwarded scheme
109 $scheme = $server['HTTP_X_FORWARDED_PROTO']; 109 if (strpos($server['HTTP_X_FORWARDED_PROTO'], ',') !== false) {
110 $schemes = explode(',', $server['HTTP_X_FORWARDED_PROTO']);
111 $scheme = trim($schemes[0]);
112 } else {
113 $scheme = $server['HTTP_X_FORWARDED_PROTO'];
114 }
110 115
111 if (isset($server['HTTP_X_FORWARDED_PORT'])) { 116 if (isset($server['HTTP_X_FORWARDED_PORT'])) {
112 // Keep forwarded port 117 // Keep forwarded port
113 $port = ':'.$server['HTTP_X_FORWARDED_PORT']; 118 if (strpos($server['HTTP_X_FORWARDED_PORT'], ',') !== false) {
119 $ports = explode(',', $server['HTTP_X_FORWARDED_PORT']);
120 $port = ':' . trim($ports[0]);
121 } else {
122 $port = ':' . $server['HTTP_X_FORWARDED_PORT'];
123 }
114 } 124 }
115 125
116 return $scheme.'://'.$server['SERVER_NAME'].$port; 126 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
67 ) 67 )
68 ) 68 )
69 ); 69 );
70
71 $this->assertEquals(
72 'https://host.tld:4974',
73 server_url(
74 array(
75 'HTTPS' => 'Off',
76 'SERVER_NAME' => 'host.tld',
77 'SERVER_PORT' => '80',
78 'HTTP_X_FORWARDED_PROTO' => 'https, https',
79 'HTTP_X_FORWARDED_PORT' => '4974, 80'
80 )
81 )
82 );
70 } 83 }
71 84
72 /** 85 /**