![ngnix - 如何使用 proxy_set_header 和 rewrite 进行条件判断](https://linux22.com/image/790134/ngnix%20-%20%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20proxy_set_header%20%E5%92%8C%20rewrite%20%E8%BF%9B%E8%A1%8C%E6%9D%A1%E4%BB%B6%E5%88%A4%E6%96%AD.png)
以下是我的 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 脚本的任何好的教程。
答案1
您可以使用地图模块实现条件行为。
以下是如何有条件地设置 X_Correlation_Id 标头的示例:
nginx.ingress.kubernetes.io/configuration-snippet: |
set $a $http_x_correlation_id;
set $my_header $request_id;
if ($a = '') {
set $my_header "default_value"; # Set a default value when $a is empty
}
proxy_set_header X_Correlation_Id $my_header;
rewrite ^/app-name(/|$)(.*) /$2 break;
请记住,在 Nginx 中使用 if 语句可能会出现问题,因此最好尽可能使用 map 模块或其他配置选项