では、開発目的のために、専用のWebサーバーを用意しました。現在インターネットに直接接続されていないため、別のサーバーにApacheリバースプロキシをセットアップし、開発サーバーに転送しています。
このようにして、サーバーへのWebアクセスを取得できます。
問題は、Laravel内のルートに、内部サーバーのIPアドレスまたはサーバーのコンピューター名がプレフィックスとして追加されていることです。
たとえば、 http://subdomain.test.com にアクセスしますが、route()
ヘルパーを使用して生成されたすべてのルートに次のURLが表示されます:http://10.47.32.22
http://subdomain.test.com
ではありません。
リバースプロキシは次のように設定されます。
<VirtualHost *:80>
ServerName igateway.somedomain.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://10.47.32.22:80/
ProxyPassReverse / http://10.47.32.22:80/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
実際のドメイン名をconfig\app.php
に設定しました。
質問
ルーティングで使用するデフォルトのURLを設定するにはどうすればよいですか?内部アドレスを使用したくないので、リバースプロキシのポイントを無効にします。
すべてのルートをRoute::group(['domain' ...
グループに含めようとしましたが、どちらも機能しません。
Laravel 5アプリケーションがSSLロードバランサーの背後にあることを認識していなかったとき、私は同じ(または同様の問題)に遭遇しました。
次のデザインがあります。
ただし、これにより、HTMLコード内のすべてのURLがhttp://スキーマで生成されます。
以下は、スキーマ(httpとhttps)を含め、これを機能させるための簡単な方法です。
app/Http/routes.phpの上に次のコードを配置します
$proxy_url = getenv('PROXY_URL');
$proxy_schema = getenv('PROXY_SCHEMA');
if (!empty($proxy_url)) {
URL::forceRootUrl($proxy_url);
}
if (!empty($proxy_schema)) {
URL::forceSchema($proxy_schema);
}
次に、次の行を。envファイルに追加します。
PROXY_URL = http://igateway.somedomain.com
生成されたHTMLコードのスキーマもhttp://からhttps://に変更する必要がある場合は、次の行も追加します。
PROXY_SCHEMA = https
最新バージョンのlaravel forceSchema
メソッド名はforceScheme
に変更され、上記のコードは次のようになります。
if (!empty($proxy_schema)) {
URL::forceScheme($proxy_schema);
}
わかった、わかった。うまくいけば、これは将来誰かを助けるでしょう。
Laravelはhttpリクエストのconfig\app.php
ファイルのurl
プロパティを無視しているように見えます(職人専用であることを示しています)代わりに、Apacheが提供するHTTP_Host
またはSERVER_NAME
を使用していますURLのドメインを生成します。
このデフォルトのURLを上書きするには、routes.php
ファイルに移動し、次のメソッドを使用します。
URL::forceRootUrl('http://subdomain.newurl.com');
これにより、URLジェネレーターは、HTTP_HostまたはSERVER_NAME値の代わりに新しいURLを使用するようになります。
Laravelにはもっと便利な解決策があるようです。そこで答えを確認してください: ロードバランサの背後でLaravel 5を使用してSSLを構成するにはどうすればよいですか(SSL終了) ?
このトピックは古いものであることはわかっていますが、DatabaseSessionHandler.pdf [@ Illuminate/Session]の次の行を置き換えることでこの問題を解決しています。
protected function ipAddress()
{
return $_SERVER['HTTP_X_FORWARDED_FOR'];
// return $this->container->make('request')->ip();
}
もちろん、最初にセッションテーブルを移行して構成を設定する必要があります
(。env変数SESSION_DRIVER =データベース)
@TimeLordのソリューションのフォローアップ:
laravelの最新バージョンでは、強制スキーマの名前が変更され、現在はURL::forceScheme()
です。