ロードバランサの背後にある要求が安全かどうかを適切に判断する必要がある場合は、フレームワークにプロキシの背後にいることを知らせる必要があります。これにより、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など)では広く使われています 。
これで何を解決しようとしていますか? – apokryfos
私はロードバランサの背後にあるアプリを持っています。ロードバランサはhttpsを受信し、httpを自分のアプリに送信します。問題は、私のアプリが絶対URLでログインするようにユーザーをリダイレクトしていることです。つまり、HTTPSをHTTPに置き換えます。 ロードバランサでHTTPからHTTPSへのリダイレクトを行うと、リダイレクトの問題が多すぎます。 – Mario
これは[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