nginx安全设置——限定PHP脚本运行

分享于:2019-10-18 21:32:19

Nginx限定PHP脚本运行第一种方法:


在网站项目中,有些目录,比如说图片的存放目录,CSS或是JS的存放目录,为了安全起见,在对网站做安全加固的时候,需要禁止这些特定目录php脚本文件的运行。


使用nginx做web服务器,想禁止这些特定目录运行php脚本文件的权限实际上很简单,只需要在nginx的配置项中设置一定的参数就可以了,例如下面的例子;

server {
        listen 80;
        server_name www.phpnanshen.com;
        access_log  logs/web.log  main;
        root wwwroot/web;
        location / {
            index  index.php;
        }
        
        #下面禁止了CSS,JS,UPLOADS三个目录运行php脚本文件的权限
        location ~* ^\/(css|js|uploads)\/.*\.(php)$ {
                deny all;
        }
        
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        error_page  404              /404.html;
}


上面的例子,我们禁止了网站根目录下面JS,CSS和uploads这3个文件夹运行php脚本文件的权限,你也可以加入其他的路径,这里是按正则写的。你也可以直接指定一个目录,禁止php脚本权限后,在浏览器中打开这些目录下面的PHP网页,会提示403错误。


nginx location匹配命令解释


~      #波浪线表示执行一个正则匹配,区分大小写
~*    #表示执行一个正则匹配,不区分大小写
^~    #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
=      #进行普通字符精确匹配
@     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files


location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何请求,因为所有请求都是以"/"开始
  # 但是更长字符匹配或者正则表达式匹配会优先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
  [ configuration C ] 
}
location ~* .(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg结尾的请求. 
  # 但是所有 /images/ 目录的请求将由 [Configuration C]处理.   
  [ configuration D ] 
}


Nginx限定PHP脚本运行第二种方法:


现在很多PHP框架都是单入口文件,比如TP5框架入口文件在public/index.php,所以我们在配置Nginx时可用这样:

#fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;


只准运行public/index.php