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。