不久前,我开始使用 Cherokee 托管网站。对于外部源(FastCGI 等),如果找不到在指定套接字或端口上运行的进程,它可以选择启动进程。这很棒,因为这意味着如果 PHP 或 Django 站点发生故障(它们偶尔会发生故障),它会自动重新启动。
在使用 PHP-FPM 的新服务器上,我无法使用 Cherokee(它有一个 PHP 错误),因此我已转移到 NGINX。我真的很喜欢 NGINX(因为它的配置风格),但是我遇到了进程崩溃并且永远不会重生的严重问题。PHP 有时会这样做,但 Django 站点更像是一个问题。我已经为它们创建了 init 脚本,它们在启动时出现,但是如果它们在重新启动之间出现故障,这对我没有帮助。
我想我正在寻找 FastCGI 代理。像切诺基这样的东西,知道哪些进程应该在哪些套接字/端口上运行并按需重新生成它们。这样的事情存在吗?有没有办法将它构建到 NGINX 中(为了便于配置)?
我想用 C# 编写几个 fastcgi 应用程序。
我知道 Mono 可以在支持 fastcgi 的 Web 服务器上运行 ASP.NET,但这不是我需要的。
是否有任何适用于 .NET/Mono 的 FastCGI 库?
我正在尝试在 FreeBSD 上设置 nginx 和 cgit,但 nginx 无法访问/var/run/fcgiwrap/fcgiwrap.sock
.
在我的/etc/rc.conf
I 中fcgiwrap_user="www"
,我已经设置了,www
也是 nginx 运行的用户。
当我由表演fcgiwrap.sock
拥有时,一切都按我想要的方式工作。www
chown www /var/run/fcgiwrap/fcgiwrap.sock
然而,这当然不是正确的方法,它只会持续到重新启动。
我假设设置fcgiwrap_user="www"
也会决定这一点。
我错过了什么吗?
更新:
我注意到当我使用service fcgiwrap start
or 时restart
,消息Starting fcgiwrap
后面跟着chmod: /var/run/fcgiwrap/fcgiwrap.sock: No such file or directory
. 然而/var/run/fcgiwrap/fcgiwrap.sock
之后确实存在。
- 编辑 - 更奇怪的是我是否chmod 777 /var/run/php-fastcgi/php-fastcgi.socket
有效。如果它不是 www-data, php-www ( 也不是 root ) 那么用户试图访问套接字:|
-edit2- 我添加chown www-data:$FASTCGI_GROUP $SOCKET
到下面脚本的末尾(就在 之后spawn-fcgi
)并解决了问题,但我很困惑,www-data 在 php-www 组中。为什么必须是所有者。我没有将 FASTCGI_USER 改回 www-data bc 它会破坏目的(它会允许 PHP 文件以 www-data 的形式访问我的所有文件,这是我不想要的)
基本上我想做的是让 PHP 进程不是 www-data,所以如果它受到损害,它的损害仅限于我拥有的极少数 PHP 站点。我所做的是创建用户 php-www 并将其组添加到 www-data。当我以 www-data 身份登录时,我可以访问 php-www 中的所有内容,但是 php-www 只能访问我的 PHP 站点。完美的。
我运行了 php+nginx。但是如何改变它给了我一个问题。我在 init.d 脚本中看到了 www-data 提及,该脚本更改了文件夹的所有权。很好,我把它改成了php-www。那不是问题。
问题是生成脚本。
#!/bin/bash
FASTCGI_USER=php-www
FASTCGI_GROUP=php-www
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi
/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5 …
Run Code Online (Sandbox Code Playgroud)