自学内容网 自学内容网

配置php-fpm服务

nginx(unix domain socket方式)

server {
  listen 80;
  #root /test/php/public

  location / {
    #URL重写 例如隐藏index.php
    if (!-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.html
  ErrorLog "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,deny
    Deny from all
  </Files>

  <FilesMatch \.php$>
    SetHandler "proxy:unix:/tmp/php/var/run/php-fpm.sock|fcgi://localhost"
  </FilesMatch>

  <Directory "/test/php/public">
    SetOutputFilter DEFLATE
    Options FollowSymLinks
    AllowOverride All
    Require all granted
    DirectoryIndex 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倍。

原文地址:https://blog.csdn.net/weixin_43794314/article/details/140587776

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!