我会以 Linux (以 Ubuntu/Debian 为例)Windows 两种主流操作系统分别进行说明,因为它们的配置方式有所不同。

apache部署php网站
(图片来源网络,侵删)

核心概念

在开始之前,你需要了解几个核心组件的关系:

  1. Apache (Web Server):负责接收来自用户的 HTTP 请求,并将请求的文件(如 HTML, CSS, 图片)或处理结果返回给用户,它本身不直接执行 PHP 代码。
  2. PHP (Processor):一种服务器端脚本语言,它负责解析和执行 PHP 代码,例如连接数据库、处理业务逻辑,并生成最终的 HTML 内容。
  3. PHP 模块 (如 mod_php):这是连接 Apache 和 PHP 的桥梁,Apache 通过加载这个模块,将所有 .php 文件的请求交给 PHP 模块去处理,处理完成后再将结果返回给 Apache。

第一部分:在 Linux (Ubuntu/Debian) 上部署

这是最常见的服务器环境,推荐使用 LAMP (Linux, Apache, MySQL, PHP)LEMP (Linux, Nginx, MySQL, PHP) 栈,这里我们专注 LAMP。

步骤 1:安装 LAMP 环境

打开终端,执行以下命令,一键安装 Apache、MySQL (MariaDB) 和 PHP。

# 更新软件包列表
sudo apt update
# 安装 Apache, MySQL, PHP 以及一些常用的 PHP 扩展
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-mbstring php-xml php-curl php-zip
  • apache2: Apache Web 服务器。
  • mysql-server: MySQL 数据库服务器。
  • php: PHP 解释器本身。
  • libapache2-mod-php: 关键! 让 Apache 能够识别和执行 PHP 文件的模块。
  • php-mysql, php-mbstring 等:PHP 常用的扩展,用于连接数据库、处理多字节字符等。

步骤 2:启动并检查 Apache 服务

安装完成后,Apache 通常会自动启动。

apache部署php网站
(图片来源网络,侵删)
# 检查 Apache 服务状态
sudo systemctl status apache2
# 如果没有运行,手动启动
sudo systemctl start apache2
# 设置 Apache 开机自启
sudo systemctl enable apache2

在浏览器中访问你的服务器 IP 地址 http://<你的服务器IP>,如果看到 "It works!" 页面,说明 Apache 已成功运行。

步骤 3:配置 PHP

默认情况下,PHP 配置文件位于 /etc/php/X.Y/apache2/php.ini (X.Y 是你的 PHP 版本号,如 4, 1 等)。

你可以根据需要修改这个文件,

# 编辑 PHP 配置文件 (使用 nano 或 vim)
sudo nano /etc/php/7.4/apache2/php.ini

常见的修改项:

apache部署php网站
(图片来源网络,侵删)
  • upload_max_filesize = 32M: 允许上传文件的最大大小。
  • post_max_size = 32M: POST 请求的最大大小。
  • memory_limit = 256M: PHP 脚本可使用的最大内存。
  • display_errors = On: 在开发环境中开启错误显示,方便调试。

修改完成后,必须重启 Apache 服务才能生效:

sudo systemctl restart apache2

步骤 4:部署你的 PHP 网站

假设你的 PHP 项目文件存放在 /var/www/my-website 目录下。

  1. 创建网站根目录

    sudo mkdir -p /var/www/my-website
  2. 将你的网站文件复制到该目录 你可以使用 scp, rsync, 或者 Git 将代码从本地服务器上传到 /var/www/my-website

  3. 设置正确的文件权限 这是非常重要的一步!Web 服务器(Apache 运行的用户通常是 www-data)需要有权限读取和执行你的网站文件。

    # 将目录的所有者改为 www-data
    sudo chown -R www-data:www-data /var/www/my-website
    # 给予目录和文件适当的读写执行权限
    sudo chmod -R 755 /var/www/my-website

步骤 5:配置虚拟主机 (Virtual Host)

虚拟主机允许你在一台服务器上托管多个网站,每个网站都有自己的域名和配置。

  1. 创建虚拟主机配置文件 假设你的域名是 www.example.com

    sudo nano /etc/apache2/sites-available/example.com.conf
  2. 粘贴以下配置内容

    <VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName www.example.com
        ServerAlias example.com  # 可选,访问 example.com 也指向此站
        DocumentRoot /var/www/my-website
        <Directory /var/www/my-website>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    • DocumentRoot: 指向你的网站文件目录。
    • AllowOverride All: 允许使用 .htaccess 文件进行目录级别的配置(如果需要)。
    • Require all granted: 允许所有用户访问。
  3. 启用虚拟主机

    # 启用新配置
    sudo a2ensite example.com.conf
    # 禁用默认的 000-default 站点 (可选)
    sudo a2dissite 000-default.conf
    # 重启 Apache 使配置生效
    sudo systemctl restart apache2

步骤 6:配置 DNS 和测试

  1. DNS 配置:在你的域名提供商(如 GoDaddy, Namecheap)后台,将域名的 A 记录指向你的服务器 IP 地址。
  2. 测试:等待 DNS 生效后(可能需要几分钟),在浏览器中访问 http://www.example.com,如果能看到你的 PHP 网站,恭喜你,部署成功!

第二部分:在 Windows 上部署

在 Windows 上,推荐使用集成的安装包,如 XAMPPWampServer,它们已经预先配置好了 Apache 和 PHP,大大简化了安装过程。

这里以 XAMPP 为例。

步骤 1:下载并安装 XAMPP

  1. 访问 XAMPP 官网
  2. 下载适用于 Windows 的版本。
  3. 运行安装程序,按照提示进行安装,建议安装到默认路径,如 C:\xampp

步骤 2:启动 XAMPP 控制面板

安装完成后,启动 XAMPP Control Panel。

  1. 在控制面板中,找到 ApacheMySQL 模块。
  2. 点击 Start 按钮来启动它们,确保它们的状态是 "Running"。

步骤 3:部署你的 PHP 网站

XAMPP 的默认网站根目录是 C:\xampp\htdocs

  1. 将你的 PHP 项目文件 复制到 C:\xampp\htdocs 文件夹中,或者在该文件夹内创建一个新的子文件夹(my-website)。
  2. 启动 Apache 和 MySQL
  3. 测试:在浏览器中访问 http://localhost/my-website (如果你的项目在 htdocs/my-website 目录下),如果能看到你的网站,说明基本部署成功。

步骤 4:配置虚拟主机 (可选)

如果你希望使用域名(如 www.example.com)而不是 localhost 来访问网站,可以配置虚拟主机。

  1. 编辑 httpd-vhosts.conf 文件 用记事本或代码编辑器打开 C:\xampp\apache\conf\extra\httpd-vhosts.conf

  2. 在文件末尾添加以下配置

    <VirtualHost *:80>
        DocumentRoot "C:/xampp/htdocs/my-website"
        ServerName www.example.com
        ServerAlias example.com
        <Directory "C:/xampp/hosts/my-website">
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
  3. 编辑 hosts 文件 这个文件用于将本地域名映射到 0.0.1

    • Win + R,输入 drivers\etc\hosts 并回车。
    • 用记事本打开 hosts 文件。
    • 在文件末尾添加一行:0.0.1 www.example.com example.com
  4. 重启 Apache 在 XAMPP Control Panel 中,先 Stop Apache,然后再 Start Apache。

  5. 测试 现在在浏览器中访问 http://www.example.com,应该就能看到你的网站了。


常见问题与解决

  1. 问题:浏览器直接下载 PHP 文件,而不是解析执行。

    • 原因:Apache 的 mod_php 模块没有正确加载,或者 MIME 类型配置错误。
    • 解决
      • Linux: 确保安装了 libapache2-mod-php 并重启了 Apache,检查 /etc/apache2/mods-enabled/ 目录下是否有 php.confphp7.x.conf 的符号链接。
      • Windows (XAMPP): 检查 httpd.conf 文件中是否有 LoadModule php_module "modules/phpXapache2_4.dll" 这样的行(X 是你的 PHP 版本),并且没有被注释掉。
  2. 问题:Forbidden 403 You don't have permission to access...

    • 原因:Web 服务器用户(Linux 下的 www-data)没有权限访问网站目录或文件。
    • 解决:重新设置文件权限。
      • Linux: 运行 sudo chown -R www-data:www-data /var/www/your-sitesudo chmod -R 755 /var/www/your-site
      • Windows: 检查网站文件夹的 NTFS 权限,确保 SYSTEMUsers 用户组有读取和执行权限。
  3. 问题:Internal Server Error 500

    • 原因:这是一个笼统的错误,可能由 PHP 语法错误、Apache 配置错误、PHP 脚本超时等多种原因引起。
    • 解决
      • 检查 PHP 代码是否有语法错误。
      • Linux: 查看 Apache 的错误日志文件,通常位于 /var/log/apache2/error.log,里面会有详细的错误信息。
      • Windows: 查看 XAMPP 的 Apache 错误日志,或在 php.ini 中设置 display_errors = On 来直接在页面上看到错误。
  4. 问题:如何让 Apache 支持 .htaccess 文件?

    • 原因:在虚拟主机配置中,AllowOverride 指令设置为 None
    • 解决:在虚拟主机配置文件中,将对应目录的 <Directory> 指令里的 AllowOverride 设置为 AllFileInfo(如果只需要重写功能)。
      <Directory /var/www/my-website>
          AllowOverride All
      </Directory>
    • 修改后,必须重启 Apache

安全建议

  1. 不要使用 root 用户运行 Apache:默认情况下,Apache 会以低权限用户运行,这是安全的最佳实践。
  2. 定期更新:保持你的操作系统、Apache、PHP 和所有软件库为最新版本,以修复安全漏洞。
  3. 禁用不必要的目录索引:在 httpd.conf 或虚拟主机配置中,确保 Options 指令里没有 Indexes,或者将其删除,防止用户浏览目录列表。
  4. 配置防火墙:只开放必要的端口(如 80 HTTP, 443 HTTPS)。

希望这份详细的指南能帮助你成功部署 PHP 网站!