首页 > 解决方案 > 使用 nginx-ingress 在 gke 中进行 gzip

问题描述

我正在尝试将 gzip 配置为在运行在具有 GKE 中的 nginx-ingress 的 kubernetes 上的 python 应用程序中工作。但是我发现在 ingress-controller config-map 中启用 gzip 是没有用的,因为我需要在后端启用压缩。

如何在我的 python 应用程序的后端启用压缩以在 nginx 控制器上运行 gzip?

我的主要问题是在stackoverflow中搜索我知道我需要将压缩放在后端,只是不知道该怎么做。

标签: kubernetesgoogle-cloud-platformgzipgoogle-kubernetes-engine

解决方案


特别关注此问题的标题,并扩展用户@Raunak Jhawar 所指出的此类设置示例。

您可以nginx-ingress通过更新ingress-nginx-controller configmap来配置压缩数据。

这将适用于路径:

  • Pod----> NGINX Ingress controller- GZIP-> Client(网络浏览器)

要启用此类设置,您需要编辑Ingress控制器配置图,如下所示:

  • $ kubectl edit configmap -n ingress-nginx ingress-nginx-controller
data: # ADD IF NOT PRESENT
  use-gzip: "true" # ENABLE GZIP COMPRESSION
  gzip-types: "*" # SPECIFY MIME TYPES TO COMPRESS ("*" FOR ALL) 

您可以通过以下链接找到更多参考和配置选项:

旁注!

您还可以使用其他编辑资源的方法,例如:$ kubectl patch

此更改将使nginx-ingress-controllerPod 自动重新配置。

我在下面提供了此类设置的示例。


要检查压缩是否发生以及它是否正常工作,我使用了以下设置:

您可以通过以下任一方式检查您的设置是否nginx-ingress支持gzip压缩:

  • Developer tools使用您选择的浏览器进行检查:

    • Chrome-> F12-> Network-> 转到站点(或刷新)并按下示例文件(查看Response Header):

    响应标题

  • 您还可以使用curl如下命令(source):

    • $ curl $URL$ --silent --write-out "%{size_download}\n" --output /dev/null-无需压缩即可获得大小
    • $ curl $URL$ --silent -H "Accept-Encoding: gzip,deflate" --write-out "%{size_download}\n" --output /dev/null-通过压缩获取大小(如果支持)

99%以上方法都显示了大约(5MB文件压缩到50KB)的压缩率


我还鼓励您查看以下链接以获取更多参考:


推荐阅读