ubuntu

如何在ubuntu上配置php-fpm多实例

小樊
35
2025-05-22 00:47:48
栏目: 编程语言

在 Ubuntu 上配置 PHP-FPM 多实例可以帮助你更好地管理不同的 PHP 应用程序,提高安全性和性能。以下是一个详细的步骤指南,帮助你在 Ubuntu 系统上设置多个 PHP-FPM 实例。

前提条件

步骤一:安装 PHP 和 PHP-FPM

首先,确保你的系统已经安装了 PHP 和 PHP-FPM。如果尚未安装,可以使用以下命令进行安装:

sudo apt update
sudo apt install php-fpm php-cli

步骤二:复制默认的 PHP-FPM 配置文件

PHP-FPM 的默认配置文件位于 /etc/php/{版本号}/fpm/pool.d/www.conf。为了创建多个实例,我们需要复制并修改这个配置文件。

假设我们要创建两个 PHP-FPM 实例,分别用于不同的项目。

创建实例目录

sudo mkdir -p /etc/php/{版本号}/fpm/pool.d

{版本号} 替换为你当前安装的 PHP 版本,例如 7.48.0

复制默认配置文件

sudo cp /etc/php/{版本号}/fpm/pool.d/www.conf /etc/php/{版本号}/fpm/pool.d/project1.conf
sudo cp /etc/php/{版本号}/fpm/pool.d/www.conf /etc/php/{版本号}/fpm/pool.d/project2.conf

步骤三:配置每个 PHP-FPM 实例

编辑每个实例的配置文件,以区分它们。

编辑 project1.conf

sudo nano /etc/php/{版本号}/fpm/pool.d/project1.conf

修改以下参数:

[project1]
user = www-data
group = www-data
listen = /run/php/php{版本号}-project1.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 512M

说明:

编辑 project2.conf

sudo nano /etc/php/{版本号}/fpm/pool.d/project2.conf

类似于 project1.conf,修改相关参数,例如:

[project2]
user = www-data
group = www-data
listen = /run/php/php{版本号}-project2.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 512M

确保 listen 路径唯一,例如使用 php{版本号}-project2.sock

步骤四:重启 PHP-FPM 服务

对于每个实例,分别重启 PHP-FPM 服务以应用配置更改。

sudo systemctl restart php{版本号}-fpm

例如,对于 PHP 7.4:

sudo systemctl restart php7.4-fpm
sudo systemctl restart php7.4-fpm@project1
sudo systemctl restart php7.4-fpm@project2

步骤五:配置 Nginx 或 Apache 使用不同的 PHP-FPM 实例

根据你使用的 Web 服务器,配置相应的虚拟主机以使用不同的 PHP-FPM 实例。

对于 Nginx

假设你有两个项目分别位于 /var/www/project1/var/www/project2

配置 project1

编辑 Nginx 的虚拟主机文件:

sudo nano /etc/nginx/sites-available/project1

添加或修改以下内容:

server {
    listen 80;
    server_name project1.example.com;

    root /var/www/project1;
    index index.php index.html index.htm;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php{版本号}-project1.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

配置 project2

编辑 Nginx 的虚拟主机文件:

sudo nano /etc/nginx/sites-available/project2

添加或修改以下内容:

server {
    listen 80;
    server_name project2.example.com;

    root /var/www/project2;
    index index.php index.html index.htm;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php{版本号}-project2.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

启用站点并测试配置

sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/project2 /etc/nginx/sites-enabled/

sudo nginx -t
sudo systemctl restart nginx

对于 Apache

如果你使用 Apache,可以通过 mod_proxy_fcgi 来配置。

启用必要的模块

sudo a2enmod proxy_fcgi setenvif
sudo systemctl restart apache2

配置虚拟主机

编辑 Apache 的虚拟主机文件,例如 /etc/apache2/sites-available/project1.conf

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

    <Directory /var/www/project1>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php{版本号}-project1.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

同样地,为 project2 创建类似的配置文件 /etc/apache2/sites-available/project2.conf

启用站点并测试配置

sudo a2ensite project1.conf
sudo a2ensite project2.conf
sudo systemctl restart apache2

步骤六:验证配置

确保每个项目都使用正确的 PHP-FPM 实例运行。

sudo tail -f /var/log/php{版本号}-fpm@project1.log
sudo tail -f /var/log/php{版本号}-fpm@project2.log

额外提示

  1. 权限设置:确保 PHP-FPM 用户(通常是 www-data)对项目目录有适当的读写权限。

  2. 资源限制:根据服务器的资源调整 pm.max_children 等参数,以避免资源耗尽。

  3. 安全性:限制 PHP-FPM 监听的地址,仅允许必要的连接,增强安全性。

  4. 监控和优化:使用工具如 systemd 的服务监控或第三方监控工具来监控 PHP-FPM 实例的性能和健康状态。

通过以上步骤,你应该能够在 Ubuntu 上成功配置多个 PHP-FPM 实例,以更好地管理和优化不同的 PHP 应用程序。

0
看了该问题的人还看了