在Kubernetes Ingress Nginx服务器代码段中使用位置块会导致404
我希望有人能帮我,因为我被卡住了 我将从传统的nginx/node服务器配置转移到我们的nginx配置,其中nginx和node服务器都在同一台机器上 在Kubernetes中,入口控制器(nginx)显然位于另一个容器中 我陷入困境的地方是重新实现我们的规则,即使用位置块禁用对图像和资产的访问日志记录 我们的配置看起来像在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;
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;
}