在Oracle Linux 83系统上快速安装PHP的完整指南从基础配置到环境测试一步步教你搭建稳定高效的PHP运行环境
引言
PHP是一种广泛使用的开源脚本语言,特别适合Web开发。在Oracle Linux 8.3系统上安装PHP可以为您的Web应用程序提供稳定高效的运行环境。本指南将详细介绍从基础配置到环境测试的完整过程,帮助您轻松搭建PHP运行环境。
系统准备
在开始安装PHP之前,我们需要确保系统是最新的并配置好必要的软件仓库。
更新系统
首先,让我们更新系统到最新状态:
sudo dnf update -y 添加EPEL和REMI仓库
EPEL(Extra Packages for Enterprise Linux)和REMI仓库提供了许多额外的软件包,包括各种版本的PHP。
# 安装EPEL仓库 sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm # 安装REMI仓库 sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm 启用PowerTools仓库
某些PHP依赖可能需要PowerTools仓库:
sudo dnf config-manager --set-enabled powertools 安装PHP
Oracle Linux 8.3默认提供PHP 7.2版本,但通过REMI仓库,我们可以安装更新的PHP版本,如PHP 7.4、PHP 8.0或PHP 8.1。
查看可用的PHP版本
sudo dnf module list php 启用所需的PHP版本
例如,要安装PHP 8.1:
sudo dnf module enable php:remi-8.1 -y 安装PHP及其常用扩展
sudo dnf install -y php php-common php-opcache php-cli php-fpm php-mysqlnd php-zip php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json 验证PHP安装
安装完成后,验证PHP是否正确安装:
php -v 您应该看到类似以下的输出:
PHP 8.1.10 (cli) (built: Aug 25 2022 14:10:30) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.1.10, Copyright (c) Zend Technologies with Zend OPcache v8.1.10, Copyright (c), by Zend Technologies 配置PHP
PHP安装完成后,我们需要进行一些基本配置以确保其安全高效运行。
PHP配置文件位置
PHP的主要配置文件位于:
- CLI环境:
/etc/php.ini - FPM环境:
/etc/php-fpm.ini和/etc/php-fpm.d/www.conf
基本PHP配置
编辑PHP配置文件:
sudo vi /etc/php.ini 以下是一些推荐的配置项:
; 设置时区 date.timezone = Asia/Shanghai ; 增加上传文件大小限制 upload_max_filesize = 64M post_max_size = 64M ; 提高内存限制 memory_limit = 256M ; 设置最大执行时间 max_execution_time = 300 ; 显示错误(开发环境) display_errors = On display_startup_errors = On ; 记录错误(生产环境) log_errors = On error_log = /var/log/php/error.log ; 禁用危险函数(生产环境) disable_functions = exec,passthru,shell_exec,system,proc_open,popen 创建PHP错误日志目录
sudo mkdir -p /var/log/php sudo touch /var/log/php/error.log sudo chown -R apache:apache /var/log/php 配置PHP-FPM
PHP-FPM(FastCGI Process Manager)是PHP的FastCGI实现,常用于高负载网站。
编辑PHP-FPM配置文件:
sudo vi /etc/php-fpm.d/www.conf 以下是一些推荐的配置项:
; 设置用户和组 user = apache group = apache ; 设置监听方式 listen = /run/php-fpm/www.sock listen.owner = apache listen.group = apache listen.mode = 0660 ; 设置进程管理器 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ; 设置请求超时时间 request_terminate_timeout = 300 ; 设置慢日志 slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 10s 启动并启用PHP-FPM服务
sudo systemctl start php-fpm sudo systemctl enable php-fpm 检查PHP-FPM状态:
sudo systemctl status php-fpm 安装额外的PHP扩展
根据您的应用程序需求,可能需要安装额外的PHP扩展。
查看可用的PHP扩展
sudo dnf search php- 安装常用扩展
# 安装Redis扩展 sudo dnf install -y php-pecl-redis5 # 安装Memcached扩展 sudo dnf install -y php-pecl-memcached # 安装Imagick扩展 sudo dnf install -y php-pecl-imagick # 安装Xdebug扩展(开发环境) sudo dnf install -y php-pecl-xdebug 安装PECL扩展
某些扩展可能需要通过PECL安装:
# 安装开发工具 sudo dnf install -y php-devel php-pear make gcc # 安装扩展示例(如swoole) sudo pecl install swoole 创建扩展配置文件:
echo "extension=swoole.so" | sudo tee /etc/php.d/40-swoole.ini 重启PHP-FPM以加载新扩展:
sudo systemctl restart php-fpm 配置Web服务器
PHP可以与Apache或Nginx等Web服务器配合使用。以下是两种Web服务器的配置方法。
配置Apache服务器
安装Apache
sudo dnf install -y httpd sudo systemctl start httpd sudo systemctl enable httpd 配置Apache支持PHP
创建Apache配置文件:
sudo vi /etc/httpd/conf.d/php.conf 添加以下内容:
<FilesMatch .php$> SetHandler "proxy:fcgi://run/php-fpm/www.sock" </FilesMatch> AddType text/html .php DirectoryIndex index.php 创建虚拟主机
创建网站目录和测试文件:
sudo mkdir -p /var/www/example.com sudo chown -R apache:apache /var/www/example.com sudo chmod -R 755 /var/www/example.com 创建虚拟主机配置文件:
sudo vi /etc/httpd/conf.d/example.com.conf 添加以下内容:
<VirtualHost *:80> ServerName example.com DocumentRoot /var/www/example.com <Directory /var/www/example.com> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /var/log/httpd/example.com-error.log CustomLog /var/log/httpd/example.com-access.log combined </VirtualHost> 重启Apache服务:
sudo systemctl restart httpd 配置Nginx服务器
安装Nginx
sudo dnf install -y nginx sudo systemctl start nginx sudo systemctl enable nginx 配置Nginx支持PHP
创建Nginx配置文件:
sudo vi /etc/nginx/conf.d/php.conf 添加以下内容:
upstream php-fpm { server unix:/run/php-fpm/www.sock; } 创建虚拟主机
创建网站目录和测试文件:
sudo mkdir -p /var/www/example.com sudo chown -R nginx:nginx /var/www/example.com sudo chmod -R 755 /var/www/example.com 创建虚拟主机配置文件:
sudo vi /etc/nginx/conf.d/example.com.conf 添加以下内容:
server { listen 80; server_name example.com; root /var/www/example.com; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { fastcgi_pass php-fpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /.ht { deny all; } error_log /var/log/nginx/example.com-error.log; access_log /var/log/nginx/example.com-access.log; } 重启Nginx服务:
sudo systemctl restart nginx 测试PHP环境
创建PHP信息页面
创建一个PHP信息页面以测试PHP是否正常工作:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.com/info.php 访问测试页面
在浏览器中访问 http://example.com/info.php,您应该看到PHP的详细信息页面,包括已安装的扩展和配置设置。
创建数据库连接测试
如果您已安装MySQL或MariaDB,可以创建一个数据库连接测试页面:
cat << 'EOF' | sudo tee /var/www/example.com/db-test.php <?php $host = 'localhost'; $dbname = 'test'; $username = 'testuser'; $password = 'password'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); echo "Connected to $dbname at $host successfully."; } catch (PDOException $e) { die("Could not connect to the database $dbname :" . $e->getMessage()); } ?> EOF 性能测试
创建一个简单的性能测试页面:
cat << 'EOF' | sudo tee /var/www/example.com/performance-test.php <?php $start = microtime(true); // 执行一些计算密集型任务 for ($i = 0; $i < 1000000; $i++) { $array[] = $i * $i; } // 执行一些字符串操作 $string = ""; for ($i = 0; $i < 10000; $i++) { $string .= md5($i); } $end = microtime(true); $execution_time = ($end - $start); echo "Execution time: " . $execution_time . " seconds"; echo "<br>Memory used: " . round(memory_get_usage() / 1024 / 1024, 2) . " MB"; ?> EOF 故障排除
PHP-FPM常见问题
PHP-FPM服务无法启动
检查PHP-FPM配置文件语法:
sudo php-fpm -t 查看错误日志:
sudo tail -f /var/log/php-fpm/error.log 502 Bad Gateway错误
这通常表示Nginx无法连接到PHP-FPM。检查以下几点:
- 确保PHP-FPM服务正在运行:
sudo systemctl status php-fpm - 检查PHP-FPM套接字文件权限:
ls -la /run/php-fpm/www.sock - 检查Nginx配置中的PHP-FPM upstream设置:
upstream php-fpm { server unix:/run/php-fpm/www.sock; } PHP扩展问题
扩展未加载
- 检查扩展是否已安装:
php -m | grep extension_name - 检查扩展配置文件:
ls /etc/php.d/ | grep extension_name - 确保扩展配置文件包含以下内容:
extension=extension_name.so 扩展编译错误
如果通过PECL安装扩展时遇到编译错误,可能需要安装必要的开发包:
sudo dnf install -y php-devel gcc make autoconf 权限问题
确保Web服务器用户(Apache为apache,Nginx为nginx)对网站目录有适当的权限:
sudo chown -R apache:apache /var/www/example.com # 对于Apache sudo chown -R nginx:nginx /var/www/example.com # 对于Nginx sudo chmod -R 755 /var/www/example.com SELinux问题
如果启用了SELinux,可能会遇到权限问题。检查SELinux状态:
sestatus 临时禁用SELinux进行测试:
sudo setenforce 0 如果禁用SELinux后问题解决,可以配置适当的SELinux策略:
# 允许Web服务器连接到网络 sudo setsebool -P httpd_can_network_connect 1 # 允许Web服务器发送邮件 sudo setsebool -P httpd_can_sendmail 1 # 允许PHP-FPM写入特定目录 sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/example.com(/.*)?" sudo restorecon -Rv /var/www/example.com 安全加固
PHP安全配置
编辑PHP配置文件,添加以下安全设置:
sudo vi /etc/php.ini ; 隐藏PHP版本信息 expose_php = Off ; 禁用危险函数 disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source ; 启用SQL安全模式 sql.safe_mode = On ; 限制文件访问 open_basedir = /var/www/example.com/:/tmp/ ; 禁用远程文件包含 allow_url_fopen = Off allow_url_include = Off ; 启用会话安全 session.cookie_httponly = 1 session.use_only_cookies = 1 session.cookie_secure = 1 session.cookie_samesite = Strict Web服务器安全配置
Apache安全配置
编辑Apache配置文件:
sudo vi /etc/httpd/conf/httpd.conf 添加或修改以下设置:
# 隐藏服务器版本信息 ServerTokens Prod ServerSignature Off # 禁用目录列表 Options -Indexes # 防止点击劫持 Header always append X-Frame-Options SAMEORIGIN # 启用XSS保护 Header set X-XSS-Protection "1; mode=block" # 防止MIME类型嗅探 Header set X-Content-Type-Options "nosniff" # 启用HSTS Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Nginx安全配置
编辑Nginx配置文件:
sudo vi /etc/nginx/nginx.conf 添加或修改以下设置:
# 隐藏Nginx版本信息 server_tokens off; # 防止点击劫持 add_header X-Frame-Options "SAMEORIGIN" always; # 启用XSS保护 add_header X-XSS-Protection "1; mode=block" always; # 防止MIME类型嗅探 add_header X-Content-Type-Options "nosniff" always; # 启用HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 防火墙配置
配置防火墙以只允许必要的端口:
# 安装firewalld sudo dnf install -y firewalld sudo systemctl start firewalld sudo systemctl enable firewalld # 允许HTTP和HTTPS流量 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https # 如果需要SSH访问 sudo firewall-cmd --permanent --add-service=ssh # 重新加载防火墙配置 sudo firewall-cmd --reload 性能优化
PHP性能优化
OPcache配置
编辑PHP配置文件:
sudo vi /etc/php.d/10-opcache.ini 添加或修改以下设置:
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1 opcache.validate_timestamps=0 # 生产环境设置为0 PHP-FPM优化
编辑PHP-FPM配置文件:
sudo vi /etc/php-fpm.d/www.conf 根据服务器资源调整以下设置:
; 进程管理器设置 pm = dynamic pm.max_children = 100 # 根据可用内存调整 pm.start_servers = 20 pm.min_spare_servers = 10 pm.max_spare_servers = 30 pm.max_requests = 1000 ; 请求超时设置 request_terminate_timeout = 30 Web服务器性能优化
Apache优化
编辑Apache配置文件:
sudo vi /etc/httpd/conf/httpd.conf 添加或修改以下设置:
# 启用KeepAlive KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 # 调整MPM设置 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0 </IfModule> # 启用缓存模块 LoadModule cache_module modules/mod_cache.so LoadModule cache_disk_module modules/mod_cache_disk.so <IfModule mod_cache_disk.c> CacheEnable disk / CacheRoot /var/cache/httpd CacheDirLength 2 CacheDirLevels 2 CacheDefaultExpire 3600 CacheMaxFileSize 1000000 CacheMinFileSize 1 </IfModule> Nginx优化
编辑Nginx配置文件:
sudo vi /etc/nginx/nginx.conf 添加或修改以下设置:
# 工作进程数(通常设置为CPU核心数) worker_processes auto; # 每个工作进程的最大连接数 events { worker_connections 1024; } # 启用Gzip压缩 gzip on; gzip_vary on; gzip_min_length 1024; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 缓存设置 http { open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; } 系统级优化
内核参数优化
编辑系统配置文件:
sudo vi /etc/sysctl.conf 添加以下设置:
# 增加文件描述符限制 fs.file-max = 100000 # 网络设置 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 0 net.ipv4.ip_local_port_range = 1024 65000 应用新的内核参数:
sudo sysctl -p 增加文件描述符限制
编辑limits配置文件:
sudo vi /etc/security/limits.conf 添加以下设置:
* soft nofile 65536 * hard nofile 65536 监控和维护
PHP-FPM状态监控
启用PHP-FPM状态页面:
sudo vi /etc/php-fpm.d/www.conf 取消注释并修改以下行:
pm.status_path = /status ping.path = /ping 配置Web服务器以访问状态页面:
对于Apache:
<LocationMatch "/status"> Require ip 127.0.0.1 SetHandler "proxy:fcgi://run/php-fpm/www.sock" </LocationMatch> 对于Nginx:
location ~ ^/(status|ping)$ { allow 127.0.0.1; deny all; fastcgi_pass php-fpm; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 日志监控
配置日志轮转:
sudo vi /etc/logrotate.d/php-fpm 添加以下内容:
/var/log/php-fpm/*log { daily missingok rotate 52 compress delaycompress notifempty sharedscripts postrotate /bin/kill -SIGUSR1 `cat /run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true endscript } 性能监控工具
安装和使用监控工具:
# 安装htop sudo dnf install -y htop # 安装vmstat sudo dnf install -y procps-ng # 安装iotop(监控I/O) sudo dnf install -y iotop # 安装net-tools(网络监控) sudo dnf install -y net-tools 总结
本指南详细介绍了在Oracle Linux 8.3系统上安装和配置PHP的完整过程。我们从系统准备开始,逐步介绍了PHP的安装、配置、扩展安装、Web服务器配置、环境测试、故障排除、安全加固和性能优化等方面。
通过遵循本指南,您应该能够成功搭建一个稳定、安全、高效的PHP运行环境。根据您的具体需求,您可能需要进一步调整配置参数和安装额外的PHP扩展。
记住,维护一个PHP运行环境是一个持续的过程,需要定期更新软件包、监控系统性能并及时解决出现的问题。希望本指南能够帮助您顺利完成PHP环境的搭建,并为您的Web应用程序提供可靠的运行平台。
支付宝扫一扫
微信扫一扫