diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 2d80907..7b66911 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -15,6 +15,7 @@ use Drupal\Core\Logger\LoggerChannelFactory; use Drupal\Core\Site\Settings; use Drupal\Core\StringTranslation\Translator\FileTranslation; +use Drupal\Core\StackMiddleware\ReverseProxyMiddleware; use Drupal\Core\Extension\ExtensionDiscovery; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\Url; @@ -319,10 +320,6 @@ function install_begin_request($class_loader, &$install_state) { $site_path = DrupalKernel::findSitePath($request, FALSE); Settings::initialize(dirname(dirname(__DIR__)), $site_path, $class_loader); - $proxies = Settings::get('reverse_proxy_addresses', array()); - if (count($proxies) > 0) { - $request::setTrustedProxies($proxies); - } // Ensure that procedural dependencies are loaded as early as possible, // since the error/exception handlers depend on them. @@ -407,6 +404,8 @@ function install_begin_request($class_loader, &$install_state) { $kernel->setSitePath($site_path); $kernel->boot(); $container = $kernel->getContainer(); + // If Drupal is being installed behind a proxy, configure the request. + ReverseProxyMiddleware::setSettingsOnRequest($request, Settings::getInstance()); // Register the file translation service. if (isset($GLOBALS['config']['locale.settings']['translation']['path'])) { diff --git a/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php b/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php index db8019b..514cad3 100644 --- a/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php +++ b/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php @@ -47,28 +47,41 @@ public function __construct(HttpKernelInterface $http_kernel, Settings $settings */ public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) { // Initialize proxy settings. - if ($this->settings->get('reverse_proxy', FALSE)) { - $ip_header = $this->settings->get('reverse_proxy_header', 'X_FORWARDED_FOR'); + static::setSettingsOnRequest($request, $this->settings); + return $this->httpKernel->handle($request, $type, $catch); + } + + /** + * Sets reverse proxy settings on Request object. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * A Request instance. + * @param \Drupal\Core\Site\Settings $settings + * The site settings. + */ + public static function setSettingsOnRequest(Request $request, Settings $settings) { + // Initialize proxy settings. + if ($settings->get('reverse_proxy', FALSE)) { + $ip_header = $settings->get('reverse_proxy_header', 'X_FORWARDED_FOR'); $request::setTrustedHeaderName($request::HEADER_CLIENT_IP, $ip_header); - $proto_header = $this->settings->get('reverse_proxy_proto_header', 'X_FORWARDED_PROTO'); + $proto_header = $settings->get('reverse_proxy_proto_header', 'X_FORWARDED_PROTO'); $request::setTrustedHeaderName($request::HEADER_CLIENT_PROTO, $proto_header); - $host_header = $this->settings->get('reverse_proxy_host_header', 'X_FORWARDED_HOST'); + $host_header = $settings->get('reverse_proxy_host_header', 'X_FORWARDED_HOST'); $request::setTrustedHeaderName($request::HEADER_CLIENT_HOST, $host_header); - $port_header = $this->settings->get('reverse_proxy_port_header', 'X_FORWARDED_PORT'); + $port_header = $settings->get('reverse_proxy_port_header', 'X_FORWARDED_PORT'); $request::setTrustedHeaderName($request::HEADER_CLIENT_PORT, $port_header); - $forwarded_header = $this->settings->get('reverse_proxy_forwarded_header', 'FORWARDED'); + $forwarded_header = $settings->get('reverse_proxy_forwarded_header', 'FORWARDED'); $request::setTrustedHeaderName($request::HEADER_FORWARDED, $forwarded_header); - $proxies = $this->settings->get('reverse_proxy_addresses', array()); + $proxies = $settings->get('reverse_proxy_addresses', array()); if (count($proxies) > 0) { $request::setTrustedProxies($proxies); } } - return $this->httpKernel->handle($request, $type, $catch); } }