Created
March 23, 2018 12:01
-
-
Save laurentiu1981/c9d0e3916d22811e00b500896e228309 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
deci ar fi cam asa: | |
ai avea de adaugat o clasa intr-un modul custom numita <nume_modul>ServiceProvider | |
care sa extinda ServiceProviderBase, asta ar trebui sa stea in folderul src. | |
e.g. daca numele modulului e xxx_yyy, atunci clasa ar trebui sa fie XxxYyyServiceProvider | |
===================== | |
namespace Drupal\xxx_yyy; | |
use Drupal\Core\DependencyInjection\ContainerBuilder; | |
use Drupal\Core\DependencyInjection\ServiceProviderBase; | |
class XxxYyyServiceProvider extends ServiceProviderBase { | |
public function alter(ContainerBuilder $container) { | |
$reverse_proxy_definition = $container->getDefinition('http_middleware.reverse_proxy'); | |
$reverse_proxy_definition->setClass('Drupal\xxx_yyy\StackMiddleware\MyReverseProxyMiddleware'); | |
} | |
} | |
=========================== | |
Practic alterezi service-ul core sa foloseasca clasa ta. | |
Clasa ta trebuie sa extinda ReverseProxyMiddleware si ai de facut override la function setSettingsOnRequest | |
Aici core-ul altereaza putin requestul, pe baza unor setari, deci ar trebui doar sa adaugi la ce face el, inca 2 linii aprox: | |
namespace Drupal\xxx_yyy\StackMiddleware; | |
use Drupal\Core\Site\Settings; | |
use Drupal\Core\StackMiddleware\ReverseProxyMiddleware; | |
use Symfony\Component\HttpFoundation\Request; | |
class MyReverseProxymiddleware extends ReverseProxyMiddleware { | |
/** | |
* 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 = $settings->get('reverse_proxy_proto_header', 'X_FORWARDED_PROTO'); | |
$request::setTrustedHeaderName($request::HEADER_CLIENT_PROTO, $proto_header); | |
$host_header = $settings->get('reverse_proxy_host_header', 'X_FORWARDED_HOST'); | |
$request::setTrustedHeaderName($request::HEADER_CLIENT_HOST, $host_header); | |
$port_header = $settings->get('reverse_proxy_port_header', 'X_FORWARDED_PORT'); | |
$request::setTrustedHeaderName($request::HEADER_CLIENT_PORT, $port_header); | |
$forwarded_header = $settings->get('reverse_proxy_forwarded_header', 'FORWARDED'); | |
$request::setTrustedHeaderName($request::HEADER_FORWARDED, $forwarded_header); | |
$proxies = $settings->get('reverse_proxy_addresses', []); | |
if (count($proxies) > 0) { | |
$request::setTrustedProxies($proxies); | |
} | |
} | |
else { | |
$request->server->set('REMOTE_ADDR', $_SERVER['REMOTE_ADDR']); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment