当前位置: 首页 > news >正文

配置php-fpm服务

nginx(unix domain socket方式)

server {listen 80;#root /test/php/publiclocation / {#URL重写 例如隐藏index.phpif (!-f $request_filename) {rewrite  ^(.*)$  /index.php?s=/$1  last;break;}}location ~ [^/]\.php(/|$) {#try_files $uri =404;fastcgi_index index.php;fastcgi_pass unix:/tmp/php/var/run/php-fpm.sock;#pathinfo给fastcgi权限 可支持?s=/module/controller/action的url访问模式fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;include fastcgi_params;}
}

apache(unix domain socket方式)

<VirtualHost *:80>DocumentRoot "/test/php/public"ServerName _#ServerAlias _#ServerAdmin _#errorDocument 404 /404.htmlErrorLog "logs/htdocs-error.log"CustomLog "logs/htdoc-access.log" combined#DENY FILES<Files ~ (\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)$>Order allow,denyDeny from all</Files><FilesMatch \.php$>SetHandler "proxy:unix:/tmp/php/var/run/php-fpm.sock|fcgi://localhost"</FilesMatch><Directory "/test/php/public">SetOutputFilter DEFLATEOptions FollowSymLinksAllowOverride AllRequire all grantedDirectoryIndex index.php index.html</Directory>
</VirtualHost>

防跨目录设置-open_basedir

使用open_basedir可以限制程序可操作的目录和文件,提高系统安全性。
但会影响I/O性能导致系统执行变慢,因此需要根据具体需求,在安全与性能上做平衡,必经任何事物对于每个人的态度不一样嘛。
使用open_basedir会将realpath_cache_size设置为0,从而禁用realpath缓存。

用open_basedir指定的限制实际上是前缀,不是目录名。
也就是说open_basedir=/test/php/public也会允许访问/test/php/public_zxc。
如果要将访问限制为目录,使用斜线结束路径名,例如:open_basedir=/test/php/public/。
如果要设置多个目录,window使用;分隔目录,Linux使用:分隔目录。例如:open_basedir=/test/php/public/:/tmp。
也可加上:/proc/。

php.ini中

open_basedir = /test/php/public/:/tmp/

在程序中

ini_set('open_basedir', '/test/php/public/');

nginx或apache中

fastcgi_param PHP_VALUE "open_basedir=/test/php/public/:/tmp/"

.user.ini文件(在php项目根目录添加)

  • chattr -i .user.ini 解锁(可编辑)
  • chattr +i .user.ini 加锁(不可编辑)
open_basedir = /test/php/public/:/tmp/

测试

<?php
declare (strict_types=1);function getMicroTime(): float
{list($useC, $sec) = explode(' ', microtime());return (float)$useC + (float)$sec;
}/** 记录开始时间 */
$startTime = getMicroTime();/* 读取10000次文件 */
for ($i = 0; $i < 10000; $i++) {file_get_contents('test.txt');
}/* 记录结束时间 */
$endTime = getMicroTime();printf('run time %f ms' . PHP_EOL, (($endTime) - ($startTime)) * 1000);
关闭open_basedir测试
run time 150.619030 ms
打开open_basedir测试
run time 600.969076 ms
开启open_basedir后,执行时间接近关闭的4倍。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【ffmpeg命令入门】视频剪切,倍速与倒放
  • 视图、存储过程、触发器
  • goland设置Gin框架中tmpl模板的语法提示的方法
  • Spring 循环依赖详解
  • 基于python opencv 多进程处理图像
  • 你了解你的GD32 MCU系统主频是多少吗 ?
  • 什么是反射以及反射的应用及例子
  • 14、如何⽤DDD设计微服务代码模型
  • [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备
  • SimD~
  • 数据结构之树知识总结
  • 快速搞定分布式RabbitMQ---RabbitMQ进阶与实战
  • 【C++笔试强训】day02
  • Android SurfaceFlinger——纹理的绘制流程(二十八)
  • Activiti 6 兼容openGauss数据库bytes类型不匹配
  • .pyc 想到的一些问题
  • CSS实用技巧干货
  • isset在php5.6-和php7.0+的一些差异
  • miaov-React 最佳入门
  • mysql常用命令汇总
  • nfs客户端进程变D,延伸linux的lock
  • nodejs实现webservice问题总结
  • SQLServer之创建显式事务
  • Terraform入门 - 1. 安装Terraform
  • 前端
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 温故知新之javascript面向对象
  • 一些css基础学习笔记
  • 移动端唤起键盘时取消position:fixed定位
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #WEB前端(HTML属性)
  • #微信小程序:微信小程序常见的配置传旨
  • $nextTick的使用场景介绍
  • (7)STL算法之交换赋值
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (南京观海微电子)——示波器使用介绍
  • (算法设计与分析)第一章算法概述-习题
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转载)hibernate缓存
  • ./configure,make,make install的作用(转)
  • .gitignore文件---让git自动忽略指定文件
  • .net framework4与其client profile版本的区别
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 表达式计算:Expression Evaluator
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net实现客户区延伸至至非客户区
  • .stream().map与.stream().flatMap的使用
  • 。。。。。