Nginx站点目录及URL访问控制

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

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

 

你可能感兴趣的:(nginx)