atom feed25 messages in ru.sysoev.nginxRe: mod_cgi for nginx - anyone?
FromSent OnAttachments
mikeFeb 6, 2009 2:55 pm 
Atif GhaffarFeb 6, 2009 3:25 pm 
Atif GhaffarFeb 6, 2009 3:28 pm 
mikeFeb 6, 2009 3:35 pm 
mikeFeb 6, 2009 3:36 pm 
Igor SysoevFeb 7, 2009 2:16 am 
mikeFeb 7, 2009 2:32 am 
Igor SysoevFeb 7, 2009 2:57 am 
mikeFeb 7, 2009 3:21 am 
Volodymyr KostyrkoFeb 7, 2009 12:32 pm 
Manlio PerilloFeb 7, 2009 12:38 pm 
Grzegorz NosekFeb 7, 2009 1:48 pm 
Jim OhlsteinFeb 7, 2009 6:50 pm 
mikeFeb 8, 2009 1:18 am 
Igor SysoevFeb 8, 2009 2:10 am 
Igor SysoevFeb 8, 2009 2:16 am 
Grzegorz NosekFeb 8, 2009 4:56 am 
Grzegorz NosekFeb 8, 2009 5:02 am 
Jim OhlsteinFeb 8, 2009 8:48 am 
Grzegorz NosekFeb 8, 2009 10:33 am 
Andrius SemionovasFeb 8, 2009 11:09 am 
Jim OhlsteinFeb 8, 2009 11:12 am 
Grzegorz NosekFeb 8, 2009 4:30 pm 
Grzegorz NosekFeb 8, 2009 4:36 pm 
Andrius SemionovasFeb 9, 2009 5:01 am 
Subject:Re: mod_cgi for nginx - anyone?
From:Igor Sysoev (is@rambler-co.ru)
Date:Feb 7, 2009 2:57:28 am
List:ru.sysoev.nginx

On Sat, Feb 07, 2009 at 02:33:09AM -0800, mike wrote:

On Sat, Feb 7, 2009 at 2:16 AM, Igor Sysoev <is@rambler-co.ru> wrote:

nginx is not general purpose server, it's rather highload server. CGI is not compatible with highload: if you run Apache/CGI, then CGI will became bottleneck much earlier than Apache.

There are two ways to implement CGI inside nginx:

1) simple one: just fork()ing worker process that has received a request for CGI and exec() a CGI program. It's simple enough, but has a lot of overhead. Besides CGI programs will run with worker privilege only.

and it requires the CGI program to be modified, yeah?

No.

2) complex way: to run a special CGI manager (probably with root privilege as master process) and to pass it requests/sockets using Unix domain sockets. Then the manager can fork/exec CGI programs with required privileges and with minimal overhead to nginx workers.

The second way will require some time to program, but the outcome will be much similar like just proxying to mini_httpd ( http://acme.com/software/mini_httpd/ ).

this is like starting out with something like php-fpm, and morphing into a small httpd?

No, the special CGI manager is a nginx process that fork()ed by master nginx process (like worker processes). The communication protocol between workers and the manager is not HTTP: a worker starts to handle a request, then it sees that the request should be handled by CGI, something like

location /mailman/ { cgi_script ...; cgi_user ...; ... }

and pass the request and client socket to the manager.

BTW, it seems that using Apache with several worker processes (2-5) for bugzilla, mailman, etc. will not consume much CPU/memory: look top.

I'm just looking at it from simplifying the system administration.

I know it is not the most performant, those tools are not my preferred ones, I just have to support hosting them right now...

I understand this, but currently nginx has more priority tasks.