I am trying to create a server-snippet, that will return a 503 for mobile user. I am doing that, by checking the user agent. The problem: Server-Snippet is not returning 503 in case of mobile user agent. All over, the 503 is returned when the user agent is NOT a mobile devide. Mobile itself, sends a 200. I cannot understand what is done by the Ingress. It seems, as the server-snipper code is somehow parsing it "in a hard-coded way". Maybe someone got similar issues. If someone might give a hint on such server-snippers, it would be nice. Thanks
I tried several server-snippets. Please check code below.
nginx.ingress.kubernetes.io/server-snippet: set $agentflag 0;
if ($http_user_agent ~* "(Mobile|ios|android)" ){ set $agentflag 1; }
if ( $agentflag = 1 ) { return 503; }
As 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;}"
nginx.ingress.kubernetes.io/server-snippet: if ($http_user_agent ~* "(Mobile|ios|android)" ){ return 503; }
As json:
"nginx.ingress.kubernetes.io/server-snippet": " if ($http_user_agent ~* (Mobile|ios|android) ) {\n return 503; }"
Seems like a few things are syntactically incorrect. space before the if condition.
Refer this snippet
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;
}
A short working solution is
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;
}