nginx几个安全配置及说明
随着互联网的发展,web服务器已经成为多数网站架构中不可或缺的组件。而nginx作为一款高性能的Web服务器,在不同规模的网站中得到广泛的应用。然而,在使用nginx时,安全配置也是一项重要的任务,以保护网站不受攻击和恶意请求的影响。在本文中,我们将探讨nginx安全配置及其代码和详细注释。
一、限制请求速率
攻击者可以通过发送大量请求来占用服务器资源,导致服务器变慢或甚至崩溃。为了限制请求速率,需要使用nginx模块中的“limit_req”和“limit_conn”。
“limit_req”模块可以控制请求的速率,可以指定单位时间内服务器所能接收的请求数。例如,每秒钟只允许接收30个请求,“burst”参数指定的是瞬时请求数的最大数量:
http{
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server{
location /{
limit_req zone=one burst=5 nodelay;
//其他配置
}
}
}
说明:
- limit_req_zone:定义限制请求的区域,指定IP地址种类为binary_remote_addr,分配10M存储空间,速率为30个请求/分钟。
- limit_req:将请求限制到特定的“zone”中,当瞬间请求数超过“burst”参数所指定的数量时,该请求将被拒绝。nodelay选项表示拒绝请求,并向客户端返回503状态码。
“limit_conn”则可以限制连接的数量,在高并发请求时,防止服务器在处理过多请求时出现响应缓慢或崩溃的情况。
http{
limit_conn_zone $binary_remote_addr zone=addr:10m;
server{
location /{
limit_conn addr 10;
//其他配置
}
}
}
说明:
- limit_conn_zone:定义限制请求连接数的区域,同样是指定IP地址种类为binary_remote_addr,分配10M存储空间。
- limit_conn:将连接限制到特定的“zone”中,连接数超过10个时,后续连接将被拒绝。
二、禁止访问某些目录和文件
网站中有一些目录或文件是不应该被公开访问的,如网站根目录下的配置文件、数据文件等。为了保护这些文件,需要在nginx配置文件中进行设置。
http{
server {
location ~ /\.{
deny all;
}
location ~* ^/(dir1|dir2|dir3)/ {
deny all;
return 404;
}
}
}
说明:
- location ~ /.{}:使用正则表达式匹配所有以“.”开头的文件或目录,并拒绝所有对它们的请求。
- location ~* ^/(dir1|dir2|dir3)/{}:匹配所有以“/dir1”、“/dir2”和“/dir3”开头的URL,并拒绝它们的请求。
三、防止DDoS攻击
DDoS攻击 是一种特别恶劣的攻击形式,它的目的是 利用大量的请求将服务器压垮 。为了保护服务器不受此类攻击,需要 使用一些nginx模块 ,例如 “http_limit_conn_module”和“http_limit_req_module”。
http{
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
location / {
limit_conn conn_limit 10;
limit_req zone=req_limit burst=20;
//其他配置
}
}
}
说明:
- limit_conn_zone:同样是定义限制请求连接数的区域,分配10M存储空间。
- limit_req_zone:同样是定义限制请求的区域,指定IP地址种类为binary_remote_addr,分配10M存储空间,速率为10个请求/秒。
- limit_conn和limit_req:限制连接和请求速率,连接和请求速率超过定义值时,请求被拒绝。
四、启用HTTPS并加强SSL/TLS安全
为了保护数据在传输过程中的安全,很多网站都启用HTTPS协议,并加强SSL/TLS安全。nginx可以使用“SSL/TLS Offloading”技术来实现HTTPS和SSL/TLS加密。
http{
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES128:EDH+AESGCM:EDH+CHACHA20:EDH+AES128:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!MD5:!EXP:!PSK:!DSS:!SRP:!kECDH:!CAMELLIA:!SEED:!IDEA:!3DES';
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Frame-Options "SAMEORIGIN" always;
//其他配置
}
}
说明:
- listen 443 ssl http2:在443端口上开启HTTPS,并启用HTTP/2协议。
- ssl_certificate和ssl_certificate_key:分别指定SSL/TLS数字证书的公钥和私钥文件路径。
- ssl_session_timeout:指定SSL/TLS会话超时时间。
- ssl_session_cache shared:SSL:50m:缓存一定数量的SSL/TLS会话,提高SSL/TLS重复访问的性能。
- ssl_session_tickets off:禁用会话票据,防止攻击者使用重用的会话ID来危害安全。
- ssl_dhparam:指定Diffie-Hellman参数,增强密钥交换的安全性,减少暴力破解的风险。
- ssl_protocols:指定使用的SSL/TLS协议版本。
- ssl_ciphers:指定启用的TLS加密算法。
- add_header:添加响应头,增强安全性,如HSTS、X-XSS-Protection、X-Content-Type-Options和X-Frame-Options。
总结
对于nginx安全配置,限制请求速率、禁止访问某些目录和文件、防止DDoS攻击和加强SSL/TLS安全等措施都是必要的。加强nginx的安全性可以有效防止各种攻击、保护网站的机密信息和用户信息,同时也增强了服务器系统的稳定性和系统运行效率。因此,建议在实践中将nginx安全性的措施落实在实际应用过程中。
评论 (0)