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

mznpcxlj  于 2023-03-01  发布在  Docker
关注(0)|答案(1)|浏览(101)

当前版本的api平台和我找到的docker-compose / traefik-1配置示例对我来说不起作用。
我想出了一个配置工作,做我想要的:所有服务都没有转发端口,traefik后面的服务使用HTTP,traefik使用HTTPS,服务的主机名:

到目前为止,一切顺利,但还有一个问题,管理容器将一个正确的请求发送到

https://vulcain.api-platform-new.loc

在我的设置中,但是第二个

HTTP://vulcain.api-platform-new.loc:443/docs.jsonld

这似乎是因为https://vulcain.api-platform-new.loc-Request的“链接”请求报头说:

link: <http://vulcain.api-platform-new.loc:443/docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"

(mind HTTP与HTTPS)

导致“出现问题”的原因是:

fetchJsonLd.ts:14 Mixed Content: The page at 'https://admin.api-platform-new.loc/#/' was loaded over HTTPS, but requested an insecure resource 'http://vulcain.api-platform-new.loc:443/docs.jsonld'. This request has been blocked; the content must be served over HTTPS.

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

km0tfn4u

km0tfn4u1#

我今天遇到了同样的问题。我使用Traefik作为我的主网关服务器(与Docker)和我有一个API平台安装与API背后的一个Vulcain Docker图像。似乎端口443是转发在头部,但proto是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,但这是最简单的方法。
希望有帮助。

相关问题