【问题标题】:GCP CDN - server requests return a 404GCP CDN - 服务器请求返回 404
【发布时间】:2021-10-28 17:55:53
【问题描述】:

我按照指南设置了an external global, app engine based, load balancer。我通过勾选 LB 配置设置中的小框将其链接到 Google 的 CDN。

现在,当我加载我的域名时,它显示CANNOT GET /。该请求返回 404,以及一些 C S P: The page’s settings blocked the loading of a resource at inline (“default-src”). 错误消息。

在添加 CDN 之前运行良好。所以,我假设我的应用服务器配置很好。 在负载均衡器详细信息中,监控部分下方有一个小图表,其中显示了流量如何流动。 它显示了来自 3 个全局区域的流量,到达 LB 的前端,然后到 / (unknown) 和 / (unmatched) 作为URL Rule,然后到我定义的后端服务,最后到标记为 NO_BACKEND_SELECTED 的后端实例.

我猜这个问题来自URL Rule 或Backend Instance,但文档中几乎没有。进行故障排除。 我跟着医生。设置LB。使用 App Engine 进行设置非常简单,因此几乎没有犯错的余地。但我可能仍然错过了一些东西。 在“创建无服务器 NEG”中,我确实选择了 App Engine,并选择了 default 作为服务名称(虽然我不确定 default 的实际含义)。

知道缺少什么吗?

编辑:

因此,在负载平衡菜单中,我转到顶部的“后端”部分,然后选择我的后端。在这里,我有后端的“常规属性”列表。除了在“后端”下,它显示以下内容:后端包含虚拟机或网络端点组的实例组。此后端服务尚无后端编辑

从那里,我可以单击编辑链接,这会将我重定向到“后端服务编辑”菜单。我确实在那里选择了一个后端。我确实使用 App Engine 创建了一个无服务器 NEG。

那么,缺少什么? Google 的无服务器后端有什么问题吗?

【问题讨论】:

    标签: google-cloud-platform load-balancing


    【解决方案1】:

    我想帮助您解决您面临的问题。

    If the responses from your external backend are not cached by Cloud CDN

    确保:

    -通过将 enableCDN 设置为 true,您已在包含指向外部后端的 NEG 的后端服务上启用 Cloud CDN。 (根据您的描述完成)。

    -您的外部后端提供的响应满足 Cloud CDN 缓存要求。例如,您正在从源发送Cache-Control: public, max-age=3600 响应标头。

    The current implementation of Cloud CDN stores responses in cache if all of the following are true.

    属性: 服务者

    要求: 后端服务、后端存储桶或启用 Cloud CDN 的外部后端


    属性: 回应

    要求: 获取请求


    属性: 状态码

    要求: 200、203、204、206、300、301、302、307、308、404、405、410、421、451 或 501。


    属性: 新鲜度

    要求:
    响应有一个带有 max-age 或 s-maxage 指令的 Cache-Control 标头,或带有未来时间戳的 Expires 标头.

    对于没有年龄的可缓存响应(例如,没有缓存),必须显式提供 public 指令。

    使用 CACHE_ALL_STATIC 缓存模式,如果不存在新鲜度指令,则静态内容类型的成功响应仍然可以缓存。

    使用 FORCE_CACHE_ALL 缓存模式,任何成功的响应都可以缓存。

    如果启用了负缓存并且状态代码与负缓存指定 TTL 的状态代码匹配,则响应符合缓存条件,即使没有明确的新鲜度指令。


    属性: 内容

    要求:
    包含有效的 Content-Length、Content-Range 或 Transfer-Encoding: chunked header。

    例如,正确匹配响应大小的 Content-Length 标头。


    属性: 尺寸

    要求:
    小于或等于最大尺寸。 对于大小在 10 MB 和 5 TB 之间的响应,请参阅字节范围请求中描述的其他缓存性限制。


    Please validate the URL Mapping too:

    这是一个参考示例,请根据您的项目进行调整。

    1. 创建一个 YAML 文件 /tmp/http-lb.yaml,确保将 PROJECT_ID 替换为您的项目 ID。

    当用户请求路径/*时,该路径在后端被重写为内容的实际位置,即/love-to-fetch/*。

    
    defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
    hostRules:
    - hosts:
      - '*'
      pathMatcher: path-matcher-1
    name: http-lb
    pathMatchers:
    - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/cats
      name: path-matcher-1
      pathRules:
      - paths:
        - /*
        routeAction:
          urlRewrite:
            pathPrefixRewrite: /love-to-fetch/
        service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    tests:
    - description: Test routing to backend bucket, dogs
      host: example.com
      path: /love-to-fetch/test
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/dogs
    
    
    1. 验证 URL 映射。
    gcloud compute url-maps validate --source /tmp/http-lb.yaml
    

    如果测试通过并且命令输出成功消息,则将更改保存到 URL 映射。

    1. 更新网址映射。
    gcloud compute url-maps import http-lb \
       --source /tmp/http-lb.yaml \
       --global
    

    Using URL maps

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 2020-12-18
      • 2013-06-18
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      相关资源
      最近更新 更多