Nginx的limit_req正在查杀所有的请求

我有一个网站上运行node.js和expressionnetworking服务器。 我使用nginx在域上运行网站,也使用SSL证书。 我search谷歌如何保护服务器使用nginx的ddos攻击,我发现我应该在我的nginx conf文件中使用limit_req属性。 但是当我使用这个,我打开网站所有其他请求失败,我的意思是我打开网站和所有外部链接失败像CSS,JS和图像文件,并在我的控制台,我看到很多这个错误:

Failed to load resource: the server responded with a status of 503 (Service Temporarily Unavailable) 

我知道是什么问题,我限制用户请求10req / s和所有外部链接和文件计数作为一个请求和10后达成所有其他要求失败,但我不知道如何处理它,我不知道我是否应该从我的快速代码或从nginx conf处理它。

我知道我应该让所有的网站请求数一次,但我不知道如何。

这是我的nginxconfiguration:

  # HTTP - redirect all requests to HTTPS limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; server { #listen 80 default_server; #listen [::]:80 default_server ipv6only=on; server_name www.example.com domain.com; return 301 https://example.com$request_uri; } map $sent_http_content_type $cacheable_types { ~image/ "max-age=864000"; default ""; } server { listen 443; server_name www.examle.com; ssl on; # Use certificate and key provided by Let's Encrypt: ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; location /{ return 301 https://example.com$request_uri; } server { listen 443; server_name example.com; ssl on; # Use certificate and key provided by Let's Encrypt: ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; location /{ limit_req zone=one; proxy_pass http://localhost:2000/; } } 

你正在限制所有被代理到10r / s。 如果您只想限制页面,您可以为css / js资源定义另一个位置,而不是对其进行限制。

 server { listen 443; location ~* \.(jpg|jpeg|png|gif|css|js|ico)$ { limit_req zone=one; proxy_pass http://localhost:2000/; } location / { proxy_pass http://localhost:2000/; } } 

但是,你可能不应该打扰它。 一个DDOS将压倒你的Nginx服务器,无论如何都把所有东西都离线了。

如果您真的需要DDOS保护,更好的方法是在您的网站前使用CloudFlare或CloudFront等CDN。 确保您的IP不知道,可能从其他DNSlogging泄漏。 CloudFront(AWS)内置了大量的DDOS保护function。CloudFlare的付费计划无论大小如何都会站在DDOS的前面。 CloudFlare免费将放弃它,但如果它太大,将放弃。