Use protocol default port with HTTP_X_FORWARDED_PROTO
authorBryan Davis <bd808@wikimedia.org>
Tue, 26 Aug 2014 03:44:22 +0000 (21:44 -0600)
committerBryan Davis <bd808@wikimedia.org>
Tue, 26 Aug 2014 03:54:41 +0000 (21:54 -0600)
When $_SERVER['HTTP_X_FORWARDED_PROTO'] is set, keep the detected
protocol default port rather than using the local server port when
creating a canonical URL.

Bug: 70021
Change-Id: I2b37da5872929e1c461ff20cccf3dfe11f182a2f

includes/WebRequest.php

index a1fa0eb..b187c4a 100644 (file)
@@ -181,7 +181,12 @@ class WebRequest {
                                continue;
                        }
                        $host = $parts[0];
-                       if ( $parts[1] === false ) {
+                       if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {
+                               // Bug 70021: Assume that upstream proxy is running on the default
+                               // port based on the protocol. We have no reliable way to determine
+                               // the actual port in use upstream.
+                               $port = $stdPort;
+                       } elseif ( $parts[1] === false ) {
                                if ( isset( $_SERVER['SERVER_PORT'] ) ) {
                                        $port = $_SERVER['SERVER_PORT'];
                                } // else leave it as $stdPort