Это пример того, как блокировать пользовательские агенты в nginx.conf
:
### make sure your 'if' statement is in the server block.
### case sensitive http user agent blocking ###
if ($http_user_agent ~ (Catall Spider|AcoiRobot) ) {
return 403;
}
### case insensitive http user agent blocking ###
if ($http_user_agent ~* (foo|bar) ) {
return 403;
}
. Вы можете добавить некоторую часть конфигурации в nginx.conf
входного контроллера, используяследующий пример .Он добавляет настраиваемый заголовок в конфигурацию Nginx, который применяется только к этому конкретному входу:
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-configuration-snippet
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Request-Id: $req_id";
spec:
rules:
- host: custom.configuration.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /
Если вам необходимо добавить некоторые глобальные настройки для входного контроллера, см. Следующие примеры :
---
apiVersion: v1
data:
proxy-set-headers: "ingress-nginx/custom-headers"
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
---
apiVersion: v1
data:
X-Different-Name: "true"
X-Request-Start: t=${msec}
X-Using-Nginx-Controller: "true"
kind: ConfigMap
metadata:
name: custom-headers
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
proxy-connect-timeout: "10"
proxy-read-timeout: "120"
proxy-send-timeout: "120"
Создайте файл YAML, используя предыдущие примеры, и примените его к вашему кластеру:
kubectl apply -f nginx-ingress-config.yaml
Вы можете проверить, применяются ли настройки к nginx.conf во входном контроллере, с помощью следующей команды:
# Replace name of the ingress controller with the real name of the pod in the right namespace
$ kubectl exec nginx-ingress-controller-6bdddddb-6dmnw -n kube-system cat /etc/nginx/nginx.conf
# You can find the real name of your ingress controller and namespace using the next command
$ kubectl get pods --all-namespaces | grep nginx-ingress-controller
Без информации о вашей диаграмме трудно угадать, какой параметр вы должны установить.
Если вы используете диаграмму из репозитория helm, вы можете получить ее содержимое, запустив
$ helm fetch <chart/name>
После этого вы получите сжатый файл диаграммы в текущем каталоге.Вам может потребоваться найти правильное значение для вашего фрагмента кода, прочитав файлы шаблона в каталоге шаблонов диаграммы.
Если вы используете диаграмму, написанную вами, вы можете использовать диаграмму stable/nginx-ingress
в качестве справочной.У него много опций конфигурации.
Обновление:
Начиная с версии 0.20.0 была добавлена новая функциональность :
# 2997 Предоставить возможность блокировать IP, User-Agent и Refereers глобально
Использование параметра объяснено в Раздел карты руководства .
Если вам нужен пример использования, вы можете найти его в test-case .
It("should block User-Agents defined in the ConfigMap", func() {
err := f.UpdateNginxConfigMapData("block-user-agents", "~*chrome\\/68\\.0\\.3440\\.106\\ safari\\/537\\.36,AlphaBot")
Expect(err).NotTo(HaveOccurred())
...
// Should be blocked
resp, _, errs := gorequest.New().
Get(f.IngressController.HTTPURL).
Set("Host", host).
Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36").
End()
Expect(errs).To(BeNil())
Expect(resp.StatusCode).Should(Equal(http.StatusForbidden))
resp, _, errs = gorequest.New().
Get(f.IngressController.HTTPURL).
Set("Host", host).
Set("User-Agent", "AlphaBot").
End()
Expect(errs).To(BeNil())
Expect(resp.StatusCode).Should(Equal(http.StatusForbidden))
// Shouldn't be blocked
resp, _, errs = gorequest.New().
Get(f.IngressController.HTTPURL).
Set("Host", host).
Set("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1").
End()
Expect(errs).To(BeNil())
Expect(resp.StatusCode).Should(Equal(http.StatusOK))
})