我有一个在Kubernetes上的Nginx入口后面运行的Django应用程序。我希望阻止使用错误的主机头发送的请求(试图进行主机头利用/缓存中毒)。
要在Nginx层阻止这些请求,我知道我可以使用here所述的带有default_server
参数的服务器块。
但是,我不确定如何通过externalressress yaml在Kubernetes中做到这一点。我碰到了这个PR,看起来很相关,但无法弄清楚。
答案 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;
}