流明未在反向代理后面检测到https

时间:2020-01-29 16:01:38

标签: php laravel ssl lumen

我在docker容器中的反向代理后面有一个Lumen API,该容器仅在端口80上响应。因此,客户端请求某个域https://xyz.ab/api/endpoint,一切正常。

但是,如果您想使用Request->secure()检查您使用的是http还是https,那么lumen返回false(= http)并生成错误的网址。

我尝试使用URL::forceScheme("https");来告诉lumen无论如何都使用https,但是lumen仍然坚持使用http。

我不想只是为了让流明相信https而在容器中安装证书。

是否存在可以全局配置流明以使用https而不是http的地方?

谢谢。

1 个答案:

答案 0 :(得分:0)

谢谢,PtrTon。那是正确的答案。流明使用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()方法正在寻找的值。添加它们并告诉流明信任代理后,secure()就会返回true。