下面为你详细讲解怎么在Nginx服务器中配置安全措施来保护你的网站。具体来说,包括三个部分:
- 基本安全措施:禁止目录遍历、防止DDoS攻击以及过滤Webshell。
- SSL证书:为你的网站添加HTTPS支持。
- 防盗链:设置防盗链机制,防止你的图片等资源被其他网站盗用。
下面,我们将详细讲解这三个部分。
基本安全措施
禁止目录遍历
目录遍历可以让攻击者访问你网站上的敏感文件,在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_zone
和conn_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证书配置和防盗链设置。希望对你有所帮助,如有不懂之处可以随时询问哦~
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解nginx服务器中的安全配置 - Python技术站