根据扩展名限制程序和文件访问

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;