如何通过UNIX套接字配置Nginx proxy_pass Node.js HTTP服务器?

我正在尝试配置Nginx服务器以通过UNIX域套接字连接到Node.js HTTP服务器.

Nginx配置文件:

server {
  listen 80;

  location / {
    proxy_pass http://unix:/tmp/app.socket:/;
  }
}

(根据http://wiki.nginx.org/HttpProxyModule#proxy_pass)

Node.js脚本:

var http = require('http');

http.createServer(function(req,res) {
  console.log('received request');
  req.end('received request\n');
}).listen('/tmp/app.socket');

现在,当我试着打电话的时候

curl http://localhost/

我只在curl中获得502 Bad Gateway错误页面而在Node.js进程中没有任何内容.

难道我做错了什么?

编辑:

在尝试了quanta的解决方案后,错误必须与Nginx配置有关,因为Node.js进程正确建立了与套接字的连接.

我也尝试过这样配置Nginx:

upstream myapp {
  server unix:/tmp/app.socket;
}

server {
  listen 80;

  location / {
    proxy_pass http://myapp;
  }
}

但这也不起作用.

顺便说一下,我正在使用Nginx v1.0.6.

当我使用第二个配置时,以下内容正被写入Nginx中的错误日志

2011/09/28 13:33:47 [crit] 1849#0: *5 connect() to unix:/tmp/app.socket failed  (13: Permission denied) while connecting to upstream,client: 127.0.0.1,server:,request: "GET / HTTP/1.1",upstream: "http://unix:/tmp/app.socket:/",host: "localhost:80"

chmod 777 /tmp/app.socket

这是一个解决方案,但不是解决方案.

您可能应该使用相同的用户和/或同一组运行两个Web服务器,这样您就不必使您的套接字世界可读.此外,我不明白为什么套接字需要可执行.所以6应该就够了.即:660

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...