Kubernetes Nginx入口-阻止具有错误主机头的请求

时间:2019-03-13 02:42:43

标签: nginx kubernetes

我有一个在Kubernetes上的Nginx入口后面运行的Django应用程序。我希望阻止使用错误的主机头发送的请求(试图进行主机头利用/缓存中毒)。

要在Nginx层阻止这些请求,我知道我可以使用here所述的带有default_server参数的服务器块。

但是,我不确定如何通过externalressress yaml在Kubernetes中做到这一点。我碰到了这个PR,看起来很相关,但无法弄清楚。

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式做到这一点:通过server-snippet annotation或覆盖现有Nginx Ingress Controller的ConfigMap

示例文档中,如何通过nginx.conf批注为基础nginx-ingress-controller Pod更新相关server-snippet文件中的服务器配置块:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
        set $agentflag 0;

        if ($http_user_agent ~* "(Mobile)" ){
          set $agentflag 1;
        }

        if ( $agentflag = 1 ) {
          return 301 https://m.example.com;
        }

ConfigMap还需要server-snippet参数,以便将配置传播到nginx-ingress-controller Pod:

kind: ConfigMap
apiVersion: v1
metadata:
  name: ingress-nginx-ingress-controller
  namespace: ingress-nginx
data:
  server-snippet: |
    set $agentflag 0;

        if ($http_user_agent ~* "(Mobile)" ){
          set $agentflag 1;
        }

        if ( $agentflag = 1 ) {
          return 301 https://m.example.com;
        }