Apache服务器与PHP基础
Apache服务器简介
- 功能:开源HTTP服务器,支持跨平台(Windows/Linux/Unix),提供网页服务、反向代理、负载均衡等功能。
- 核心特性:模块化设计(如
mod_rewrite
、mod_ssl
)、虚拟主机配置、动态内容处理。
PHP简介
- 功能:开源服务器端脚本语言,用于生成动态网页内容。
- 与Apache的关系:通过模块(如
mod_php
)或CGI/FastCGI与Apache交互,解析.php
文件。
Apache与PHP的整合配置
安装与依赖
操作系统 | 安装命令 |
---|---|
Ubuntu/Debian | sudo apt install apache2 php libapache2-mod-php |
CentOS/RHEL | sudo yum install httpd php php-cli |
配置文件路径
文件类型 | 默认路径 | 作用 |
---|---|---|
Apache主配置文件 | /etc/httpd/conf/httpd.conf |
全局服务器设置、模块加载、虚拟主机配置 |
PHP主配置文件 | /etc/php.ini |
PHP运行时参数(如memory_limit 、error_reporting ) |
Apache模块目录 | /etc/httpd/modules/ (CentOS) |
存放Apache模块(如mod_php.so ) |
关键配置步骤
- 启用PHP模块(以CentOS为例):
sudo a2enmod php7.4 # Ubuntu/Debian sudo yum install php-cli # CentOS/RHEL
- 修改Apache配置:在
httpd.conf
中添加以下指令以支持.php
文件:<FilesMatch .php$> SetHandler application/x-httpd-php </FilesMatch>
- 重启Apache服务:
sudo systemctl restart httpd # CentOS/RHEL sudo systemctl restart apache2 # Ubuntu/Debian
常见问题与解决方案
PHP文件返回404错误
原因 | 解决方案 |
---|---|
.php 文件未被识别为PHP |
检查Apache配置是否加载mod_php 模块,并确保AddType 或SetHandler 正确配置。 |
文件权限不足 | 设置Web目录权限:sudo chmod -R 755 /var/www/html 。 |
PHP版本冲突
- 问题:系统默认PHP版本过低,导致某些扩展不兼容。
- 解决方案:
- 安装目标PHP版本(如PHP 8.0):
sudo yum install remi-release # CentOS启用第三方源 sudo yum install php80 php80-cli
- 在Apache配置中指定PHP版本:
LoadModule php8_module modules/libphp8.0.so
- 安装目标PHP版本(如PHP 8.0):
性能优化建议
优化项 | 配置方法 |
---|---|
并发连接数 | 修改httpd.conf 中的MaxClients (Apache 2.2)或MaxRequestWorkers (Apache 2.4)。 |
PHP内存缓存 | 在php.ini 中启用opcache.enable=1 ,设置opcache.memory_consumption=128 。 |
Gzip压缩 | 在Apache中启用mod_deflate 模块,并配置: |
```apache
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
</IfModule>
```
| 上传文件大小限制 | 修改php.ini
中的upload_max_filesize=50M
和post_max_size=50M
。 |
disable_functions=eval,exec,passthru,shell_exec,system
防止目录遍历攻击
- 配置方法:在
.htaccess
或httpd.conf
中添加:<FilesMatch ".(jpg|jpeg|png|gif)$"> ForceType image/x-icon </FilesMatch>
强制HTTPS访问
- 配置SSL证书:
<VirtualHost :443> SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/key.pem DocumentRoot /var/www/html </VirtualHost>
- 重定向HTTP到HTTPS:
<VirtualHost :80> Redirect permanent / https://yourdomain.com/ </VirtualHost>
相关问题与解答
问题1:如何将Apache的PHP升级到最新版本?
解答:
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install php81 php81-cli php81-fpm sudo alternatives --set php /usr/bin/php81
sudo systemctl restart httpd
问题2:如何配置Apache虚拟主机以支持多个PHP项目?
解答:
- 编辑
httpd.conf
,添加虚拟主机配置:<VirtualHost :80> ServerName project1.local DocumentRoot /var/www/project1 <Directory /var/www/project1> AllowOverride All Require all granted </Directory> </VirtualHost>
- 修改本地
hosts
文件(如/etc/hosts
):0.0.1 project1.local 127.0.0.1 project2.local
- 重复配置其他项目,确保每个虚拟主机的
DocumentRoot
和`