比如在有些時候我們需要在 server 里或者 location 里添加一些參數,例如添加包體大小限制、添加跨域配置、添加自定義header、處理響應header等等。遇到這些需求的時候,我們開始懷念原生的 nginx 配置,因為那樣我們可以隨心所欲的修改。
我們有這樣的需求,官方在做這個的時候,也做了一些考慮,為了我們提供了一些配置切入點,我們可以通過配置 annotation,按照官方提供的一些規則來將我們的一些自定義配置插入進去。
官方文檔地址:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
本文列出兩種切入點示例:
- nginx.ingress.kubernetes.io/configuration-snippet (用於插入 location 塊代碼段)
- nginx.ingress.kubernetes.io/server-snippet (用於插入 server 塊中的代碼段)
使用示例:
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/server-snippet: |-
add_header Shy-Test 888;
more_set_headers 'Shy-Hello: hello' 'Demo: demo';
labels:
cattle.io/creator: norman
name: website-muses-docs
namespace: muses-docs
// 省略更多配置
如上示例就是在 nginx 的 server 塊中添加兩行代碼。
add_header Shy-Test 888; 就是給響應頭添加一個header。
more_set_headers 'Shy-Test: 666' 'Demo: demo'; 也是給響應頭設置多個 header,與 add_header 不同的是,這個會覆蓋,add 是追加。
或者是如下這種:
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Request-Id: $req_id";
或者這個:
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header My-Custom-Header $http_my_custom_header;