快来检查一下你的NGINX配置安全吗

在当今数字化时代,Web服务器的安全性至关重要。NGINX,作为一种强大而灵活的Web服务器和反向代理,需要经过仔细的安全配置,以确保系统的健壮性。本文将介绍一系列NGINX安全配置的最佳实践,帮助你保障服务器免受潜在的威胁。

nginx基本安全配置

Nginx默认是不允许列出整个目录的,不过,我们为了安全,最好还是确认这个真的关闭了,不然代码被拉走了就悲剧了。

http {
	autoindex off;
}

nginx默认是会在返回的数据包中显示版本号,还是隐藏好一点。

http {
	server_tokens off;
}

其他限制访问请求参数

http {
	#设置客户端请求头读取超时时间,超过这个时间还没有发送任何数据,Nginx将返回“Request time out(408)”错误
	client_header_timeout 15;
	#设置客户端请求主体读取超时时间,超过这个时间还没有发送任何数据,Nginx将返回“Request time out(408)”错误
	client_body_timeout 15;   
	#上传文件大小限制
	client_max_body_size 100m;
	#指定响应客户端的超时时间。这个超过仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
	send_timeout    600;
	#设置客户端连接保持会话的超时时间,超过这个时间,服务器会关闭该连接。
	keepalive_timeout 60;
}

nginx是可以做ip访问限制的,但是不建议这么做。

#设置网站根目录的访问权限
location / 
    allow 192.168.1.1/24;
    deny 192.168.3.1/24;
    deny all;
}

限制访问个别目录或文件后缀名。

#在访问uploads、images目录时,访问php|php5|jsp后缀的文件会返回403代码,也就是不给执行代码了。
location ~ ^/(uploads|images)/.*\.(php|php5|jsp)$ {
    return  403;
}
#禁止访问所有目录下的sql|log|txt|jar|war|sh|py后缀的文件,这些是什么文件就不详细说了。
location ~.*\.(sql|log|txt|jar|war|sh|py) {
    deny all;
}
#有时候,有些访问记录不想保存到日志里面,例如静态图片
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF|png)$ {
    access_log off;
}

Nginx 限制IP的访问频率

要先在http层定义,然后在 location, server, http上下文中作限制,他们用的是限制单ip访问的漏桶算法,超过定义的限制会报503错误,当然,有些时候可能是某个公司同一个ip有几十人一起访问网站,这是有可能被误伤的,做好503报错回调是很有必要的。

http {
	limit_req_zone $binary_remote_addr zone=iplimit:10m rate=20r/s;
	# zone=iplimit:10m 表示生成一个大小为10M的名字为iplimit的内存区域来存储访问频次信息,1M大约可以存16000个ip会话,看你访问量有多少就设多少
	# rate=20r/s 表示允许相同标识的客户端访问频次 每秒20次,依据你的访问量来设置
	server{
    	location ~ ^/api {
        	proxy_pass http:#127.0.0.1:8000;
        	
        	# 对访问以/api的请求,限制每个ip每秒不超过20个请求,漏桶数burst为5,brust的意思就是,如果第1,2,3,4秒请求为19个,第5秒的请求为25个是被允许的。但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。nodelay,如果不设置该选项,第1秒25个请求时,5个请求放到第2秒执行,设置nodelay,25个请求将在第1秒执行。
        	limit_req zone=ipmlimit burst=5 nodelay;
        	limit_req_status 503;
        	
        	# burst 缓冲区大小 
        	# nodelay 超过访问频次而且缓冲区也满的时候返回503
        	# limit_req_status指定自定义错误码, 默认503
    	}
	}
	
	# 指定503错误页面:
	error_page   503   /errpage/503.html;
}

Nginx 限制IP的并发

通过 limit_conn_zone 模块来达到限制用户的连接数的目的,即限制同一用户 IP 地址的并发连接数。

通过配置,设定/api 这个location,每个IP,同一时刻只存在一个连接。注意:并发的概念并不是说 每秒多少连接。

http {
	limit_conn_zone $binary_remote_addr zone=connlimit:10m;
	# zone=iplimit:10m 表示生成一个大小为10M的名字为iplimit的内存区域来存储访问频次信息,1M大约可以存16000个ip会话,看你访问量有多少就设多少
	
	server{
    	location ~ ^/api {
        	proxy_pass http:#127.0.0.1:8000;
        	# 配置的并发请求为 1, 依据你的实际情况来设置
        	limit_conn connlimit 1;
        	# limit_conn_status 指定自定义错误码, 默认503
        	limit_conn_status 503;
    	}
	}
	
	# 指定503错误页面:
	error_page   503   /errpage/503.html;
}

Nginx 限制IP的流量

通过limit_rate模块来进行流量控制, 对于提供下载的网站,肯定是要进行流量控制的。Nginx 通过 core模块的 limit_rate 等指令可以做到限流的目的。

如果要进行限速,可以和 limit_conn_zone 模块配合进行使用

http {
	server{
	    location ~ ^/download{
	    	# 以最大的速度下载 size大小后,在进行 limit_rate speed 限速,例如:limit_rate_after 3m 解释为:以最大的速度下载3m后,再进行限速。
        	limit_rate_after 3m;
        	
        	# 向客户端传输数据的速度,速度的单位是每秒传输的字节数。注意:该限制只是针对一个连接的设定,也就是说,如果同时有2个连接,那么它的速度将会是该指令设置的两倍。
        	limit_rate 512k;
    	}
	}
}

  查看原文:快来检查一下你的NGINX配置安全吗

 关注公众号 "字节航海家" 及时获取最新内容

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值