把rtorrent的webUI换成由Nginx驱动了

从rutorrent的Google Code官方网站获悉 nginx/0.8.54开始已经支持SCGI 于是产生了把Apache换成Nginx的想法。
过程是相当的简单 但是后来的问题也不少。
Nginx做一个如下设置即可

location /RPC2 {
include scgi_params;
scgi_pass localhost:5000;
}

然后把某目录的root设置一下即可。
但是有个问题。webUI一直提示
(rutorrent依赖php(5)-cli 但是装完这个虽然又一部分PHP结尾的警告消失了,但还是有问题。)

Web-server user can't access 'stat' program. Some functionality will be unavailable.
rTorrent's user can't access 'id' program. Some functionality will be unavailable.

在Google搜索了一下 都说在rutorrent的config里面在$pathToExternals变量里面手动指定curl和stat等文件的绝对路径就好了,测试了一下 确实没问题 但是心里就不爽了 凭什么在Nginx里面要修改?原来的Apache里面就不要?
我又把apache挂载在81端口 发现什么都不要改 工作的好好的。
心里实在是不爽 就开始看rutorrent的代码 发现了这样一句话

Something like /usr/bin/curl. If empty, will be founded in PATH.

难道是这个$PATH变量有什么端倪?

写了一个test.php

[php]system('echo $PATH');
echo "\n";
system('curl --help');[/php]

运行下来没什么问题啊 一切输出都正常.
难道是rutorrent的检测问题?
观察rutorrent的代码
找到这样一个函数

[php]function findEXE( $exe )
{
global $pathToExternals;
if(isset($pathToExternals[$exe]) && !empty($pathToExternals[$exe]))
return(is_executable($pathToExternals[$exe]) ? $pathToExternals[$exe] : false);
$path = explode(":", getenv('PATH'));
foreach($path as $tryThis)
{
$fname = $tryThis . '/' . $exe;
if(is_executable($fname))
return($fname);
}
return(false);
}
[/php]

发现他使用的是getenv 我在Nginx驱动的PHP下面getenv('PATH')一下 发现是空的 但是在apache驱动的页面 getenv('PATH')就输出了

/usr/local/bin:/usr/bin:/bin

猜想得到了真实。
然后我检查了一下phpinfo 终于找到了问题所在 apache驱动的phpinfo里面 有个Apache Environment段落 里面就是有PATH这个东西。
Apache这个是在Mod env定义了的Mod ENV会继承由启动Apache的SHELL所定义的PATH的位置。
你可以看一下Debian的apache2的init脚本/etc/init.d/apache2 会看到这样一句话

ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"

你可以在这里修改 也可以把它注释掉 让他集成启动apache的shell所在的PATH。

对于我的问题来说 由于Nginx不参与PHP的解析和执行 所以 问题肯定处在FPM上面 看了一下我的FPM POOL的配置文件定义 找到了这样一段

; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

All $VARIABLEs are taken from the current environment.

所以我只要修改

;env[PATH] = /usr/local/bin:/usr/bin:/bin

env[PATH] = $PATH

重新启动FPM后,问题解决 rutorrent欢快的拥抱着Nginx。

apache下的设定请看这里 http://ihipop.info/2010/08/1363.html#apache_scgi
Nginx的SCGI模块 http://wiki.nginx.org/HttpScgiModule

Author Info :
  • From:把rtorrent的webUI换成由Nginx驱动了
  • URL:https://blog.ihipop.com/2011/03/2204.html
  • Please Reserve This Link,Thanks!
  • 发表回复

    您的电子邮箱地址不会被公开。 必填项已用*标注