背景:本人 python 和 nginx 都是小白,由于需要接手一个 django 开发的网站,用 runserver 能将 development 环境跑起来,但用 fastcgi 的模式怎么也没搞明白
目前遇到的问题如下是,在 nginx 下死活都是 502 Bad Gateway,error.log 中报错
[error] 1878#0: *24 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.88.1, server: 192.168.88.10, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/tmp/xxx.sock:", host: "192.168.88.10:8080"
没搞清楚到底要怎么排查这个 Connection reset by peer 的问题
配置是这样的,用这个 xxx.fcgi 文件启动 cgi 模式的 django 程序(tmp下对应pid和sock文件都有创建了)
#!/bin/bash
# config
PROJECT="xxx"
PROJECT_ROOT="/home/vagrant/projects/$PROJECT"
CODE_ROOT="$PROJECT_ROOT/code/xxx"
VIRTUAL_ENV_PATH="/home/vagrant/python-envs/xxx-env"
PID_SCKT_PATH="/tmp"
PID_FILE="$PID_SCKT_PATH/$PROJECT.pid"
SCKT_FILE="$PID_SCKT_PATH/$PROJECT.sock"
# enter virtual env
source $VIRTUAL_ENV_PATH/bin/activate
# kill old pid
cd $PID_SCKT_PATH
if [ -f $PID_FILE ]; then
kill `cat -- $PID_FILE`
rm -f -- $PID_FILE
fi
# daemonize=false
cd $CODE_ROOT
export PYTHON_EGG_CACHE=/tmp/.python-eggs
exec python $CODE_ROOT/manage.py runfcgi \
protocol=scgi method=prefork socket=$SCKT_FILE pidfile=$PID_FILE umask=020 maxrequests=100
而 nginx 的配置如下,期望是能通过 192.168.88.10:8080 能访问
server {
listen 8080;
server_name 192.168.88.10;
access_log /var/log/nginx/xxx-access.log;
error_log /var/log/nginx/xxx-error.log;
location / {
fastcgi_pass unix:/tmp/xxx.sock;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
所以来请教下各大神我是否哪里配置出错了,或者问题点在哪里?
另外,网上搜索的 fastcgi 的配置,有些是将 djagon 在 method=threaded 模式下的端口 pass 出来的,和上面这种 sock 模式的配置具体有什么差异?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.