2017-11-08 3 views
0

を動作するようにTrustProxiesミドルウェアLaravel 5.4 relative instead of absolute 302 redirects
を取得できません、私は仕事にLaravel TrustProxiesミドルウェアを取得しようとしますが、X_FORWARDED_PROTOヘッダを無視しているように思われてきました。 (ちょうど5.4から5.5へのアップグレード)Laravelでがここに右方向に尖った後

私のシナリオ
私のアプリがHTTPSからHTTPにすべてのトラフィックを変換、ロードバランサの背後にあります。

私の問題は
すべてのリダイレクトではなく、元のHTTPSプロトコルのHTTPを介して行っています。

未遂ソリューション
5.5 Laravel 5.4からのアップグレードと今箱から出しLaravelに同梱されてTrustProxiesミドルウェアを活用します。
ミドルウェアがあります

protected $proxies = '*'; 

/** 
* The current proxy header mappings. 
* 
* @var array 
*/ 
protected $headers = [ 
    Request::HEADER_FORWARDED => 'FORWARDED', 
    Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR', 
    Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST', 
    Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT', 
    Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO', 
]; 

のApp \のHttp \カーネルは、ミドルウェア登録されている:

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 
    \App\Http\Middleware\TrimStrings::class, 
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
    \App\Http\Middleware\TrustProxies::class, 
]; 

私の調査結果を:サーバーから
のTCPダンプは、ヘッダを明らかに:

をリクエスト:

GET/HTTP/1.1 
X_FORWARDED_PROTO: HTTPS 
Host: mywebsiteaddress.com 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0) Gecko/20100101 Firefox/56.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate, br 
Connection: keep-alive 
Upgrade-Insecure-Requests: 1 

が、応答はHTTP経由で場所を持っています

HTTP/1.1 302 Found 
Date: Wed, 08 Nov 2017 18:03:48 GMT 
Server: Apache/2.4.18 (Ubuntu) 
Cache-Control: no-cache, private 
Location: http://mywebsiteaddress.com/home 
Set-Cookie: laravel_session=eyJp...In0%3D; expires=Wed, 08-Nov-2017 20:03:48 GMT; Max-Age=7200; path=/; HttpOnly 
Content-Length: 376 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=UTF-8 

追加コメント:
私のアプリが5.4から5.5にアップグレードされたので、私はそうしてきただろうクラスTrustProxiesをコピーそこには5.5の新インストールがあります。その後、カーネルに登録しました。
多分私はここで一歩足りません。

私の希望:私の疲れは、私は単純なミスを眺めてる私の心を曇らせていないことを

ご提案は、事前にお願いします!

更新:
アパッチで有効log_forensicsモジュールとIは、要求のx転送-プロトヘッダを参照。

なぜLaravelがヘッダー配列に含まれないのでしょうか?

+0

ところで、私はdd($ _ SERVER)をしました。 routes/web.phpの直前にリダイレクトされ、couldnt 'はX_FORWARED_PROTOを見出します。 – Mario

+0

あなたは5.4の上で動作しましたか? – Suraj

+0

@Suraj私は5.4でテストしませんでした。なぜならそれはより多くの手動設定を表していたからです。私は成功率が高いと考えて5.5にアップグレードすることを選択しました。 新しい5.5モックアプリケーションでテストしようとしていますが、シナリオを再現するためにネットワークチームとのコラボレーションが必要です – Mario

答えて

0

本当に疲れました。
ロードバランサはC#(IIS)アプリケーションのX_FORWARDED_PROTOヘッダーを使用していました。そのため、ネットワークチームは今回も同じ方法でヘッダーを設定しました。
Laravelの場合、ヘッダーはX-FORWARDED-PROTOの形式でなければなりません。これは正しい名前(アンダースコアの代わりにダッシュ)です。
Laravel(現実的にはSymfony)がリクエストのヘッダーを破棄していた理由です。

関連する問題