百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Nginx安全相关配置常用教程

off999 2025-01-03 18:13 21 浏览 0 评论

1. 限制请求速度

设置 Nginx、Nginx Plus 的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置 Nginx 每两秒钟接收一个客户端 IP 的请求(大约等同于每分钟30个请求)。

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; 
server { 
... 
location /login.html { 
limit_req zone=one; 
... 
} 
}

`limit_req_zone` 命令设置了一个叫 one 的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端 IP($binary_remote_addr)。location 块中的 `limit_req` 通过引用 one 共享内存区来实现限制访问 /login.html 的目的。

2. 限制连接数量

设置 Nginx、Nginx Plus 的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端 IP 连接 /store 不可以超过10个。

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {

...

location /store/ {

limit_conn addr 10;

...

}

}

`limit_conn_zone` 命令设置了一个叫 addr 的共享内存区来存储特定键值的状态,在上面的例子中是客户端 IP( $binary_remote_addr)。location 块中 `limit_conn` 通过引用 addr 共享内存区来限制到 /store/ 的最大连接数为10。

3. 关闭慢连接

有一些 DDOS 攻击,比如 Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。

`client_body_timeout` 命令用来定义读取客户端请求的超时时间,`client_header_timeout` 命令用来定于读取客户端请求头的超时时间。这两个参数的默认值都是 60s,我们可以通过下面的命令将他们设置为 5s:

server {

client_body_timeout 5s;

client_header_timeout 5s;

...

}

4. 设置IP黑名单

如果确定攻击来源于某些 IP 地址,我们可以将其加入黑名单,Nginx 就不会再接受他们的请求。比如,你已经确定攻击来自于从123.123.123.1到123.123.123.16的一段 IP 地址,你可以这样设置:

location / {

deny 123.123.123.0/28;

...

}

或者你确定攻击来源于123.123.123.3、123.123.123.5、123.123.123.7几个IP,可以这样设置:

location / {

deny 123.123.123.3;

deny 123.123.123.5;

deny 123.123.123.7;

...

}

5. 设置IP白名单

如果你的网站仅允许特定的 IP 或 IP 段访问,你可以结合使用 allow 和 deny 命令来限制仅允许你指定的 IP 地址访问你的网站。如下,你可以设置仅允许 192.168.1.0 段的内网用户访问:

location / {

allow 192.168.1.0/24;

deny all;

...

}

deny 命令会拒绝除了 allow 指定的 IP 段之外的所有其他 IP 的访问请求。

6. 使用缓存进行流量削峰

通过打开 Nginx 的缓存功能并设置特定的缓存参数,可以削减来自攻击的流量,同时也可以减轻对后端服务器的请求压力。以下是一些有用的设置:

  1. proxy_cache_use_stale ` 的 updating 参数告诉 Nginx 什么时候该更新所缓存的对象。只需要到后端的一个更新请求,在缓存有效期间客户端对该对象的请求都无需访问后端服务器。当通过对一个文件的频繁请求来实施攻击时,缓存功能可极大的降低到后端服务器的请求。
  2. proxy_cache_key ` 命令定义的键值通常包含一些内嵌的变量(默认的键值 $scheme$proxy_host$request_uri 包含了三个变量)。如果键值包含 `$query_string` 变量,当攻击的请求字符串是随机的时候就会给 Nginx 代理过重的缓存负担,因此我们建议一般情况下不要包含 `$query_string` 变量。

7. 屏蔽特定的请求

可以设置 Nginx、Nginx Plus 屏蔽一些类型的请求:

  1. 针对特定 URL 的请求
  2. 针对不是常见的 User-Agent 的请求
  3. 针对 Referer 头中包含可以联想到攻击的值的请求
  4. 针对其他请求头中包含可以联想到攻击的值的请求

比如,如果你判定攻击是针对一个特定的 URL:/foo.php,我们就可以屏蔽到这个页面的请求:

location /foo.php {

deny all;

}

或者你判定攻击请求的 User-Agent 中包含 foo 或 bar,我们也可以屏蔽这些请求:

location / {

if ($http_user_agent ~* foo|bar) {

return 403;

}

...

}

http_name 变量引用一个请求头,上述例子中是 User-Agent 头。可以针对其他的 http 头使用类似的方法来识别攻击。

8. 限制到后端服务器的连接数

一个 Nginx、Nginx Plus 实例可以处理比后端服务器多的多的并发请求。在 Nginx Plus 中,你可以限制到每一个后端服务器的连接数,比如可以设置 Nginx Plus 与 website upstream 中的每个后端服务器建立的连接数不得超过200个:

upstream website {

server 192.168.100.1:80 max_conns=200;

server 192.168.100.2:80 max_conns=200;

queue 10 timeout=30s;

}

`max_conns` 参数可以针对每一个后端服务器设置 Nginx Plus 可以与之建立的最大连接数。`queue` 命令设置了当每个后端服务器都达到最大连接数后的队列大小,`timeout` 参数指定了请求在队列中的保留时间。

相关推荐

阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?

TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...

高流量大并发Linux TCP性能调优_linux 高并发网络编程

其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...

性能测试100集(12)性能指标资源使用率

在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...

Linux 服务器常见的性能调优_linux高性能服务端编程

一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...

Nginx性能优化实战:手把手教你提升10倍性能!

关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...

高并发场景下,Spring Cloud Gateway如何抗住百万QPS?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...

Kubernetes 高并发处理实战(可落地案例 + 源码)

目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...

高并发场景下,Nginx如何扛住千万级请求?

Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...

Spring Boot+Vue全栈开发实战,中文版高清PDF资源

SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...

Docker-基础操作_docker基础实战教程二

一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...

你有空吗?跟我一起搭个服务器好不好?

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...

部署你自己的 SaaS_saas如何部署

部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...

Docker Compose_dockercompose安装

DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...

京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统

前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...

Kubernetes (k8s) 入门学习指南_k8s kubeproxy

Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...

取消回复欢迎 发表评论: