以下是我的 ngnix 模板,运行良好:
enterapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/proxy-body-size: "15m"
nginx.ingress.kubernetes.io/configuration-snippet: |
set $a $http_x_correlation_id;
set $my_header $request_id;
proxy_set_header X_Correlation_Id $my_header;
rewrite ^/app-name(/|$)(.*) /$2 break;
name: rtfp-ingress-template
namespace: rtfp
spec:
ingressClassName: rtf-nginx
rules:
- host: ap.abc.com
http:
paths:
- path: /app-name
pathType: ImplementationSpecific
backend:
service:
name: service
port:
number: 80
但是一旦我引入 if 语句来选择性地添加标头,即。如果它不是来自客户端,则应添加标头,它会失败并显示 404
nginx.ingress.kubernetes.io/configuration-snippet: |
set $a $http_x_correlation_id;
if ($a = ''){
set $my_header $request_id;
proxy_set_header X_Correlation_Id $my_header;
}
rewrite ^/app-name(/|$)(.*) /$2 break;
如果通过配置片段无法做到这一点,请告诉我通过 lua 脚本实现它的步骤是什么,以及在 ngnix kubernetes 环境中使用 lua 脚本的任何好的教程。
您可以使用地图模块实现条件行为。
以下是如何有条件地设置 X_Correlation_Id 标头的示例:
请记住,在 Nginx 中使用 if 语句可能会出现问题,通常最好尽可能使用映射模块或其他配置选项