在Kubernetes Ingress Nginx服务器代码段中使用位置块会导致404

在Kubernetes Ingress Nginx服务器代码段中使用位置块会导致404,nginx,kubernetes,kubernetes-ingress,Nginx,Kubernetes,Kubernetes Ingress,我希望有人能帮我,因为我被卡住了 我将从传统的nginx/node服务器配置转移到我们的nginx配置,其中nginx和node服务器都在同一台机器上 在Kubernetes中,入口控制器(nginx)显然位于另一个容器中 我陷入困境的地方是重新实现我们的规则,即使用位置块禁用对图像和资产的访问日志记录 我们的配置看起来像 location ~* \.(?:jpg|jpeg|gif|png|ico|cur|mp4|ogg|ogv|webm|htc)$ { access_log off;

我希望有人能帮我,因为我被卡住了

我将从传统的nginx/node服务器配置转移到我们的nginx配置,其中nginx和node服务器都在同一台机器上

在Kubernetes中,入口控制器(nginx)显然位于另一个容器中

我陷入困境的地方是重新实现我们的规则,即使用位置块禁用对图像和资产的访问日志记录

我们的配置看起来像

location ~* \.(?:jpg|jpeg|gif|png|ico|cur|mp4|ogg|ogv|webm|htc)$ {
  access_log off;
  expires 2M;
  add_header Cache-Control "public, max-age=5184000"; # 5184000 is 60 days
}
当我在
服务器代码段中实现相同的块时,它匹配,但所有资产抛出404

我在谷歌上搜索了一下,找到了一个答案,也许可以解释为什么会在这里

但是建议的答案提示使用
if
块而不是
位置
块,因为该位置会干扰上游代理,但是,仅从
位置
上下文中,无法从
if
块内部禁用访问日志

我的入口的其余部分看起来像(其他所有内容都是默认的)

映像位于上游服务器路径上的/images/

因此,我又回到了试图找出如何让这些位置块工作的问题上,这样我就可以从
服务器代码片段中禁用这些图像的访问日志


那么,有谁能告诉我如何让上面的位置块不在ingress控制器中为资产抛出404?

我假设您的后端为您的资产提供服务,所以我认为问题在于您的
位置{}
块没有像nginx ingress中定义的常规路径那样的上游路径

nginx ingress控制器的
nginx.conf
中有很多lua代码,因此理解可能需要时间,但您可以在本地复制
nginx.conf

$ kubectl cp nginx-ingress-controller-xxxxxxxxx-xxxxx:nginx.conf .
检查为当前服务定义的
location{}
块,并将它们复制到
服务器代码段的底部,如下所示:

我相信像这样的
服务器代码片段可以:

location ~* \.(?:jpg|jpeg|gif|png|ico|cur|mp4|ogg|ogv|webm|htc)$ {
  access_log off;
  expires 2M;
  add_header Cache-Control "public, max-age=5184000"; # 5184000 is 60 days
  <== add what you copied here
  set $namespace      "k8s-namespace";
  set $ingress_name   "ingress-name";
  set $service_name   "service-name";
  set $service_port   "80";
  set $location_path  "/images";
  ...
  ...
  ...
  proxy_http_version                      1.1;

  proxy_cookie_domain                     off;
  proxy_cookie_path                       off;

  # In case of errors try the next upstream server before returning an error
  proxy_next_upstream                     error timeout;
  proxy_next_upstream_tries               3;

  proxy_pass http://upstream_balancer;

  proxy_redirect                          off;
}
location~*\(?:jpg | jpeg | gif | png | ico | cur | mp4 | ogg | ogv | webm | htc)${
访问/注销;
2米;
添加#头缓存控制“public,max age=5184000”#5184000为60天

你剩下的入口是什么样子的?还有,你在后端服务中的资产在哪里?我刚刚在最初的帖子中添加了一些信息:)给了你一些见解,希望它能帮助你阅读,让我测试一下,我会回复你的…对不起,今天很忙…我也不知道你能做kubectl cp,太棒了,谢谢你不要给小费!
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|mp4|ogg|ogv|webm|htc)$ {
  access_log off;
  expires 2M;
  add_header Cache-Control "public, max-age=5184000"; # 5184000 is 60 days
  <== add what you copied here
  set $namespace      "k8s-namespace";
  set $ingress_name   "ingress-name";
  set $service_name   "service-name";
  set $service_port   "80";
  set $location_path  "/images";
  ...
  ...
  ...
  proxy_http_version                      1.1;

  proxy_cookie_domain                     off;
  proxy_cookie_path                       off;

  # In case of errors try the next upstream server before returning an error
  proxy_next_upstream                     error timeout;
  proxy_next_upstream_tries               3;

  proxy_pass http://upstream_balancer;

  proxy_redirect                          off;
}