簡體   English   中英

Lumen 未檢測到反向代理背后的 https

[英]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 的人,這里有一個詳細的實現。

  1. 在 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); } }
  2. bootstrap/app.php文件中,添加這個中間件:

     $app->middleware([ //other middlewares........ App\\Http\\Middleware\\TrustedProxiesMiddleware::class ]);
  3. 確保您的代理將X-FORWARDED-PROTOX-FORWARDED-PROTO送到后端服務器

謝謝你,PtrTon。 那正是正確的答案。 Lumen 使用Illumintae\\Http\\Request ,它擴展了Symfony\\Component\\HttpFoundation ,其中包括setTrustedProxies方法。

所以我基本上必須做的是:

  1. 創建一個設置可信代理的中間件。
  2. 使用我信任的代理創建一個配置文件。
  3. 配置我的反向代理以轉發正確的標頭,它們是:

    • X_FORWARDED_PROTO=https
    • X_FORWARDED_HOST={HTTP_HOST}
    • X_FORWARDED_FOR{HTTP_CLIENT_IP}
    • X_FORWARDED_PORT={SERVER_PORT}

對於 ssl,添加 X_FORWARDED_PROTO=https 或 X_FORWARDED_PORT=443 就足夠了,因為這些是 secure() 方法正在尋找的值。 一旦添加它們並告訴 lumen 信任代理 secure() 就會返回 true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM