[mapserver-users] Problem to use mapserver as fcgi with spawn-fcgi and nginx - Process exit after each request

Guillaume Chanaud guillaume.chanaud at connecting-nature.com
Mon Aug 17 11:48:27 PDT 2009


Hello everybody,

I'm trying to setup mapserver running as Fast-CGI with Nginx webserver.
I don't know if my problem comes from mapserver ot spawn-fcgi (or 
nginx), but i'm pretty sure it's mapserver's fault because nginx and 
spawn-fcgi works well with lots of other FCGI.

I use the spawn-fcgi script from lighttpd (here : 
http://redmine.lighttpd.net/projects/spawn-fcgi/news ) with a personnal 
init script
My process are running ok, like it does with php5-cgi for example
My nginx is configure to pass every request to *.cgi to the mapserver 
fcgi instance, so every call to something.cgi works like a charm and 
mapserver process the query and return back what i'm asking for. I did 
the test with the sample data and tutorial and everything is ok.

But :
My fast cgi process process only one request and then die !

Passing things by TCP or socket doesn't change anything. If i spawn 5 
forks, each fork will handle one request and then die, so i can handle 
five request and then mapserver disapear from my system memory.
It works like a charm with php5-cgi (which is fcgi) and the process 
doesn't die. I only change the process to be spawned to mapserver 
instead of php5-cgi, and you know what ? Only one request and die...
I compiled mapserver with the --with-fcgi option, and everything is ok 
for the ./configure

I managed to debug the mapserver fcgi communication with fcgi-debug 
utilities (http://cgit.stbuehler.de/gitosis/fcgi-debug/)
Here is the dump of what i get :
--------------------------------------------------------------------------------------------------------------------------------------- 

vnode004:/usr/local/nginx/conf# spawn-fcgi -s /var/run/mapserver.socket 
-n -u nobody -- /usr/local/bin/fcgi-debug /usr/local/bin/mapserv
new connection 
(0)                                                                                                                       

begin request from webserver (0, 1): role: FCGI_RESPONDER, flags: 
none                                                                  
param from webserver (0, 1): 'QUERY_STRING' = 
''                                                                                         

param from webserver (0, 1): 'REQUEST_METHOD' = 
'GET'                                                                                    

param from webserver (0, 1): 'CONTENT_TYPE' = 
''                                                                                         

param from webserver (0, 1): 'CONTENT_LENGTH' = 
''                                                                                       

param from webserver (0, 1): 'SCRIPT_NAME' = 
'/cgi-bin/mapserv'                                                                          

param from webserver (0, 1): 'REQUEST_URI' = 
'/cgi-bin/mapserv'                                                                          

param from webserver (0, 1): 'DOCUMENT_URI' = 
'/cgi-bin/mapserv'                                                                         

param from webserver (0, 1): 'DOCUMENT_ROOT' = 
'/usr/local/nginx/html'                                                                   

param from webserver (0, 1): 'SERVER_PROTOCOL' = 
'HTTP/1.1'                                                                              

param from webserver (0, 1): 'GATEWAY_INTERFACE' = 
'CGI/1.1'                                                                             

param from webserver (0, 1): 'SERVER_SOFTWARE' = 
'nginx/0.7.61'                                                                          

param from webserver (0, 1): 'REMOTE_ADDR' = 
'90.45.64.64'                                                                               

param from webserver (0, 1): 'REMOTE_PORT' = 
'32938'                                                                                     

param from webserver (0, 1): 'SERVER_ADDR' = 
'192.168.100.4'                                                                             

param from webserver (0, 1): 'SERVER_PORT' = 
'8000'                                                                                      

param from webserver (0, 1): 'SERVER_NAME' = 
'mapserver.connecting-nature.com'                                                           

param from webserver (0, 1): 'REDIRECT_STATUS' = 
'200'                                                                                   

param from webserver (0, 1): 'SCRIPT_FILENAME' = 
'/usr/local/nginx/html/cgi-bin/mapserv'                                                 

param from webserver (0, 1): 'HTTP_HOST' = 
'mapserver.connecting-nature.com:8000'                                                        

param from webserver (0, 1): 'HTTP_USER_AGENT' = 'Mozilla/5.0 (X11; U; 
Linux i686 (x86_64); fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1'
param from webserver (0, 1): 'HTTP_ACCEPT' = 
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'                           

param from webserver (0, 1): 'HTTP_ACCEPT_LANGUAGE' = 
'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'                                              

param from webserver (0, 1): 'HTTP_ACCEPT_ENCODING' = 
'gzip,deflate'                                                                     

param from webserver (0, 1): 'HTTP_ACCEPT_CHARSET' = 
'ISO-8859-1,utf-8;q=0.7,*;q=0.7'                                                    

param from webserver (0, 1): 'HTTP_KEEP_ALIVE' = 
'300'                                                                                   

param from webserver (0, 1): 'HTTP_CONNECTION' = 
'keep-alive'                                                                            

params end from webserver (0, 
1)                                                                                                         

stdin closed from webserver (0, 
1)                                                                                                       

stdout from application (0, 1): Content-type: 
text/html\n                                                                                

stdout from application (0, 1): 
\n                                                                                                       

stdout from application (0, 1): No query information to decode. 
QUERY_STRING is set, but empty.\n                                       
stdout closed from application (0, 
1)                                                                                                    

end request from application (0, 1): applicationStatus: 0, 
protocolStatus: 
FCGI_REQUEST_COMPLETE                                        
connection closed 
(0)                                                                                                                    

** Message: process 5975 exited with status 
256                                                                                          

** Message: exit fcgi-debug
--------------------------------------------------------------------------------------------------------------------------------------------- 


As you can see, after the request i get a "** Message: process 5975 
exited with status 25".
In a php5-cgi debug session, i don't have this and after "connection 
closed (0)" the process is just waiting to handle another request.


What am i missing ? Is this the normal behavior of mapserver as fcgi (So 
we are stuck to apache fcgi process manager ?) ?!

Sorry if this post is too long or messy, i tried to figure things out as 
clear as possible. I can attach my nginx configuration file next time is 
somebody needs it.
(the spawn-fcgi is launched like this :
spawn-fcgi -s /var/run/mapserver.socket -n -u nobody -- 
/usr/local/bin/mapserv
or
spawn-fcgi  -a 127.0.0.1 -p 9000 -u nobody -- /usr/local/bin/fcgi-debug 
/usr/local/bin/mapserv
)
And for those who wants to quick reply "Why don't you just use Apache 
instead of Nginx", i have just lots of reason to become completly insane 
by trying mapserver+nginx (or : i have lots of professional reason to do 
this, even if it make me crazy)


Thanks a lot for those who can help me on this !

Guillaume Chanaud



More information about the MapServer-users mailing list