08 Linux下的PHP网站配置方法及文件夹权限设置

Linux下的php配置与Windows有颇多不同之处。在实际网站配置中,还颇费了一番周折,有必要记录备忘。

一、php.ini位置

在使用fpm方式安装php后,系统有两个位置包含php.ini,一个是etc/php/8.1/cli/php.ini,一个是etc/php/8.1/fpm/php.ini。其中,cli路径中的php用于命令行操作,我们一般用不到。对应php网站使用的配置文件是fpm文件夹中的php.ini。

在php.ini中,无需修改extension_dir参数。需要根据实际需要修改以下4个参数:

max_execution_time
upload_max_filesize
post_max_size
memory_limit

对该文件进行编辑后,需要重启php8.1-fpm:

sudo systemctl restart php8.1-fpm

当然,上面是以8.1版本为例。

二、插件的安装

默认情况下,用fpm方式安装php,不一定会带有必要的插件:

sudo apt -y install php-fpm

我们可以手动安装这些插件:

sudo apt-get install php8.1-curl

例如,这样就安装了curl插件。我们用这个方法可以安装wordpress需要的所有插件:

curl
mysqli(插件名称mysql)
exif
mbstring
fileinfo
gd
intl
imagick
zip
dom

需要注意的是,openssl插件无需手动安装,php已经默认安装。凡是手动安装的插件,就不需要在php.ini中取消对应行的注释了,这些插件将在/etc/php/8.1/fpm/conf.d中按文件名顺序单独加载。否则会导致相关插件加载两次(不影响使用,但会出现一串Warning)。

重启php8.1-fpm后,可以通过这个命令来查看当前插件加载情况:

php -m

三、文件夹权限设置

为了网站的安全,对整个网站目录进行妥善的权限设置是必须的。这些权限围绕nginx的web服务器默认运行用户名“www-data”进行。一般需要3行命令:

sudo chown -R www-data:www-data /path/to/wordpress
sudo find /path/to/wordpress/ -type d -exec chmod 755 {} \;
sudo find /path/to/wordpress/ -type f -exec chmod 644 {} \;

第一行将www-data用户设置为整个网站目录的拥有者,-R表示包含所有子目录。第二行将所有目录设置为www-data用户读/写/执行,其余用户为读/执行。第三行则设置所有的文件为www-data用户读/写,其余用户只读。

这样的设置确保了作为目录拥有者的www-data用户,可以正常修改网站内的文件,这使得类似wordpress的自主升级功能得以实现。但其他用户仅保留最小的必要权限。

建议测试在wordpress中安装插件,若仍然弹出要求填写FTP用户名和密码的窗口,则可以在wp-config.php中增加一行:

define('FS_METHOD', 'direct');

明确要求wordpress尝试直接操作文件。

四、nginx中的上传文件大小设置

即使在php.ini中设置了较大的post_size、upload_filesize,但默认情况下,nginx给每个网站设置的上传仍然受限,需要在nginx的配置文件中,找到对应的Server块,添加一行:

client_max_body_size 64M;

这里的64M可以按需设置。