Discussão sobre a configuração do Nginx para evitar ataques de tráfego

Este artigo compartilha principalmente com você o método de configuração do Nginx para evitar ataques de tráfego. O artigo fornece uma introdução detalhada e um código de exemplo de configuração, que tem certa referência e valor de aprendizado para todos. Amigos que precisam podem dar uma olhada abaixo.

Todo mundo sabe que os recursos do servidor são limitados, mas as solicitações dos clientes são ilimitadas (ataques maliciosos não estão excluídos). Para garantir que a maioria das solicitações possa responder normalmente, temos que desistir de algumas solicitações dos clientes, por isso usaremos o Nginx. Atual limitar a operação pode aliviar bastante a pressão no servidor e permitir que outras solicitações normais recebam respostas normais.

Como usar o Nginx para implementar a limitação básica de corrente, como limitar um único IP a 50 acessos por segundo. Através do módulo de limitação de corrente Nginx, podemos definir que assim que o número de conexões simultâneas exceder nossa configuração, um erro 503 será retornado ao cliente. Isto pode ser muito eficaz na prevenção de ataques CC. Juntamente com o firewall iptables, os ataques CC podem basicamente ser ignorados. Vamos dar uma olhada na introdução detalhada:

Como usar

configuração conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#统一在http域中进行配置

#限制请求

limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=50r/s;

#按ip配置一个连接 zone

limit_conn_zone $binary_remote_addr zone=perip_conn:10m;

#按server配置一个连接 zone

limit_conn_zone $server_name zone=perserver_conn:100m;

server {

  listen  80;

  server_name report.52itstyle.com;

  index login.jsp;

  location / {

    #请求限流排队通过 burst默认是0

    limit_req zone=api_read burst=5;

    #连接数限制,每个IP并发请求为2

    limit_conn perip_conn 2;

    #服务所限制的连接数(即限制了该server并发连接数量)

    limit_conn perserver_conn 1000;

    #连接限速

    limit_rate 100k;

    proxy_pass  http://report;

  }

}

upstream report {

  fair;

  server 172.16.1.120:8882 weight=1 max_fails=2 fail_timeout=30s;

  server 172.16.1.120:8881 weight=1 max_fails=2 fail_timeout=30s;

}

configurar erro 503

Por padrão, se o limite for excedido, um erro 503 será relatado, solicitando:

1

2

3

4

503 Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later. Sorry for the inconvenience.

Please report this message and include the following information to us.

Thank you very much!

Não há nada de errado com esta exibição, mas ela não é amigável o suficiente. Aqui personalizamos o erro 503.

1

2

3

4

error_page 500 502 503 504 /50x.html;

location = /50x.html {

 root html;#自定义50X错误

}

Instruções de configuração

limit_conn_zone

Um contêiner é definido para cada IP para armazenar o status da sessão. Este exemplo define um contêiner de 100 m, que pode lidar com 3.200.000 sessões com base em 32 bytes/sessão.

limit_rate 300k;

Limite a velocidade de cada conexão a 300 K. Observe que este é o limite de velocidade da conexão, não o limite de velocidade do IP. Se um IP permitir duas conexões simultâneas, então o IP será limitado a limit_rate×2.

burst=5;

Isto equivale a colocar 5 assentos próximos ao posto de controle requerido. Se uma solicitação for interrompida por ultrapassar o limite de velocidade do momento, peça para ele sentar em uma cadeira vazia e aguardar na fila, e se o posto de controle estiver vazio, ele poderá passar. Mesmo que as vagas estejam ocupadas, sinto muito, a solicitação é retornada diretamente e o cliente recebe uma resposta de que o servidor está ocupado. Portanto, burst não tem nada a ver com request_rate. Se for definido como 10.000, 10.000 solicitações podem ser enfileiradas, mas o ponto de verificação ainda libera 5 solicitações por segundo (velocidade lenta). E você não pode ficar na fila o tempo todo, então o nginx também define um tempo limite.Se a fila ultrapassar um determinado período de tempo, ela retornará diretamente e retornará a resposta de que o servidor está ocupado.

以上配置Nginx需要配置以下模块:

1

2

ngx_http_limit_conn_module (static)

ngx_http_limit_req_module (static)

执行命令 nginx -V 就可以检查到是否有安装。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助

来源:微点阅读   https://www.weidianyuedu.com

Acho que você gosta

Origin blog.csdn.net/weixin_45707610/article/details/131764124
Recomendado
Clasificación