- Ubuntu 12.04
- Apache 2.2.22
- PHP 5.3.10 [以 libapache2-mod-fcgid 身份运行]
[尝试匹配开发服务器与我的网络主机]
我设法使用包装器让 fcgi 工作,并注册了必要的处理程序,以便将 .html 文件解析为 php。现在,我试图弄清楚为什么我的脚本不能在每个目录中使用 php.ini 文件运行,这是据说默认行为。
从 phpinfo() 运行http://127.0.0.1/NEW/poop.html
Server API CGI/FastCGI
Virtual Directory Support disabled
Configuration File (php.ini) Path /etc/php5/cgi
Loaded Configuration File /var/www/johnny/public_html/php.ini
Scan this dir for additional .ini files /etc/php5/cgi/conf.d
它似乎可以从 [/etc/php5/cgi/php.ini] 读取配置,也可以从 Web 根目录读取配置,我必须在包装器脚本中定义它,以便它能够读取那里的 php.ini
[/var/www/php-fcgi-scripts/johnny/php-fcgi-starter]
#!/bin/sh
PHPRC=/etc/php5/cgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php -c /var/www/johnny/public_html
我结合了两个网络教程来让 FastCGI + VirtualHost 正常工作,并一直在一点一点地学习它的工作原理。这是我的 VirtualHost 设置:
[/etc/apache2/sites-available/johnny.conf]
<VirtualHost _default_:80>
ServerName johnny.10.128.0.2.xip.io
ServerAlias my.dev.server.public.IP
DocumentRoot /var/www/johnny/public_html/
<IfModule mod_fcgid.c>
SuexecUserGroup johnny johnny
<Directory /var/www/johnny/public_html/>
Options +ExecCGI -Indexes +FollowSymLinks +MultiViews
AllowOverride All
AddHandler fcgid-script .php .htm .html
FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter .php
FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter .htm
FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter .html
Order allow,deny
Allow from all
</Directory>
</IfModule>
ErrorLog /var/log/apache2/johnny-error.log
CustomLog /var/log/apache2/johnny-access.log combined
LogLevel warn
ServerSignature Off
</VirtualHost>
但它不会从 [/var/www/johnny/public_html/NEW/php.ini] 加载任何内容
检查这个 pastebin看看我对这台服务器所做的一切……我不得不重新调整其中的一些内容以反映我后来进行的故障排除,所以我希望我没有错过任何东西。我还没有尝试从头开始浏览这个列表(还没有……)。我也不确定是否有任何重要的行需要添加,因为我今天已经忙活了一段时间,主要是编辑然后恢复文件。
答案1
我想我已经明白了。
我从头开始,逐行检查 pastebin 的每一行,只使用 PHP 的必要部分作为 FastCGI,并研究每个小部分的工作原理。然后我尝试了很多方法,但都失败了,只剩下一件事可以尝试,也许这不是“正确的方法”,但是……
创建一个新<Directory>
块/etc/apache2/sites-available/johnny.conf
并复制指令,但进行一些更改
<Directory /var/www/johnny/public_html/new>
Options +ExecCGI -Indexes +FollowSymLinks +MultiViews
AllowOverride All
AddHandler fcgid-script .php .htm .html
FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new .php
FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new .htm
FCGIWrapper /var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new .html
Order allow,deny
Allow from all
</Directory>
然后创建一个单独的 fcgi 启动脚本/var/www/php-fcgi-scripts/johnny/php-fcgi-starter_new
#!/bin/sh
#PHPRC=/var/www/johnny/new
#export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php -c /var/www/johnny/public_html/new
我发现PHPRC=
在这种情况下它不起作用,但 -c 参数起作用!就是这样。这是一个 PITA,但它对我的目的来说已经足够好了。