aboutsummaryrefslogtreecommitdiffhomepage
path: root/application/HttpUtils.php
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 /application/HttpUtils.php
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.
Diffstat (limited to 'application/HttpUtils.php')
-rw-r--r--application/HttpUtils.php14
1 files changed, 12 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;