Node.js nginx在将nodejs与express和socket.io一起使用时返回502
我想不出这个问题。也许有人能帮我。 我有一个node.js应用程序,它基于express.js,也使用socket.io。这个应用程序运行在nginx代理之后,直到今天,一切都正常工作。 今天我不得不重新启动服务器,从那时起,当我尝试访问该站点时,我总是得到502 以下是我的nginx配置:Node.js nginx在将nodejs与express和socket.io一起使用时返回502,node.js,nginx,socket.io,Node.js,Nginx,Socket.io,我想不出这个问题。也许有人能帮我。 我有一个node.js应用程序,它基于express.js,也使用socket.io。这个应用程序运行在nginx代理之后,直到今天,一切都正常工作。 今天我不得不重新启动服务器,从那时起,当我尝试访问该站点时,我总是得到502 以下是我的nginx配置: map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream <my_app&
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream <my_app> {
server <my_ip>:4567;
keepalive 512;
}
server {
listen 80;
server_name <my_domain>;
server_tokens off;
client_max_body_size 32M;
keepalive_timeout 10;
large_client_header_buffers 8 32k;
access_log /var/log/nginx/<my_app>_access.log;
error_log /var/log/nginx/<my_app>_error.log;
location ~ ^/(favicon.ico) {
root /var/www/<my_app_root>/public;
access_log off;
expires max;
}
location / {
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_pass http://<my_app>;
proxy_redirect off;
}
}
map$http\u升级$connection\u升级{
默认升级;
""关闭,;
}
上游{
服务器:4567;
保持512;
}
服务器{
听80;
服务器名称;
服务器_令牌关闭;
客户最大尺寸为32M;
保持激活超时10;
大客户机头缓冲区8 32k;
access_log/var/log/nginx/_access.log;
error\u log/var/log/nginx/\u error.log;
地点~^/(favicon.ico){
root/var/www//public;
访问/注销;
最大值;
}
地点/{
proxy_next_上游错误超时http_500 http_502 http_503 http_504;
代理集头X-Real-IP$remote\u addr;
proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For;
代理设置头主机$http\U主机;
proxy\u set\u头X-NginX-proxy true;
proxy_http_版本1.1;
代理设置头主机$http\U主机;
代理设置头升级$http\U升级;
代理缓存8 32k;
代理缓冲区大小64k;
代理传递http://;
代理_重定向关闭;
}
}
这是来自nginx的错误
2014/05/09 13:53:38 [error] 3093#0: *23 upstream prematurely closed connection while reading response header from upstream, client: 217.110.45.3, server: <my_domain>, request: "GET / HTTP/1.1", upstream: "http://<my_ip>:4567/", host: "<my_domain>"
2014/05/09 13:53:38[错误]3093#0:*23从上游读取响应头时,上游连接过早关闭,客户端:217.110.45.3,服务器:,请求:“GET/HTTP/1.1”,上游:“HTTP://:4567/”,主机:“
我在ubuntu 12.04上使用nginx 1.6.0版
这是在/etc/init.d/中启动应用程序的脚本:
#!/bin/bash
NODE_ENV="production"
NODE_APP="<my_app>.js"
APP_DIR="/var/www/<my_domain>"
PID_FILE=/<my_path_to_pid>/app.pid
LOG_FILE=/<my_path_to_log>/app.log
NODE_EXEC="supervisor -w /var/www/<my_domain>"
start_app (){
if [ -f $PID_FILE ]
then
echo "$PID_FILE exists, App is already running or crashed"
else
echo "Starting App ..."
NODE_ENV=$NODE_ENV $NODE_EXEC $APP_DIR/$NODE_APP 1>$LOG_FILE 2>&1 &
echo $! > $PID_FILE;
fi
}
stop_app (){
if [ ! -f $PID_FILE ]
then
echo "$PID_FILE does not exist, App is not running"
else
echo "Stopping $APP_DIR/$NODE_APP ..."
echo "Killing `cat $PID_FILE`"
kill `cat $PID_FILE`;
rm -f $PID_FILE;
echo "App stopped"
fi
}
case "$1" in
start)
start_app
;;
stop)
stop_app
;;
restart)
stop_app
start_app
;;
status)
if [ -f $PID_FILE ]
then
PID=`cat $PID_FILE`
if [ -z "`ps -ef | grep $PID | grep -v grep`" ]
then
echo "Node app stopped but pid file exists"
else
echo "Node app running with pid $PID"
fi
else
echo "Node app stopped"
fi
;;
*)
echo "Usage: /etc/init.d/node-app {start|stop|restart|status}"
;;
esac
#/bin/bash
NODE_ENV=“生产”
NODE_APP=“.js”
APP_DIR=“/var/www/”
PID\u文件=//app.PID
LOG\u文件=//app.LOG
NODE_EXEC=“supervisor-w/var/www/”
启动应用程序(){
如果[-f$PID\U文件]
然后
echo“$PID_文件存在,应用程序已运行或崩溃”
其他的
echo“正在启动应用程序…”
NODE_ENV=$NODE_ENV$NODE_EXEC$APP_DIR/$NODE_APP 1>$LOG_FILE 2>&1&
echo$!>$PID\u文件;
fi
}
停止应用程序(){
如果[!-f$PID\U文件]
然后
echo“$PID_文件不存在,应用程序未运行”
其他的
echo“正在停止$APP\u DIR/$NODE\u APP…”
echo“正在清除'cat$PID_文件'
杀死“cat$PID_文件”;
rm-f$PID_文件;
回显“应用程序已停止”
fi
}
案件“$1”
开始)
启动应用程序
;;
(停止)
停止应用程序
;;
重新启动)
停止应用程序
启动应用程序
;;
(状态)
如果[-f$PID\U文件]
然后
PID=`cat$PID\u文件`
如果[-z”`ps-ef | grep$PID | grep-v grep`']
然后
echo“节点应用程序已停止,但pid文件存在”
其他的
echo“使用pid$pid运行的节点应用程序”
fi
其他的
回显“节点应用程序已停止”
fi
;;
*)
echo“用法:/etc/init.d/node-app{start | stop | restart | status}”
;;
以撒
是否可能是您忘记为节点应用程序创建初始化脚本而忘记启动它?我有一个初始化脚本。也许有什么不对劲。我会把它添加到我的问题中。我想到的问题。1.您的节点应用程序在流程表中实际可见吗?2.如何确保它在端口4567上运行?3.如果端口4567已经在使用,会发生什么情况?这个问题似乎属于堆栈交换网络中的另一个站点,因为它与编程无关。也许吧。我不知道那里发生了什么,但几个小时后,网站又恢复了。很奇怪。