pvo*_*orb 16 nginx javascript proxypass socket node.js
我正在尝试配置 Nginx 服务器以通过 UNIX 域套接字连接到 Node.js HTTP 服务器。
Nginx 配置文件:
server {
listen 80;
location / {
proxy_pass http://unix:/tmp/app.socket:/;
}
}
Run Code Online (Sandbox Code Playgroud)
(根据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');
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试打电话时
curl http://localhost/
Run Code Online (Sandbox Code Playgroud)
我只在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
但这也不起作用。
顺便说一句,我正在使用 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"
Run Code Online (Sandbox Code Playgroud)
小智 8
chmod 777 /tmp/app.socket
这是一个解决方案,但不是解决方案。
您可能应该使用相同的用户和/或相同的组运行两个网络服务器,这样您就不必使套接字世界可读写。我也不明白为什么套接字需要是可执行的。所以6应该足够了。即:660
“502 Bad Gateway”表示 Nginx 无法接收来自上游服务器的响应。确保你有一个进程监听/tmp/app.socket:
# netstat --protocol=unix -nlp | grep app.socket
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28130 次 |
| 最近记录: |