nginx几个安全配置及说明

dafenqi
2023-12-29 / 0 评论 / 13 阅读 / 正在检测是否收录...

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

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消