Относительный Laravel 5.4 вместо абсолютных 302 редиректов
У меня проблемы с новым приложением Laravel за балансировщиком нагрузки. Я хотел бы, чтобы Laravel выполнял перенаправление промежуточного программного обеспечения 302 Auth на относительный путь, например, /login, а не http://myappdomain.com//login.
Я вижу только 301 переадресацию по умолчанию.htaccess Корабли Laravel, что заставляет меня верить, что в Laravel правильное поведение, я не прав?
Может ли кто-нибудь указать мне правильное направление?
1 ответ
Если вам нужно правильно определить, был ли запрос защищен за балансировщиком нагрузки, вы должны сообщить платформе, что вы находитесь за прокси-сервером. Это гарантирует, что route()
а также url()
помощники генерируют правильные URL-адреса и устраняют необходимость создавать относительные перенаправления, которые не на 100% поддерживаются браузерами, а также не будут работать должным образом при обслуживании веб-страницы из подпути.
Это то, что мы используем для решения этой проблемы, и пока оно работает для нас:
.env
LOAD_BALANCER_IP_MASK=aaa.bbb.ccc.ddd/xx #Subnet mask
LoadBalanced Middleware
class LoadBalanced {
public function handle($request, $next) {
if (env("LOAD_BALANCER_IP_MASK")) {
$request->setTrustedProxies([ env("LOAD_BALANCER_IP_MASK") ]);
}
$next($request);
}
}
Затем вставьте промежуточное ПО в свой Kernel.php
:
protected $middleware = [
LoadBalanced::class,
//.... It shouldn't matter if it's first or last as long as other global middleware don't need it
];
Эта функция доступна для Laravel, потому что она использует запрос Symfony в качестве базы. Как это работает, так это то, что балансировщик нагрузки передает некоторые важные заголовки. В настоящее время Symfony понимает:
protected static $trustedHeaders = array(
self::HEADER_FORWARDED => 'FORWARDED',
self::HEADER_CLIENT_IP => 'X_FORWARDED_FOR',
self::HEADER_CLIENT_HOST => 'X_FORWARDED_HOST',
self::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO',
self::HEADER_CLIENT_PORT => 'X_FORWARDED_PORT',
);
которые имеют информацию относительно пользователя, делающего запрос к балансировщику нагрузки, и используемого протокола.
Также согласно комментариям каркаса:
Заголовок FORWARDED является стандартом для rfc7239.
Другие заголовки являются нестандартными, но широко используются популярными обратными прокси-серверами (такими как Apache mod_proxy или Amazon EC2).