Laravel 5 中间件 https on aws ec2 重定向循环



基于此,我在应用程序中添加了相同的中间件,并带有重定向循环的结果。

如果用户未经过身份验证,该应用程序将重定向到登录页面,因此对我来说,这就是问题所在。或者也许不是。

ssl 证书安装正确并且可以正常工作(如果我手动转到 https://myapp.org 它按预期工作)。

主要问题是我在整个应用程序中使用辅助程序 url() 来生成 url,现在我需要重定向到安全 url。

我尝试删除该中间件,并将重定向添加到 .htaccess,但结果是相同的(此网页有一个重定向循环)。

更新我试图调试问题,看起来没有重定向到 https,这就是重定向循环的原因。我为标题添加了日志。

{
  "host": [
    "myapp.org"
  ],
  "accept": [
    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
  ],
  "user-agent": [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36"
  ],
  "accept-encoding": [
    "gzip, deflate, sdch"
  ],
  "accept-language": [
    "en-US,en;q=0.8"
  ],
  "cookie": [
    "XSRF-TOKEN=..."
  ],
  "x-forwarded-for": [
    "IP ADDRESS"
  ],
  "x-forwarded-host": [
    "myapp.org"
  ],
  "x-forwarded-server": [
    "ip-IP.compute.internal"
  ],
  "connection": [
    "Keep-Alive"
  ]
}

我也在记录$request->secure()的值,但它总是假的。

这是我的中间件(日志的结果在每个日志行旁边的注释中)

<?php namespace AppHttpMiddleware;
use Closure;
use Log;
class HttpsProtocol
{
  /**
   * Redirect to https.
   *
   * @param  IlluminateHttpRequest  $request
   * @param  Closure  $next
   *
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    if(!$request->secure() && app()->environment() === 'production') {
      Log::info(app()->environment()); // "production"
      Log::info($request->secure()); // ""
      Log::info($request->header('x-forwarded-proto')); // ""
      Log::info(json_encode($request->header())); // The json just posted
      Log::info($request->getRequestUri()); // "/auth/login"
      return redirect()->secure($request->getRequestUri());
    }
    return $next($request);
  }
}

我的应用程序在 Elastic Beanstalk (EC2 单实例)中。任何帮助将不胜感激,谢谢。

有一个包和一个要点可以解决上述问题。

最新更新