API平台管理员Docker容器在traefik后面的HTTPS请求响应头中具有HTTP链接

API平台管理员Docker容器在traefik后面的HTTPS请求响应头中具有HTTP链接,docker,docker-compose,traefik,api-platform.com,Docker,Docker Compose,Traefik,Api Platform.com,当前版本的api平台和我为docker compose/traefik-1配置找到的示例对我不起作用 我找到了一个有效的配置,并实现了我想要的功能:所有服务都没有转发端口,traefik背后的服务使用HTTP,traefik使用HTTPS,服务的主机名: 到目前为止还不错但还有一个问题, admin容器向发送一个正确的请求 https://vulcain.api-platform-new.loc 在我的设置中,但第二个 HTTP://vulcain.api-platform-ne

当前版本的api平台和我为docker compose/traefik-1配置找到的示例对我不起作用

我找到了一个有效的配置,并实现了我想要的功能:所有服务都没有转发端口,traefik背后的服务使用HTTP,traefik使用HTTPS,服务的主机名:

到目前为止还不错但还有一个问题, admin容器向发送一个正确的请求

https://vulcain.api-platform-new.loc  
在我的设置中,但第二个

HTTP://vulcain.api-platform-new.loc:443/docs.jsonld
发生这种情况的原因似乎是,文件的“链接”-请求头显示:


我花了好几天的时间在这上面,如果有人能告诉我,如何修复使用httpS的响应头链接,我会非常高兴

我今天也面临同样的问题。我使用Traefik作为我的主网关服务器(带Docker),我有一个API平台安装,在Vulcain Docker映像后面安装了API。端口443似乎在报头中转发,但协议是HTTP,这导致了问题中描述的错误。 我无法正确地配置容器的多层,以便始终正确地检测SSL。我的解决方案是编辑前端PHP控制器,使其不信任转发的端口和proto

public/index.php
中:

if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) {
  // Do not trust all forwarded headers, only the host and for.
  // @see Request::HEADER_X_FORWARDED_ALL
  Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_FOR && Request::HEADER_X_FORWARDED_HOST);
}
此外,您还可以指定一个名为
HTTPS
的环境变量,Symfony将使用该变量为生成的URL设置正确的方案。只需在
.env
文件中输入以下代码:

# Symfony router use HTTPS
# Because we can not trust port/proto forwarded by Vulcain
HTTPS=true
就这样,您的Symfony生成的URL将正确使用HTTPS方案。我知道正确的方法应该是将容器配置为转发正确的端口和proto,但这是最简单的方法

希望能有帮助

if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) {
  // Do not trust all forwarded headers, only the host and for.
  // @see Request::HEADER_X_FORWARDED_ALL
  Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_FOR && Request::HEADER_X_FORWARDED_HOST);
}
# Symfony router use HTTPS
# Because we can not trust port/proto forwarded by Vulcain
HTTPS=true