Маршруты Laravel за обратным прокси, показывающие неправильный URL

#php #laravel #laravel-5.8

#php #laravel #laravel-5.8

Вопрос:

Я переношу свое приложение на новый хост. Теперь я столкнулся с проблемой с URL-адресом. Например, когда я посещаю www.mydomain.be/public/dashboard приложение перенаправляет на myservername.azurewebsites.net/public/dashboard.

Коллега указал мне на «Маршруты Laravel за обратным прокси», но у меня это не работает. Я погуглил и попробовал следующее:

В MiddlewareTrustProxies.php

 protected $proxies = [
        '**'
    ];
  

в .env

 PROXY_URL = http://www.mydomain.be/public/
PROXY_SCHEMA = https
  

в routes /web.phpp

     $proxy_url    = getenv('PROXY_URL');
$proxy_schema = getenv('PROXY_SCHEMA');
if (!empty($proxy_url)) {
    URL::forceRootUrl($proxy_url);
}

if (!empty($proxy_schema)) {
    URL::forceScheme($proxy_schema);
}
  

Я также пытался в routes/web.php с

 URL::forceRootUrl('https://www.mydomain.be/public');
  

но ничто не исправляет тот факт, что в url-balk myservername.azurewebsites.net/public отображается /.

Комментарии:

1. Вы перенаправляете, вы не проксируете, поэтому любое решение, предполагающее, что вы проксируете, не будет работать, поскольку вы перенаправляете. Решение состоит в том, чтобы проксировать соединение, например, когда кто-то подключается к серверу, на котором размещен, www.mydomain.be затем сервер подключается к myservername.azurewebsites.az. net пересылает всю информацию о запросе и передает ответ обратно клиенту. Клиент никогда не должен знать, что это произошло. У всех основных веб-серверов есть возможности для этого, например, у apache есть mod_proxy и mod_proxy_http

2. итак, мне не нужно что-то менять в laravel, но настройки сервера должны быть изменены?

3. В Laravel вам все еще нужно изменить доверенные прокси, чтобы доверять входящему соединению, но кроме этого не должно быть никаких других необходимых изменений. Однако, какую бы методологию вы ни использовали, вы должны знать, как устанавливаются перенаправляемые заголовки , и соответствующим образом изменять $headers свойство в TrustProxies .

Ответ №1:

используйте фасад URL laravel здесь с forceRootUrl методом (работает на laravel 7.1)

Добавьте эту строку в метод AppServiceProvider with boot

 URL::forceRootUrl('http://localhost/proxy/');