NGINX 入口注释创建 404
NGINX Ingress Annotations creates 404
我有一个 NGINX Ingress 位于几个 nodejs 服务前面。我想将路径 /graphql 限制为仅 POST 且仅 content-type=application/json
我添加了以下注释,它似乎在限制方面有效,但现在有效请求 return 404
nginx.ingress.kubernetes.io/server-snippet: |
location /graphql {
limit_except OPTIONS POST {
deny all;
}
if ($http_content_type != "application/json") {
return 403;
}
}
我认为问题在于您的 location
{} 块没有像 nginx 入口中定义的常规路径那样的上游。
从 ingress-nginx-controller
pod:
获取 nginx ingress 配置
$ kubectl exec -n your-ingress-nginx-namespace ingress-nginx-controller-xxx-xxx -- cat /etc/nginx/nginx.conf
并检查其他位置 {} 块以查找您的 /graphql
位置 {} 配置可能需要的内容。
下面的基本nginx.ingress.kubernetes.io/server-snippet
对我有用(除了POST和content-type=application/json return 403状态码,有效请求OK ):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cms-ingress-service
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/server-snippet: |
location /graphql {
limit_except OPTIONS POST {
deny all;
}
if ($http_content_type != "application/json") {
return 403;
}
set $proxy_upstream_name "default-nginx-80";
proxy_pass http://upstream_balancer;
}
spec:
...
此外,请注意 If is Evil... when used in location context。
因此,我建议您在将其投入生产之前彻底测试您的最终配置。
我有一个 NGINX Ingress 位于几个 nodejs 服务前面。我想将路径 /graphql 限制为仅 POST 且仅 content-type=application/json
我添加了以下注释,它似乎在限制方面有效,但现在有效请求 return 404
nginx.ingress.kubernetes.io/server-snippet: |
location /graphql {
limit_except OPTIONS POST {
deny all;
}
if ($http_content_type != "application/json") {
return 403;
}
}
我认为问题在于您的 location
{} 块没有像 nginx 入口中定义的常规路径那样的上游。
从 ingress-nginx-controller
pod:
$ kubectl exec -n your-ingress-nginx-namespace ingress-nginx-controller-xxx-xxx -- cat /etc/nginx/nginx.conf
并检查其他位置 {} 块以查找您的 /graphql
位置 {} 配置可能需要的内容。
下面的基本nginx.ingress.kubernetes.io/server-snippet
对我有用(除了POST和content-type=application/json return 403状态码,有效请求OK ):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cms-ingress-service
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/server-snippet: |
location /graphql {
limit_except OPTIONS POST {
deny all;
}
if ($http_content_type != "application/json") {
return 403;
}
set $proxy_upstream_name "default-nginx-80";
proxy_pass http://upstream_balancer;
}
spec:
...
此外,请注意 If is Evil... when used in location context。
因此,我建议您在将其投入生产之前彻底测试您的最终配置。