- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
好吧,想弄清楚这个问题有点疯狂。 (我已经阅读了数百个问题/答案和谷歌文章,但没有人回答过)
我刚刚从使用 mod_php
更改为通过 FastCGI 和 fpm 使用 PHP,使用 this question 中描述的方法,纯粹是因为我的印象是使用此设置为各个虚拟主机指定 php.ini 文件很“容易”。
我一直在纠结的是,如何指定每个虚拟主机使用的自定义 PHP ini 文件?
幸运的是,到目前为止它只在我的测试平台上使用......但如果我能解决这个问题,我希望在我的生产服务器上做同样的事情
最佳答案
我想我也可以发布我用池配置 fpm 的整个过程,正如@ChristianM 提到的,因为我还没有找到关于如何做的完整解释。
本文的第一部分主要是 AskUbuntu 帖子的副本: https://askubuntu.com/questions/378734/how-to-configure-apache-to-run-php-as-fastcgi-on-ubuntu-12-04-via-terminal/527227#comment905702_527227
最后一部分是如何配置池,并让虚拟主机使用相关的池设置
这里是:
安装 apache mpm worker(prefork/wroker 和事件的解释在 http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ ):
sudo apt-get install apache2-mpm-worker
安装fastcgi和php5-fpm:
sudo apt-get install libapache2-mod-fastcgi php5-fpm
现在启用您需要的模组,并禁用您不需要的模组:
sudo a2dismod php5 mpm_prefork
sudo a2enmod actions fastcgi alias mpm_worker
创建 php5.fcgi 文件并授予网络服务器使用权限。
sudo touch /usr/lib/cgi-bin/php5.fcgi
sudo chown -R www-data:www-data /usr/lib/cgi-bin
为 php5-fpm 创建全局配置
sudo nano /etc/apache2/conf-available/php5-fpm.conf
粘贴以下内容(我们将使用套接字而不是 IP 地址)
<IfModule mod_fastcgi.c>
AddHandler php5.fcgi .php
Action php5.fcgi /php5.fcgi
Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
注意:确保所有配置都遵循相同的新“要求全部授予”/“要求全部拒绝”语法......否则重启后你会感到痛苦......
启用 php5-fpm 配置
sudo a2enconf php5-fpm
重启apache和fpm
sudo service apache2 restart && sudo service php5-fpm restart
此设置实质上为 php 创建了一个全局 fastcgi 配置,它使用文件/etc/php5/fpm/php.ini 文件。
如果您有多个虚拟主机,需要不同的 php 配置,请继续下面的示例
首先,在/etc/php5/fpm/pool.d 目录中,您会找到默认的 www.conf 文件。复制这个,给它命名一些相关的东西:
sudo cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/domain2.conf
编辑此文件,更改池名称:
[...]
[domain2]
[...]
并将监听套接字的名称更改为相关的名称:
[...]
listen = /var/run/php5-fpm-domain2.sock
[...]
然后复制/usr/lib/cgi-bin/php5.fcgi 文件,再次将其命名为相关的名称:
cp /usr/lib/cgi-bin/php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi
现在您已准备好将 mod_fastcgi 模块添加到 domain2 虚拟主机。它与上面描述的几乎相同,但请注意 'Alias'、'FastCgiServer' 和 '-socket' 的变化
<VirtualHost *:80>
ServerName domain2.com
[...]
<IfModule mod_fastcgi.c>
AddHandler php5.fcgi .php
Action php5.fcgi /php5.fcgi
Alias /php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-domain2.fcgi -socket /var/run/php5-fpm-domain2.sock -pass-header Authorization -idle-timeout 3600
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
[...]
</VirtualHost>
重启apache和fpm
sudo service apache2 restart && sudo service php5-fpm restart
现在测试更改。
在您的新/etc/php5/fpm/pool.d/domain2.conf 文件中,添加一个 php 值更改(我选择了 session.name 值):
[...]
php_admin_value[session.name] = 'DOMAIN2'
[...]
现在在重新启动 fpm 之前测试配置:
sudo php5-fpm -t
如果配置失败它会告诉你,但更重要的是会告诉你你的配置是否正确。然后你可以继续并重新启动 fpm:
sudo service php5-fpm restart
最后,如果您想非常确定 php 值已设置,请在您的站点中创建 info.php,然后添加:
<?php
phpinfo();
?>
关于php - 使用 FastCGI/PHP-fpm 配置为每个虚拟主机指定 PHP ini 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30762854/
我对 FastCGI 的工作原理有点困惑。我的程序真的只有一个实例在运行,还是有一些神奇的线程在运行?这很重要,因为如果我的数据结构的范围在主循环之外,我需要知道这些数据结构是否需要是线程安全的。 编
FastCGI 很旧,但在某些情况下它似乎仍然是正确的答案。 似乎 Perl/Catalyst Web 应用程序的首选部署是使用 FastCGI。 FastCGI 在 Rails 中很流行,但现在似乎
除了建立 TCP 连接之外,如何检查 FastCGI 服务器是否处于事件状态并正常运行? 我有许多远程、独立的 FastCGI 服务器。我想监控 FastCGI 服务器本身以确保其存活。简单地向 We
我今天在 Cherokee 上设置 Django(使用 SCGI),我注意到 the Django docs假设您可以使用主机/端口组合或套接字在网络服务器和 Django 之间进行通信。 他们在这件
httpd 配置文件可以有多少个 fastcgi 处理程序?我想设置 httpd 服务器来服务器在不同 tcp 套接字上运行的多个 fastcgi 程序。例如:http://uwsgi-docs.re
我已经将 Web 服务器配置为通过命名管道使用“远程”fastCGI 应用程序(它实际上位于同一台 Windows 主机上)。我现在正试图找出如何启动 fastCGI 应用程序以使用此管道,但我不确定
我正在写 FastCGI wire protocol implementation in C (还导出了一个用于编写应用程序服务器的更高级别的 C++ 接口(interface))并且我已经完成了足够
我理解 FastCGI 在性能方面优于其他网关接口(interface)的目的。但是,如果实现 FastCGI 的库已经不得不通过艰苦的措施来实现安全高效的 TCP 服务,为什么不直接将应用程序编写为
我正在使用 nginx、factcgi 和 spawn-fcgi 并试图让它工作。 我按如下方式启动 spawn-fcgi: g++ rtbTimeSeries.cpp -o forecast.fcg
我有一个 FastCGI Perl 网络应用程序(使用 CGI::Fast 编写,但这应该无关紧要),我想在FastCGI 模式下进行测试。 我可以使用什么 Perl 模块来运行 FastCGI 应用
谁能提供我一步一步的方式,我可以运行apache2在快速-cgi上ubuntu 22.10,我尝试了几件事,但我得到一个空白页或错误,我是在新安装的Apache2服务器实例。。Thnx!。尝试了很多东
我正在构建一个 C++ API,我想将其作为 Web 服务提供。我正在考虑使用 REST API,并决定使用 FastCGI 或 FastCGI C++ 在 C++ API 和 Web 服务器之间进行
我试图添加 try_files 来检查 php 文件是否存在,但它给了我错误。 "try_files" directive is duplicate in /etc/nginx/snippets/fa
我计划在Rebol(目前在Apache 2上为CGI)中编写一个相当不错的Web应用程序,但是最初的性能测试却非常令人沮丧。在应用程序上运行apache基准测试时,我仅得到4-5个请求/秒。我想知道其
我正在使用 web.py、spawn_fcgi 和 nginx 在 Python 中编写 Web 应用程序。 假设我在 nginx 中有这个配置块: location / { include
我正在实现一个 fastcgi 应用程序,在阅读了 fastCGI 规范后,我发现了一个名为“请求多路复用”的功能。它让我想起了 Adobe RTMP 多路复用在协议(protocol)是专有和封
我一直在尝试实现Web服务器网关(出于娱乐和教育目的),并且对于前叉模型,我对FastCGI/SCGI背后的核心体系结构有一些疑问。 FastCGI/SCGI实现如何处理前叉场景中的通信? AFAIK
我编写了一个简单的 Perl 脚本,通过 Apache 上的 fastCGI 运行该脚本。该应用程序加载一组 XML 数据文件,这些文件用于根据传入请求的查询参数查找值。据我了解,如果我想增加应用程序
我正在尝试使用FastCGI(和restcgi)开发简单的RESTful api。当我尝试实现 POST 方法时,我注意到输入流(表示请求正文)是错误的。我做了一个小测试,看起来当我尝试读取流时,只收
我正在运行 2 个不同的 php 版本。它们运行良好,但没有连接到 mysql,我不知道为什么。它们应该是,但我不知道如何强制它们连接 mysql。 php版本是5.3.27和5.4.31如果您需要更
我是一名优秀的程序员,十分优秀!