[英]Lumen does not detect https behind a reverse proxy
我在 docker 容器中的反向代理后面有一個 Lumen API,它只在端口 80 上響應。所以客戶端請求某個域https://xyz.ab/api/endpoint並且一切正常。
但是如果你想使用Request->secure()
來檢查你是否在 http 或 https lumen 上返回 false (= http) 並生成錯誤的 url。
我嘗試使用URL::forceScheme("https");
告訴 lumen 無論如何都使用 https 但 lumen 仍然堅持使用 http。
我不想在我的容器中安裝證書只是為了讓 lumen 相信 https。
有沒有可以全局配置 lumen 以使用 https 而不是 http 的地方?
謝謝你。
對於那些不太熟悉 Lumen 的人,這里有一個詳細的實現。
在 App\\Http\\Middleware 下創建一個中間件( TrustedProxiesMiddleware
)。
<?php namespace App\\Http\\Middleware; use Illuminate\\Http\\Request; class TrustedProxiesMiddleware { /** * use 0.0.0.0/0 if you trust any proxy, otherwise replace it with your proxy ips * * @var string[] */ protected $trustedProxies = [ '0.0.0.0/0' ]; public function handle(Request $request, \\Closure $next){ Request::setTrustedProxies($this->trustedProxies); return $next($request); } }
在bootstrap/app.php
文件中,添加這個中間件:
$app->middleware([ //other middlewares........ App\\Http\\Middleware\\TrustedProxiesMiddleware::class ]);
確保您的代理將X-FORWARDED-PROTO
標X-FORWARDED-PROTO
送到后端服務器
謝謝你,PtrTon。 那正是正確的答案。 Lumen 使用Illumintae\\Http\\Request
,它擴展了Symfony\\Component\\HttpFoundation
,其中包括setTrustedProxies
方法。
所以我基本上必須做的是:
配置我的反向代理以轉發正確的標頭,它們是:
對於 ssl,添加 X_FORWARDED_PROTO=https 或 X_FORWARDED_PORT=443 就足夠了,因為這些是 secure() 方法正在尋找的值。 一旦添加它們並告訴 lumen 信任代理 secure() 就會返回 true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.