2017-11-07 6 views
0

ロードバランサの背後にある新しいLaravelアプリケーションに問題があります。 私はLaravelにAuthミドルウェア302に相対パスを/loginの代わりにhttp://myappdomain.com/loginの代わりにリダイレクトさせたいと考えています。絶対302リダイレクトの代わりにLaravel 5.4相対

デフォルトの.htaccess Laravelで301のリダイレクトしか表示されないため、Laravel内で動作が正しいと思われます。間違っていますか?

誰かが正しい方向に向かうことができますか?

+0

これで何を解決しようとしていますか? – apokryfos

+0

私はロードバランサの背後にあるアプリを持っています。ロードバランサはhttpsを受信し、httpを自分のアプリに送信します。問題は、私のアプリが絶対URLでログインするようにユーザーをリダイレクトしていることです。つまり、HTTPSをHTTPに置き換えます。 ロードバランサでHTTPからHTTPSへのリダイレクトを行うと、リダイレクトの問題が多すぎます。 – Mario

+1

これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)です。これに対処する正しい方法は、例えば次のようなことです。 '$ request-> setTrustedProxies(あなたのロードバランサのIP * /])'。適切に設定されたロードバランサは、ヘッダーが信頼できるソースから来ている限り、正しいプロトコルを決定するためにlaravelが使用できる 'X-Forwarded-Proto'を送ります。詳細については、https://stackoverflow.com/questions/28402726/laravel-5-redirect-to-httpsをご確認ください。 – apokryfos

答えて

1

ロードバランサの背後にある要求が安全かどうかを適切に判断する必要がある場合は、フレームワークにプロキシの背後にいることを知らせる必要があります。これにより、route()url()ヘルパーが正しいURLを生成し、ブラウザによって100%サポートされていない相対リダイレクトを作成する必要がなくなり、サブパスからウェブページを提供する際に正しく動作しなくなります。

これは、我々はこの問題を解決するために使用するものであり、それが私たちのために、これまで働いています:

.env

LOAD_BALANCER_IP_MASK=aaa.bbb.ccc.ddd/xx #Subnet mask 

ロードバランスミドルウェア

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 

]; 

これは、Symphonyリクエストをベースとして使用しているため、Laravelが利用できる機能です。ロードバランサが重要なヘッダーを転送する仕組みsymfonyは現在、ロードバランサへのリクエストを行ったユーザに関する情報と使用されているプロトコルに関する情報を持っています。

また、フレームワークのコメントによると

FORWARDEDヘッダはrfc7239のような標準的です。

他のヘッダーは標準ではありませんが、普及している逆プロキシ(Apache mod_proxyやAmazon EC2など)では広く使われています 。

+0

いくつかのウェブサイト、ライブラリ、フレームワークではX_FORWARDED_PROTO(アンダースコア付き)が使われていましたが、Laravel 5.5が動作しなかったのはそれが問題でした。 Laravel(またはSympony)は、** X-FORWARDED-PROTO **(ハイフン付き)のみを認識します。 ここで私の問題を解決しました。https://stackoverflow.com/questions/47187385/cannot-get-trustproxies-middleware-to-work – Mario

+0

[sympfonyリクエスト](https:// github。 com/symfony/http-foundation/blob/master/Request.php#L216)laravelが使用するヘッダは、ヘッダをアンダースコアで指定します。ミドルウェアスタックのある時点でヘッダーの変換が行われている可能性があります。 5.5ミドルウェアは、https://github.com/laravel/laravel/blob/master/app/Http/Middleware/TrustProxies.phpでそれを維持しているようです – apokryfos

関連する問題