gpt4 book ai didi

docker - API-Platform Admin-Docker-Container 在 traefik 后面的 HTTPS-Request 的响应 header 中有 HTTP 链接

转载 作者:行者123 更新时间:2023-12-02 18:34:35 24 4
gpt4 key购买 nike

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

我想出了一个有效的配置,并且可以满足我的要求:所有服务都没有转发端口,traefik 背后的服务使用 HTTP,traefik 使用 HTTPS,服务使用主机名:

  • https://client.api-platform-new.loc
  • https://admin.api-platform-new.loc
  • https://vulcain.api-platform-new.loc

  • 到目前为止,一切都很好,但还有一个问题,
    管理容器发送一个正确的请求到
    https://vulcain.api-platform-new.loc  

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

    这似乎是因为 https://vulcain.api-platform-new.loc-Request 的“链接”请求 header 说:
    link: <http://vulcain.api-platform-new.loc:443/docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"

    (注意 HTTP 与 HTTPS)

    enter image description here

    这导致“出了点问题”,因为:
    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.

    我花了几天时间做这一切,如果有人能告诉我,如何修复 Response-Header-Link 以使用 httpS,我会非常高兴!

    最佳答案

    我今天遇到了同样的问题。我使用 Traefik 作为我的主要网关服务器(使用 Docker),并且我有一个 API 平台安装,该 API 位于 Vulcain docker 镜像后面。似乎在 header 中转发了端口 443,但 proto 是 HTTP,这导致了问题中描述的错误。
    我无法正确配置多层容器,以便一路正确检测 SSL。我的解决方案是编辑前端 PHP Controller 以不信任转发的端口和原型(prototype)。

    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 方案。我知道正确的方法应该是配置容器以转发正确的端口和原型(prototype),但这是最简单的方法。

    希望能帮助到你。

    关于docker - API-Platform Admin-Docker-Container 在 traefik 后面的 HTTPS-Request 的响应 header 中有 HTTP 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61818101/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com