【问题标题】:Kubernetes-Ingress Server-Snippet 503 for mobile user agent用于移动用户代理的 Kubernetes-Ingress Server-Snippet 503
【发布时间】:2019-07-02 06:34:19
【问题描述】:

我正在尝试创建一个 server-sn-p,它将为移动用户返回 503。我正在这样做,通过检查用户代理。 问题: 如果是移动用户代理,Server-Snippet 不会返回 503。 总之,当用户代理不是移动设备时返回 503。手机本身,发送200。 我无法理解 Ingress 做了什么。看起来,服务器狙击手代码以某种方式“以硬编码方式”解析它。 也许有人遇到过类似的问题。如果有人可能会提示此类服务器狙击手,那就太好了。 谢谢

我尝试了几个 server-sn-ps。请检查下面的代码。

  1. 试试这是来自github的官方代码截图。

nginx.ingress.kubernetes.io/server-sn-p: 设置 $agentflag 0;

if ($http_user_agent ~* "(Mobile|ios|android)" ){ 设置 $agentflag 1; }

如果($agentflag = 1){ 返回503; }

作为json:

"nginx.ingress.kubernetes.io/server-snippet": "| set $agentflag 0; if ($http_user_agent ~* \"(Mobile|ios|android)\" ) { set $agentflag 1; } if ( $agentflag = 1 ) { return 503;}"

  1. 试试

nginx.ingress.kubernetes.io/server-sn-p: if ($http_user_agent ~* "(Mobile|ios|android)" ){ 返回503; }

作为json:

  "nginx.ingress.kubernetes.io/server-snippet": "    if ($http_user_agent ~* (Mobile|ios|android) ) {\n      return 503; }"

【问题讨论】:

    标签: kubernetes kubernetes-ingress


    【解决方案1】:

    一个简短的工作解决方案是

       annotations: 
          kubernetes.io/ingress.class: private-nginx 
          kubernetes.io/tls-acme: "true" 
          nginx.ingress.kubernetes.io/server-snippet: | 
          if ($http_user_agent ~* "(Mobile)" ) { 
            return 503; 
          }
    

    【讨论】:

      【解决方案2】:

      似乎有些事情在语法上是不正确的。 if 条件前的空格。

      参考这个sn-p

      kubernetes.io/ingress.class: nginx
      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
      nginx.ingress.kubernetes.io/server-snippet: |
        set $agentflag 0;
      
        if ($http_user_agent ~* "(Mobile)" ){
          set $agentflag 1;
        } 
      
        if ( $agentflag = 1 ) {
          return 503;
        }
      

      【讨论】:

      • 谢谢。但这不适合问题 apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: private-nginx kubernetes.io/tls-acme: "true" kubernetes.io/ingress.class: " nginx" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/server-sn-p: | if ($http_user_agent ~* "(Mobile)" ){ set $agentflag 1; } if ( $agentflag != 1 ) { 返回 503;名称:keycloak-admin-private-alb-2 命名空间:dev
      • 仍然得到 503 吗?
      • 奇怪的是,我在非移动设备上得到了 503。移动用户代理总是返回 200。独立于我在做什么。甚至(作为 json) nginx.ingress.kubernetes.io/server-sn-p: if ($http_user_agent ~* "(Mobile|ios|android)" ){ return 503; } 正在为非移动设备发送 503。但它应该发送给移动设备。
      • 你能再试一次吗?我已经更新了注释。现在我也测试了它对我有用。
      • 是的,使用 kubernetes.io/ingress.class: private-nginx kubernetes.io/tls-acme: "true"
      猜你喜欢
      • 1970-01-01
      • 2022-08-18
      • 2019-02-21
      • 1970-01-01
      • 2019-07-02
      • 2019-11-13
      • 1970-01-01
      • 2020-07-02
      • 2011-11-11
      相关资源
      最近更新 更多