25 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 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: mod_cgi for nginx - anyone?Actions...
From:Igor Sysoev (is@rambler-co.ru)
Date:Feb 7, 2009 2:16:32 am
List:ru.sysoev.nginx

On Fri, Feb 06, 2009 at 02:55:25PM -0800, mike wrote:

Igor, et al:

Is there a reason that there has not been an attempt to directly call CGI programs (compiled CGI, perl CGI, whatever) in nginx?

I would love to take out proxying to apache if I could.

Is there a blocking nature in CGI or something else that makes it impossible to function, or has there been no interest? I have a handful of apps I have to support (bugzilla, mailman, etc.) that I have to proxy to apache right now.

I'd be willing to put some money down for it, too. (and mod_svn !)

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.

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/ ).

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