温馨提示×

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

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

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

前提条件

  • 已安装 Ubuntu 服务器(推荐使用最新的 LTS 版本)。
  • 具有 sudo 权限的用户。

步骤一:安装 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 

说明:

  • listen:指定 Unix socket 的路径,确保不同实例的路径唯一。
  • pm.max_childrenpm.start_servers 等参数根据你的服务器资源进行调整。
  • php_admin_value[memory_limit]:设置每个子进程的内存限制。

编辑 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 实例运行。

  • 访问 project1.example.comproject2.example.com,检查是否正常显示。
  • 查看 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