【问题标题】:Lumen does not detect https behind a reverse proxyLumen 没有检测到反向代理后面的 https
【发布时间】:2020-05-15 04:21:38
【问题描述】:

我在一个 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?

谢谢。

【问题讨论】:

  • Laravel 有一个trustedproxies.php 配置文件,不知道Lumen 是如何处理的

标签: php laravel ssl lumen


【解决方案1】:

这里有一个详细的实现,适合不太熟悉 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-PROTO 标头发送到后端服务器

【讨论】:

    【解决方案2】:

    谢谢你,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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 2015-07-16
      • 2015-05-14
      • 2023-03-23
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多