我刚刚配置了 lighttpd 网络服务器以将 php-fcgi 请求传递给外部应用程序服务器。
应用程序服务器正在运行 PHP 5.3 和 spawn-fcgi。
问题是所有 Web 文件都需要存在于 Web 服务器和应用服务器上。如果我从应用服务器上删除 Web 文件,则会收到:“未指定输入文件”。如果我从 Web 服务器上删除 Web 文件,则会收到 404 错误。当 Web 文件同时存在于应用和 Web 服务器上时,它就可以正常工作。
这到底是怎么管理的?有没有办法跨服务器配置一组带有符号链接或类似内容的 Web 文件?通常如何解决这个问题?谢谢。
在 Web 服务器上配置 Lighttpd
#### fastcgi module
fastcgi.server = ( ".php" =>
( "app1.geodb.io" =>
(
"host" => "192.168.167.82",
"port" => 8080,
"check-local" => "disable",
"disable-time" => 3
)
)
)
答案1
我不确定 fastcgi 问题,但跨服务器同步文件的标准解决方案是rsync
(它使用有趣的算法来最小化网络流量)。假设您可以将其中一台服务器指定为“主服务器”,即将其文件定义为所有其他服务器的基础,这应该足够了:
rsync -avh /var/www/example/ remotehost:/var/www/example/
请注意,结尾的斜杠是有意义的,并且此命令将不是如果在主服务器上删除了文件,则删除远程主机上的文件。如果您想要附加 --delete:
rsync -avh --delete /var/www/example/ remotehost:/var/www/example/
您需要在两端都使用 rsync,当然,您需要 ssh 访问权限,因为它使用 ssh 作为传输方式(您可以使用其他方式,但如果您没有充分的理由切换,最好还是使用 ssh)。您可能还想在 cronjob 上运行它,但如果您使用自动化流程将文件部署到“主服务器”,您也可以将其添加到该作业中。
编辑:当然,您也可以通过 NFS 或某些其他网络文件系统在所有节点上挂载 /var/www/example,但这样会失去每个节点的独立性,并有可能造成瓶颈。但如果您的 .php 文件占用大量 CPU,而文件系统 I/O 并不那么重要,您绝对可以尝试此选项。