Ubuntu下PHP配置技巧:从基础到优化的完整指南
通过APT包管理器快速安装PHP核心版本与常用扩展(如MySQL数据库支持、GD图像处理、JSON解析等),确保基础功能完备:
sudo apt update
sudo apt install php php-cli php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
安装完成后,通过php -v
验证版本,确认安装成功。
编辑php.ini
文件(路径:/etc/php/{version}/cli/php.ini
(命令行模式)、/etc/php/{version}/fpm/php.ini
(PHP-FPM模式)),调整以下核心参数以适应服务器资源:
memory_limit = 256M
(根据应用需求调整,避免脚本因内存不足终止);max_execution_time = 300
(延长脚本执行时间,适合处理耗时任务如数据导入);upload_max_filesize = 50M
、post_max_size = 50M
(支持更大文件上传,需与memory_limit
匹配);display_errors = Off
、log_errors = On
、error_log = /var/log/php_errors.log
(隐藏敏感信息,将错误记录到日志)。OPcache是PHP代码缓存扩展,可显著减少脚本编译时间,提升执行效率。安装并配置:
sudo apt install php-opcache
编辑php.ini
,添加以下配置:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=64M # 缓存内存大小(根据服务器内存调整)
opcache.max_accelerated_files=4000 # 缓存文件数量(需覆盖项目文件总数)
opcache.revalidate_freq=2 # 文件修改后重新编译的时间间隔(秒)
opcache.fast_shutdown=1 # 快速关闭机制,释放内存
修改后重启PHP服务(如sudo systemctl restart php8.2-fpm
)使配置生效。
PHP-FPM(FastCGI Process Manager)比mod_php
更高效,尤其适合高并发场景。安装并配置:
sudo apt install php-fpm
编辑/etc/php/{version}/fpm/pool.d/www.conf
,调整进程管理参数:
pm = dynamic # 动态进程管理模式(推荐)
pm.max_children = 50 # 最大子进程数(根据服务器内存计算:如2GB内存可设为20-30)
pm.start_servers = 5 # 启动时的子进程数
pm.min_spare_servers = 5 # 最小空闲子进程数(避免频繁创建进程)
pm.max_spare_servers = 10 # 最大空闲子进程数(避免资源浪费)
pm.max_requests = 500 # 每个子进程处理的最大请求数(防止内存泄漏)
重启PHP-FPM服务:sudo systemctl restart php8.2-fpm
。
通过Ondrej Sur的PPA源安装最新PHP版本(如8.2),获得性能改进与安全修复:
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-gd
切换默认PHP版本(如需):sudo update-alternatives --config php
。
启用PHP模块并配置处理规则:
sudo a2enmod php8.2 # 启用PHP模块(版本需与安装的一致)
编辑Apache虚拟主机配置文件(如/etc/apache2/sites-available/000-default.conf
),添加以下内容:
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
重启Apache:sudo systemctl restart apache2
。
编辑Nginx虚拟主机配置文件(如/etc/nginx/sites-available/default
),添加PHP处理规则:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 确保路径与PHP-FPM套接字一致
}
重启Nginx:sudo systemctl restart nginx
。
在php.ini
中设置disable_functions
,禁用可能被恶意利用的函数(如exec
、system
、shell_exec
):
disable_functions = exec, system, shell_exec, passthru, popen, proc_open
需重启PHP服务使配置生效。
编辑php.ini
,增强会话安全性:
session.cookie_secure = On # 仅通过HTTPS传输会话cookie(需开启HTTPS)
session.cookie_httponly = On # 防止JavaScript访问会话cookie(防范XSS攻击)
session.use_strict_mode = 1 # 严格模式,防止会话固定攻击
除调整upload_max_filesize
外,还需在Web服务器层面限制上传文件类型(如通过Nginx的location
规则禁止上传可执行文件)。
安装Redis或Memcached作为缓存层,减少数据库查询次数:
sudo apt install php-redis # Redis扩展
# 或
sudo apt install php-memcached # Memcached扩展
编辑php.ini
启用扩展:extension=redis.so
(或extension=memcached.so
),并在应用代码中使用缓存逻辑(如将频繁访问的数据存入Redis)。
php.ini
中设置mysqli.allow_persistent = On
、mysqli.max_persistent = 100
);pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock
),避免网络延迟。unset()
不再使用的变量)。使用工具监控PHP应用性能,找出瓶颈:
top
、htop
(查看CPU/内存使用)、php-fpm status
(查看PHP-FPM进程状态);