我最近在 ubuntu 虚拟机上研究三层架构,1 个桌面和 2 个服务器,
他们的网络配置设置为桥接适配器,以便直接与 wifi 卡通信
机器 | 角色 |
---|---|
Ubuntu 桌面 22.04 | Apache 2.4.52 |
Ubuntu 服务器 1 22.04 | PHP-FPM 8.1 |
Ubuntu 服务器 2 22.04 | MySQL 8.0.36 |
- 首先我启用了代理、proxy_fcgi 和重写模块,因为 apache 和 phpfpm 使用 fastcgi 协议进行通信,配置了我的 apache 虚拟主机并将 sethandler ip 设置为 phpFPM_serverIP:port(9000),重新加载了 apache2 服务并检查了该服务,它运行良好
我的虚拟主机配置
<VirtualHost *:80>
ServerName sghaierDev.com
ServerAlias www.sghaierDev.com
ServerAdmin webmaster@localhost
# PHP-FPM proxying
<FilesMatch \.php$>
SetHandler "proxy:fcgi://php_fpm_server_ip:9000"
</FilesMatch>
DocumentRoot /var/www/sghaierDev
<Directory /var/www/sghaierDev>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- 之后我传递到 phpfpm 服务器,我在配置文件 (/etc/php/8.1/fpm/pool.d/www.conf) 中设置了 listen 指令,重新启动了服务并且它运行正常
php fpm 配置(省略注释以澄清)
user = www-data
group = www-data
listen = php_fpm_server_ip:9000
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
- 对于 mysql 执行相同的步骤,我将绑定地址设置为 mysqlserverIp,重新启动服务,它也能正常工作
Mysql 配置(省略注释以澄清)
user = mysql
port = 3306
datadir = /mnt/mysql_data
bind-address = mysql_server_ip
mysqlx-bind-address = 127.0.0.1
测试阶段
- 在没有 filesMatch 指令的情况下进行测试时,可以正常访问 php 文件(例如 types.php)
types.php 代码
<?php
$user = "adem";
$password = "password";
$database = "projects";
$table = "categories";
try {
$db = new PDO("mysql:host=mysql_server_ip;dbname=$database",
$user, $password);
echo "<h2>Projects categories</h2><ol>";
foreach($db->query("SELECT p_type FROM $table") as $row) {
echo "<li>" . $row['p_type'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
问题
- 当添加提到的指令以设置 phpfpm 和 apache 之间的连接时,他返回文件未找到,我想也许我应该更改文件权限,我已经做了但我得到了相同的输出,我也检查了 phpfpm 和 apache 机器中的配置文件(特别是 ip 地址)并且值设置正确,还检查了双方的防火墙权限,它们允许任何具有端口 9000(phpfpm)和 80(apache)的主机
- 我还检查了虚拟主机中提到的错误日志,它显示了这个错误
[2024 年 4 月 1 日星期一 16:41:36.755830] [proxy_fcgi:error] [pid 5356] [客户端 php-fpm_ip:49204] AH01071:出现错误“主脚本未知”
任何解决方案,因为我是处理这些类型的架构的新手,我在寻找解决方案上浪费了太多时间,提前谢谢