如何在 macOS M1 上为 Apache 正确启用 PHP 模块

3次阅读

如何在 macOS M1 上为 Apache 正确启用 PHP 模块

本文详解 macos m1(apple silicon)环境下通过 homebrew 安装 php 后,如何安全、合规地将其集成到系统自带 apache 中,重点解决因 macos 强制代码签名导致的 `libphp.so` 加载失败问题。

macOS M1 上使用 Homebrew 安装 PHP(如 brew install php)后,PHP CLI 可正常运行,但直接在 apachehttpd.conf 中通过 LoadModule php_module 加载 Homebrew 提供的 libphp.so 通常会失败——这不是路径错误,而是 macos 系统级安全机制所致。

执行 sudo apachectl configtest 会明确报错:

httpd: Syntax error on line 190 of /private/etc/apache2/httpd.conf: Code signing absent - not loading module at: /opt/homebrew/opt/php@8.1/lib/httpd/modules/libphp.so

这是因为从 macOS Monterey(12.3+)起,系统 Apache(/usr/sbin/httpd)要求所有加载的第三方模块必须具备有效的 apple 代码签名(entitlements),而 Homebrew 编译的 libphp.so 默认无签名,因此被内核拒绝加载。

正确解决方案:不直接加载 Homebrew 的 .so,而是使用 mod_proxy_fcgi + php-fpm(推荐且官方支持的方式)

立即学习PHP免费学习笔记(深入)”;

这是 apple 和 PHP 社区共同推荐的现代部署模式,既规避签名限制,又提升性能与安全性。

步骤如下:

  1. 确认已安装并启动 php-fpm
    Homebrew 安装 PHP 时已附带 php-fpm:

    brew services start php # 或手动启动 sudo php-fpm
  2. 启用 Apache 的必要模块
    编辑 /etc/apache2/httpd.conf,取消以下三行的注释(确保启用):

    LoadModule proxy_module libexec/mod_proxy.so LoadModule proxy_fcgi_module libexec/mod_proxy_fcgi.so LoadModule rewrite_module libexec/mod_rewrite.so
  3. 配置 PHP 处理规则
    在 httpd.conf 底部或 块中添加:

    # 将 .php 请求代理至 php-fpm      SetHandler "proxy:fcgi://127.0.0.1:9000" 

    ✅ 注意:php-fpm 默认监听 127.0.0.1:9000(可通过 brew services list | grep php 查看状态,或检查 /opt/homebrew/etc/php/*/php-fpm.d/www.conf 中的 listen = 配置)

  4. 设置文档根目录的 PHP 支持(可选但推荐)
    若使用 /Library/WebServer/Documents/,补充:

         Options Indexes FollowSymLinks     AllowOverride All     Require all granted     # 支持 .htaccess 重写(如 wordPress)     RewriteEngine On 
  5. 重启服务并验证

    sudo apachectl configtest  # 确保无语法错误 sudo apachectl restart brew services restart php  # 确保 php-fpm 运行
  6. 测试 index.php
    在 Web 根目录下创建:

    访问 http://localhost/index.php,应显示完整的 PHP 信息页。

⚠️ 重要提醒:

  • ❌ 不要尝试对 libphp.so 手动签名(需私钥、开发者账号、复杂 entitlements 配置,且易失效);
  • ❌ 避免替换系统 Apache 二进制文件(违反 SIP,高风险);
  • ✅ php-fpm + mod_proxy_fcgi 是 macOS 官方文档及 PHP.net 明确推荐的生产就绪方案;
  • 如需多版本 PHP 切换,可用 brew unlink php && brew link php@8.2 并同步更新 php-fpm 配置。

至此,PHP 已安全、稳定地运行于 macOS M1 的 Apache 之上,兼具兼容性与可维护性。

text=ZqhQzanResources