[英]Setting cache-control headers for nginx ingress controller on kubernetes GKE
我有一個 ingress-nginx 控制器處理到我托管在 GKE 上的 Kubernetes 集群的流量。 我使用文檔中的 helm 安裝說明進行設置:
在大多數情況下,一切正常,但如果我嘗試通過server-snippet
注釋設置緩存相關參數,則所有應獲得緩存控制標頭的服務內容都會作為404
返回。
這是我的ingress-service.yaml
文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-read-timeout: "4000"
nginx.ingress.kubernetes.io/proxy-send-timeout: "4000"
nginx.ingress.kubernetes.io/server-snippet: |
location ~* \.(js|css|gif|jpe?g|png)$ {
expires 1M;
add_header Cache-Control "public";
}
spec:
tls:
- hosts:
- example.com
secretName: example-com
rules:
- host: example.com
http:
paths:
- path: /
backend:
serviceName: client-cluster-ip-service
servicePort: 5000
- path: /api/
backend:
serviceName: server-cluster-ip-service
servicePort: 4000
同樣,只有與正則表達式匹配的資源才會返回404
(所有.js
文件、 .css
文件等)。
關於為什么會發生這種情況的任何想法?
任何幫助表示贊賞!
這些location
塊是last 和/或最長的 match wins ,並且由於入口本身不提供任何此類內容,因此 nginx 依賴於指向上游服務器的proxy_pass
指令。 因此,如果您收到 404,很可能是因為您的location
匹配,從而干擾了proxy_pass
之一。 很有可能您實際上想要configuration-snippet:
相反,可能與if ($request_uri ~* ...) {
結合使用以添加標頭。
可以使用指向python3 -m http.server 9090
或任何虛假上游目標的簡單 nginx.conf 在本地嘗試此操作。
另外,對於調試 nginx 入口問題,查閱其實際的nginx.conf
通常是非常寶貴的,您可以從任何一個入口 Pod 中獲取該文件,和/或查閱入口 Pod 的日志,其中 nginx 將發出有用的調試文本。
配置片段將與 nginx 入口一起使用
你可以使用類似的東西
nginx.ingress.kubernetes.io/configuration-snippet : |
if ($request_uri ~* \.(js|css|gif|jpe?g|png)) {
expires 1M;
add_header Cache-Control "public";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.