# Fcgiwrap upstream errors

**URL:** <https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649>\
**Category:** NGINX\
**Created:** [February 28, 2009, 11:13am UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649 "2009-02-28T11:13:14Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [February 28, 2009, 11:13am UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/1 "2009-02-28T11:13:14Z")

</div>

Hello,

I’m still trying to get fcgiwrap to handle a hello, world perl cgi  
script.

I run:

spawn-fcgi -f /usr/local/bin/fcgiwrap -s /tmp/cgi.sock

The first time I try to pull up my cgi-bin/test.pl file, I get:

connect() to unix:/tmp/cgi.sock failed (13: Permission denied) while  
connecting to upstream

Then I tried chmod o+w /tmp/cgi.sock

and then I get:

upstream closed prematurely FastCGI stdout while reading response header  
from upstream

… I read most of the 42 results I got from querying the mailing list  
about this error… to no avail.

Any other suggestions?

Thanks,  
Chris

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [February 28, 2009, 1:17pm UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/2 "2009-02-28T13:17:05Z")

</div>

On sob, lut 28, 2009 at 01:52:21 -0800, Chris Cortese wrote:

> Hello,

Hi,

> I’m still trying to get fcgiwrap to handle a hello, world perl cgi script.

Care to post it here? Maybe it’s a simple missed/double newline or some  
such?

> I run:
> 
> spawn-fcgi -f /usr/local/bin/fcgiwrap -s /tmp/cgi.sock
> 
> The first time I try to pull up my cgi-bin/test.pl file, I get:
> 
> connect() to unix:/tmp/cgi.sock failed (13: Permission denied) while  
> connecting to upstream
> 
> Then I tried chmod o+w /tmp/cgi.sock

Yes, the web server must have access to the socket.

> and then I get:
> 
> upstream closed prematurely FastCGI stdout while reading response header  
> from upstream
> 
> … I read most of the 42 results I got from querying the mailing list  
> about this error… to no avail.

Please update fcgiwrap (I have just pushed a new snapshot with possibly  
better error reporting), and retry. If you get a 403 response, check  
your  
Nginx error log (fcgiwrap got the request but declined to run it for  
some reason). If it’s still a 502, either Nginx is misconfigured, or  
something is badly broken in your CGI script (a CR on the hashbang line  
is one tricky mofo ;))

If it doesn’t help, post the relevant parts of your config.

Best regards,  
Grzegorz N.

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [February 28, 2009, 1:27pm UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/3 "2009-02-28T13:27:40Z")

</div>

Grzegorz I don’t know if you have enough time to whip up a quick perl  
launcher that uses tcp like php-fpm commonly does and makes it easy to  
say how many children you’d like? I don’t know perl good enough or  
trust my hacking skills for that. Of course then it would be even one  
step closer to the solution we had talked about.

On Feb 28, 2009, at 4:04 AM,

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [February 28, 2009, 1:31pm UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/4 "2009-02-28T13:31:47Z")

</div>

On sob, lut 28, 2009 at 04:19:46 -0800, mike wrote:

> Grzegorz I don’t know if you have enough time to whip up a quick perl  
> launcher that uses tcp like php-fpm commonly does and makes it easy to  
> say how many children you’d like? I don’t know perl good enough or  
> trust my hacking skills for that. Of course then it would be even one  
> step closer to the solution we had talked about.

See my other reply.

Best regards,  
Grzegorz N.

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [March 1, 2009, 2:05am UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/5 "2009-03-01T02:05:32Z")

</div>

Try inserting:

chmod 0666, $socket\_path;

after

die “Cannot create socket at $socket\_path: $!\n” unless $socket;

Jim

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [March 1, 2009, 7:40am UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/6 "2009-03-01T07:40:33Z")

</div>

The new fcgiwrap is interesting, thanks.

No more 502 bad gateway, the browser now says simply “403” (the error I  
was getting on stdout already).

The new nginx error log msg is better too, although I still haven’t  
solved this problem. Here it is:

27211#0: \*33 FastCGI sent in stderr: “Cannot get script name, is  
DOCUMENT\_ROOT and SCRIPT\_NAME set and is the script executable?” while  
reading response header from upstream, client: … etc …

Script is executable by all.

The relevant parts of config are:

fastcgi\_param DOCUMENT\_ROOT $document\_root;  
fastcgi\_param SCRIPT\_NAME /full/path/to/my/cgi-bin$fastcgi\_script\_name;

Note that my cgi-bin is higher up in the directory tree than my web  
document root. Surely this is not a problem?? In Apache, this is  
accomplished with ServerAlias directive.

Also I notice on this page that the document\_root must end in a slash.  
[http://wiki.codemongers.com/NginxSimpleCGI](http://wiki.codemongers.com/NginxSimpleCGI) … unclear how to know if  
that’s part of my problem…

Chris

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [February 28, 2009, 11:56pm UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/7 "2009-02-28T23:56:38Z")

</div>

I’ll try the newer fcgiwrap when I get back home in a couple hours. For  
now, in case this is helpful info:

I’m getting a 403 Forbidden on the stdout of the terminal where I ran  
the fcgiwrap. At the same time I get

\*11 upstream closed prematurely FastCGI stdout while reading response  
header from upstream, client: my.ip.address, server: my\_server, request:  
“GET /cgi-bin/test.pl HTTP/1.1”, upstream:  
“fastcgi://unix:/tmp/cgi.sock:”, host: “my\_server:my\_port”

in the nginx error log

and 502 Bad Gateway in the browser.

I have chmod 755 test.pl. I took test.pl from the net somewhere. It is  
just:

#!/usr/bin/perl  
print “Content-Type: text/html\n\n”;  
print “Hello, World!\n”;

The relevant parts of my nginx config are:  
in my\_virtual\_host.conf:

location /cgi-bin/ {  
fastcgi\_pass unix:/tmp/cgi.sock;  
include /etc/nginx/perl\_fcgiwrap\_params;  
}

in perl\_fcgiwrap\_params: **note** I’ve tried a hundred different  
variations on this but this is the current one:

```
    gzip off; #gzip makes scripts feel slower since they have to

```

complete before getting gzipped  
fastcgi\_param QUERY\_STRING $query\_string;  
fastcgi\_param REQUEST\_METHOD $request\_method;  
fastcgi\_param CONTENT\_TYPE $content\_type;  
fastcgi\_param CONTENT\_LENGTH $content\_length;  
fastcgi\_param GATEWAY\_INTERFACE CGI/1.1;  
fastcgi\_param SERVER\_SOFTWARE nginx;

# fastcgi\_param SCRIPT\_FILENAME

$document\_root$fastcgi\_script\_name;  
fastcgi\_param SCRIPT\_FILENAME  
/home/my\_linux\_user/www/dev/mysite/trunk/cgi-bin$fastcgi\_script\_name;  
fastcgi\_param SCRIPT\_NAME  
/home/my\_linux\_user/www/dev/mysite/trunk/cgi-bin$fastcgi\_script\_name;  
fastcgi\_param REQUEST\_URI $request\_uri;  
fastcgi\_param DOCUMENT\_URI $document\_uri;  
fastcgi\_param DOCUMENT\_ROOT $document\_root;  
fastcgi\_param SERVER\_PROTOCOL $server\_protocol;  
fastcgi\_param REMOTE\_ADDR $remote\_addr;  
fastcgi\_param REMOTE\_PORT $remote\_port;  
fastcgi\_param SERVER\_ADDR $server\_addr;  
fastcgi\_param SERVER\_PORT $server\_port;  
fastcgi\_param SERVER\_NAME $server\_name;

… and just to reiterate, everything else on my site is working great,  
php, rewrites, everything else working as far as I can tell.

Thanks,  
Chris

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [March 1, 2009, 9:10am UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/8 "2009-03-01T09:10:06Z")

</div>

well remember, $\_POST is PHP only afaik.

you have to access it other ways in Perl/CGI

On Sat, Feb 28, 2009 at 10:52 PM, Chris Cortese

---

<div class="post-metadata">

**Author:** ![Chris\_Cortese](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/b487fb/32.png) [@Chris\_Cortese](https://www.ruby-forum.com/u/Chris_Cortese)\
**Post date:** [March 1, 2009, 8:01am UTC](https://www.ruby-forum.com/t/fcgiwrap-upstream-errors/161649/9 "2009-03-01T08:01:03Z")

</div>

I have resolved my problem and can now see my hello, world script! The  
final fix for me was I had to put the “root” directive inside my  
location /cgi-bin/ {} block.

I can’t test my real script yet because I hit a new problem. For some  
reason, I am not getting my $\_POST variables. I have to login to the  
site (and use $\_POST) to hit my real cgi script. This was working fine  
yesterday so it’s probably something simple.
