温馨提示×

Ubuntu PHP-FPM如何连接

小樊
43
2026-08-24 11:16:01
栏目: 编程语言

Ubuntu 上,PHP-FPM 本身不会“主动连接”Web 服务器,而是 由 Web 服务器(Nginx / Apache)通过 socket 或 TCP 连接 PHP-FPM。下面按常见场景给你完整说明。


一、PHP-FPM 连接方式(核心概念)

PHP-FPM 提供两种监听方式:

1️⃣ Unix Socket(推荐,性能更好)

listen = /run/php/php-fpm.sock

2️⃣ TCP 端口

listen = 127.0.0.1:9000

Ubuntu 默认 使用 socket


二、确认 PHP-FPM 已安装并运行

安装

sudo apt update
sudo apt install php-fpm

查看版本

php -v

启动 / 重启

sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl status php-fpm

Ubuntu 中服务名通常是:

php8.1-fpm
php8.2-fpm
php8.3-fpm

三、Nginx 连接 PHP-FPM(最常见)

1️⃣ 找到 PHP-FPM socket

ls /run/php/

示例:

php8.2-fpm.sock

2️⃣ Nginx 配置示例

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    index index.php index.html;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

3️⃣ 重载 Nginx

sudo nginx -t
sudo systemctl reload nginx

四、Apache 连接 PHP-FPM(Ubuntu 常用方式)

1️⃣ 启用 proxy_fcgi

sudo a2enmod proxy_fcgi
sudo systemctl restart apache2

2️⃣ Apache 虚拟主机配置

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

五、常见错误 & 排查

❌ 502 Bad Gateway

原因:

  • socket 路径错误
  • PHP-FPM 没启动
  • socket 权限不足

✅ 检查:

ls -l /run/php/php8.2-fpm.sock
ps aux | grep php-fpm

❌ 权限问题

sudo chown www-data:www-data /run/php/php8.2-fpm.sock

六、快速自检流程 ✅

# 1. PHP-FPM 是否运行
systemctl status php8.2-fpm

# 2. socket 是否存在
ls /run/php/

# 3. Web 服务器配置是否正确
nginx -t 或 apache2ctl -S

# 4. 测试 PHP
echo "<?php phpinfo();" > /var/www/html/info.php

七、总结一句话

Ubuntu 中 PHP-FPM 是被动服务,由 Nginx/Apache 通过 socket 或 TCP 连接它。

如果你愿意,可以告诉我:

  • ✅ 用的是 Nginx 还是 Apache
  • ✅ Ubuntu 版本
  • ✅ PHP 版本

我可以给你 精确到命令级别 的配置方案。

0