我们知道apache php mod的方式可以很方便的配置 open_basedir 限制各个站点的目录访问权限。
nginx + php-fpm fastcgi的方式需要这样做。
首先php的版本必须大于等于php5.3.3。
## 总限制 通过php-fpm.conf限制
在php-fpm.conf配置文件当中可以增加如下参数
~~~
env[TMP] = /tmp/
env[TMPDIR] = /tmp/
env[TEMP] = /tmp/
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f webmaster@qq.com
php_admin_value[open_basedir] = /home/wwwroot/:/tmp/:/var/tmp:/proc/
php_admin_value[session.save_path] = /tmp/
php_admin_value[upload_tmp_dir] = /tmp/
slowlog = /usr/local/php/var/log/$pool.log
request_slowlog_timeout = 3s
~~~
可以配置env,php_admin_value。
那么配置
`php_admin_value[open_basedir] = /home/wwwroot/:/tmp/:/var/tmp:/proc/`
就可以把整个php脚本的访问目录控制住了。
如果方法1 方法2 方法3未配置的情况下,那么open_basedir的值就为本设置的值,如果方法1 方法2 方法3设置了,那么就是新设置的值。
另外的我这里打开了php慢执行。
slowlog 写保存路径,request_slowlog_timeout写时间。
更多的请看php官网手册[ http://www.php.net/manual/en/install.fpm.configuration.php](http://www.php.net/manual/en/install.fpm.configuration.php)
## 方法1 在nginx 配置 fastcgi_param参数
在nginx的 php配置中 或者 在 包含的 include fastcgi.conf 文件中加入:
`fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";`
$document_root php文档根目录,就是 nginx 配置项 root 配置的网站目录。
/tmp/目录需要有权限,默认放seesion的位置,以及unixsock。
/proc/ 可以让php查看系统负载信息。
本方法加的各个vhost 虚拟主机,都可以完美使用。都限制到自己的网站目录下。
非常推荐使用, 总限制 + 方法1 这样的组合配置方式!!!!!
## 方法2 在php.ini 中配置
在php.ini的末尾加入:
~~~
[HOST=www.iamle.com]
open_basedir=/home/wwwroot/www.iamle.com:/tmp/:/proc/
[PATH=/home/wwwroot/www.iamle.com]
open_basedir=/home/wwwroot/www.iamle.com:/tmp/:/proc/
~~~
本方法的弊端,如果有泛域名解析,比如 *.iale.com 。这个就不好控制。
## 方法3 网站根目录下增加 .user.ini 文件。
在php.ini中找到user_ini.filename 、 user_ini.cache_ttl 去掉前面的分号。
~~~
; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini"
user_ini.filename = ".user.ini"
; To disable this feature set this option to empty value
;user_ini.filename =
; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes)
user_ini.cache_ttl = 300
~~~
在网站根目录下创建.user.ini 加入:
`open_basedir=/home/wwwroot/www.iamle.com:/tmp/:/proc/`
这种方式不需要重启nginx或php-fpm服务。
特别注意,需要取消掉.user.ini文件的写权限,这个文件只让最高权限的管理员设置为只读。
方法1设置后,.user.ini的设置就不起作用了。
关于.user.ini文件的详细说明:[http://php.net/manual/zh/configuration.file.per-user.php](http://php.net/manual/zh/configuration.file.per-user.php)
- 关于我
- nginx
- 代理
- 实例1
- 使用Nginx实现反向代理
- nginx反向代理配置
- Nginx缓存原理及配置
- nginx 信号集
- rewrite
- nginx rewrite规则
- nginx rewrite 正则规则详解
- nginx+php-fpm fastcgi防止跨站、跨目录的安全设置
- 写了个shell脚本,实现nginx日志自动切割,并利用goaccess分析成HTML报表,然后通知管理人员查阅
- nginx禁止一些常见的不应该让用户访问的文件
- PHP
- 实现PHP多进程管理
- php代码规范
- Linux
- 常用命令
- scp
- touch
- nohup
- rsync
- ssh命令 远程登录
- chmod
- nginx日志切割脚本
- Linux使用ssh公钥实现免密码登录Linux
- 使用ssh公钥密钥自动登陆linux服务器
- Linux查看程序端口占用情况
- ssh 公钥私钥认证原理
- 路由图
- CentOS7防火墙设置
- linux下用户管理
- Linux 服务器安全技巧
- Linux shell 提取文件名和目录名
- Linux环境下设置命令别名(alias)
- Git
- 搭建Git服务器
- 手把手教你搭建git服务器
- Git 基本操作
- git删除文件夹/文件(不删除本地文件)
- git忽略文件和文件夹以及文件权限
- Git的四个区五种状态
- git init 和 git init --bare 的区别
- git仓库删除所有提交历史记录,成为一个干净的新仓库
- 如何正确使用Git Flow
- HTTP
- 前端跨域解决方案
- HTTP基本概念
- Redis
- Redis 数据类型及应用场景
- JavaScript
- WebSocket探秘
- socket与websocket的区别
- 基于 Swoole 的微信扫码登录
- Web前端开发规范手册
- 简单的学习了一下ES6
- ES6模块的import和export用法
- MySql
- MySql重置root密码的方法
- mysql 5.6.30 开启慢查询日志
- mysql查看锁表情况
- 我的设计稿
- 会计出纳系统
- 上门宝ERP系统
- 社交应用七大需求
- 出纳系统
- 利用SdfMpp搭建中大行软件系统
- B2C库存商品系统
- 软件
- 网上商城
- 思维逻辑
- 系统架构分层图
- 代码检查规范
- 研发计划
- 系统架构
- 我设计的架构架构图
- 电商网站架构案例
- 大型网站架构
- 服务熔断、降级、限流、异步RPC
- 软件版本号规范
- 第三方服务引擎
- kafka
- ElasticSearch
- 阿里云 推荐引擎
- 随记
- 人生最大的投资
- 产品研发团队管理的6个方面
- 我感觉自己根本不是一个创业者,更谈不上企业家,果然还是屌丝这个称呼更适合我。
- 学什么语音都应该养成的编程习惯
- 2018年5月23日 多云转阴 15-24°C 离职信
- 2017年12月25日
- 对“目标”的认知
- 个人简历
- API设计
- 理解OAuth 2.0
- OAuth 2.0四种授权方式小结
- 对 REST 的理解
- RESTful API 设计指南
- RESTful API 设计
- RPC
- 微服务架构方案
- SOA
- 理解RESTful架构
- RESTful API GET,DELETE,PUT和POST的响应状态码
- MongoDB
- MongoDB-无法启动的一个问题