详解nginx服务器中的安全配置

  

下面为你详细讲解怎么在Nginx服务器中配置安全措施来保护你的网站。具体来说,包括三个部分:

  1. 基本安全措施:禁止目录遍历、防止DDoS攻击以及过滤Webshell。
  2. SSL证书:为你的网站添加HTTPS支持。
  3. 防盗链:设置防盗链机制,防止你的图片等资源被其他网站盗用。

下面,我们将详细讲解这三个部分。

基本安全措施

禁止目录遍历

目录遍历可以让攻击者访问你网站上的敏感文件,在Nginx中可以通过配置实现禁止目录遍历。在http块中添加如下配置:

http {
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
}

以上配置禁止访问以.开头的文件和目录,例如.htaccess

防止DDoS攻击

在Nginx中可以通过限制速度和连接数来预防DDoS攻击。

http {
    limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s;
    limit_conn_zone $binary_remote_addr zone=conn_zone:10m;

    server {
        listen 80;
        server_name example.com;

        location / {
            limit_conn conn_zone 10;
            limit_req zone=req_zone burst=5;
        }
    }
}

以上配置的含义是:每个IP最大连接数为10,每秒最大请求数为10,超过10个请求会被暂时拒绝,每个请求的最大延迟为5秒。这里使用$binary_remote_addr表示客户端IP地址,req_zoneconn_zone是两个自己定义的名称,代表限制请求数和连接数的内存区域。

过滤Webshell

Webshell是以php或其他脚本语言编写的一种恶意程序,攻击者可以通过Webshell窃取网站数据、利用网站服务器进行DDoS攻击等。因此,保护服务器免受Webshell攻击是十分必要的。Nginx提供了防止Webshell攻击的模块ngx_http_secure_link_module

http {
    secure_link_md5 secretkey$uri$remote_addr$secure_link_expires;
    server {
        listen 80;
        server_name example.com;
        root /usr/share/nginx/html;

        location / {
            secure_link $arg_md5,$arg_expires;
            if ($secure_link = "") { return 403; }

            if ($secure_link_expires < $date_gmt) { return 403; }

            # access valid, for example:
            try_files $uri $uri/ /index.php$is_args$args;
        }
    }
}

以上配置使用了ngx_http_secure_link_module模块来验证URL链接的真实性。secure_link指令用于验证签名和链接是否过期。如果验证不通过,返回403错误。

SSL证书

为了加强网站的安全性,我们需要配置SSL证书。在Nginx中配置SSL证书需要安装OpenSSL库和Nginx的SSL模块。

安装OpenSSL和Nginx

# 安装OpenSSL
yum install openssl

# 下载Nginx
wget https://nginx.org/download/nginx-1.16.0.tar.gz
tar -xzvf nginx-1.16.0.tar.gz
cd nginx-1.16.0

# 安装Nginx的依赖
yum install gcc pcre-devel zlib-devel

# 编译Nginx
./configure --with-http_ssl_module
make
make install

生成SSL证书

# 生成私钥
openssl genrsa -out server.key 2048

# 生成证书请求文件
openssl req -new -key server.key -out server.csr

# 生成证书文件
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

配置Nginx的SSL证书

http {
    server {
        listen 443 ssl;
        ssl_certificate /path/to/server.crt;
        ssl_certificate_key /path/to/server.key;

        location / {
            # your app config goes here
        }
    }
}

以上配置指定了监听端口为443(默认的HTTPS端口),指定了SSL证书和私钥的路径。

防盗链

防盗链是一种常用的资源保护策略,Nginx提供了ngx_http_referer_module模块来实现该功能。

http {
    server {
        listen 80;
        server_name example.com;
        root /usr/share/nginx/html;

        location /img/ {
            valid_referers none blocked .example.com;
            if ($invalid_referer) {
                return 403;
            }
        }
    }
}

以上配置为/img/目录下的资源设置了防盗链规则,允许任何来源访问example.com的页面,但是禁止直接访问。

这里解释一下valid_referers指令的参数含义:

  • none:禁止所有网站访问该资源。
  • blocked:禁止所有直接链接该资源的地址。
  • example.com:允许example.com网站访问。

如果访问者的Referer为空或者没有在valid_referers中指定的网站,则访问无效,返回403错误。

以上就是本次攻略的内容,包括了Nginx服务器的基本安全措施、SSL证书配置和防盗链设置。希望对你有所帮助,如有不懂之处可以随时询问哦~

相关文章