根据扩展名限制程序和文件访问
1.在web2.0时代,大多数网站都是以用户为中心的,列如:bbs blog sns产品,这几个产品都有几个共同的特点,就是不但允许用户发送内容到服务器中,还允许用户发送图片甚至上传附件到服务器中,由于给用户开了上传的功能,因此给服务器带来很大的安全风险,防止被黑客钻了空子。
2.下面将利用nginx配置禁止访问上传目录下的php,shell,python等程序文件,这样即使上传了木马也无法执行。从而加强网站安全
配置如下:
通过配置location区块。进行访问限制
location ~ ^/images/.*\.(php|php5|sh|pl|py)$
{
deny all;
}
location ~ ^/static/ .*\.(php|php5|sh|pl|py)$
{
deny all;
}
location ~ ^/data/(attachment|avatar)/ .*\.(php|php5)$
{
deny all;
}
对上面进行限制访问必须设置在nginx处理php程序的上面
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
示范2 nginx下配置禁止访问*.txt *.doc 文件
location ~ * \.(txt|doc)$ {
if (-f $request_filename) {
root /data/www/www;
#rewrite 可以重定向到某个url
break ;
}
}
讲解;访问目录下以txt和doc结尾的文件,if 如果访问的是请求的文件类型。break ,跳出
示范3 禁止访问制定目录下的所有文件和目录
location ~ ^/(static)/ {
deny all ;
}
设置多个文件的限制
location ~ ^/(static|date)/ {
deny all;
}
示范4 禁止访问目录并返回制定的http状态码
server {
listen 80;
server_name www.titi.com;
root /data/www/www;
index index.html index.htm;
access_log /app/logs/www.access.log main;
location /admin/ { reture 404 };
location /log/ { reture 403 };
}
需要注意的是root 网站根目录的配置。以及location的设置
限制网站来源ip访问
下面介绍如何使用ngx_http_access_module 限制网站来源ip访问
案例环境 phpmyadmin 数据库的web客户端,内部开发人员使用
示范1:禁止某目录让外界访问,但允许某ip访问该目录。且支持php解析:
location ~ ^/date/ {
allow 202.111.32.133;
deny all;
}
location ~ .*\.(php|php5)? {
fastcgi_pass 127.0.0.1:9200;
fastcgi_index index.php;
inculde fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
示范2 :限制制定ip或网段
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
deny all;
}
企业问题案例,nginx做反向代理可以限制客户端ip吗?
可以,方法如下:
方法1:
if ( $remote_addr = 10.0.0.7){
return 403;
}
if ( $remote_addr = 218.32.34.31 ){
set $allow_access_root 'ture';
}
方法2:利用allow和deny只允许ip访问:
location / {
root html/blog;
index index.php index.html index.htm;
allow 10.0.0.7;
deny all;
}
只允许10.0.0.7进行访问
方法3 :只拒绝某些ip访问
location / {
root html/blog;
index index.php index.html index.htm;
deny 10.0.0.7;
allow all ;
}
只拒绝10.0.0.7进行访问
特别说明:deny一定要加一个ip,否则就会直接跳转到403,不在往下执行了。如果403默认页面实在同一个域名下,就会造成死循环。
关于allow的ip地址段,必须加上子网掩码,如10.10.0.0/16
其中 24 代表255.255.255.0
16代表255.255.0.0
8 代表 255.0.0.0
示例:deny 192.168.1.1; 拒接192.168.1.1
allow 127.0.0.0/24; 允许本机所有
allow 192.168.0.0/16; 允许192.168.0.0 网段
allow 10.0.0.0/16; 允许10.0.0.0 网段
deny all; 允许所有
配置nginx禁止非法域名解析访问企业网站
问题:如何配置nginx放置用户通过ip访问网站(恶意域名解析,相当于直接用ip访问网站)
方法1:用户访问ip时,或者恶意解析域名时,收到501错误,
server {
listen 80 default_server;
server_name _;
reture 501;
}
直接报501错误
方法2;通过301永久跳转到主页
server {
listen 80 default_server;
server_name _;
rewrite ^(.*) http://blog.tiantian.com/$1 permanent;
}
方法3:发现某域名恶意解析到公司服务器ip,在server字段中添加以下
if ($host !~ ^www/.tiantian/.com$){
rewirte ^(.*) http://www.tiantian.com$1 permanent;
}
上面代码的意思是如果header信息的host主机名字段中非www.tiantian.com就301跳转到www.tiantian.com