【问题标题】:Django+Gunicorn+nginx Internal Server Error, where is the error and how to fix it?Django+Gunicorn+nginx内部服务器错误,错误在哪里以及如何解决?
【发布时间】:2014-05-23 06:45:14
【问题描述】:

所以我正在运行非常标准的设置,我遵循了与之前相同的教程,但现在由于未知原因它不起作用。

当我运行./manage.py runserver my_ip:8000 时,它运行良好。 当我通过bin/gunicorn_start 运行我的 gunicorn 脚本时,它工作正常并创建了 sock 文件 但是,当我通过主管和 nginx 运行 gunicorn 脚本时,结果为Internal Server Error,并且错误日志中没有信息。我究竟做错了什么?我猜是gunicorn还是权限问题?

bin/gunicorn_start

#!/bin/bash
 
NAME="today" # Name of the application
DJANGODIR=~/deployment/today_project/
SOCKFILE=~/deployment/run/gunicorn.sock # we will communicte using this unix socket
USER=ferski # the user to run as
GROUP=ferski # the group to run as
NUM_WORKERS=3 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=today_project.settings # which settings file should Django use
DJANGO_WSGI_MODULE=today_project.wsgi # WSGI module name
 
echo "Starting $NAME as `whoami`"
 
# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
 
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
 
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--bind=unix:$SOCKFILE

/etc/supervisord.conf(只是未注释的文件)

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
...
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
...
[program:today]
command = /home/ferski/deployment/bin/gunicorn_start
user = ferski
stdout_logfile = /home/ferski/deployment/logs/gunicorn_supervisor.log
redirect_stderr = true
...

最后是 nginx.conf

upstream today_app_server {
        server unix:/home/ferski/deployment/run/gunicorn.sock fail_timeout=0;
}

server {
        listen 80;
        server_name haxelita.pl;

        client_max_body_size 4G;
        access_log /home/ferski/deployment/logs/nginx-access.log;
        error_log /home/ferski/deployment/logs/nginx-error.log;

        location /static/ {
                alias /home/ferski/deployment/today_project/today/static/;
        }

        location / {

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;

                if (!-f $request_filename) {
                        proxy_pass http://today_app_server;
                        break;
                }
        }

         # Error pages
        error_page 500 502 503 504 /500.html;
        location = /500.html {
                root /home/ferski/deployment/today_project/today/static/;
        }
}

这里有什么问题?是权限问题吗?

【问题讨论】:

    标签: python django nginx gunicorn


    【解决方案1】:

    这个问题把我搞糊涂了。但我想通了,我想我会发布它以供将来参考,因为这是谷歌搜索此错误的热门搜索。

        uwsgi --socket /path/to/sock --chdir /path/to/django/project/ --module project_name.wsgi --chmod-socket=664
    

    然后您可以添加内核和处理器的数量,但要附加这个(将 4 更改为应用程序中的内核数量)。

        --master --processes 4 --async 4 --ugreen 
    

    【讨论】:

      【解决方案2】:

      您无法在使用 supervisor 启动的脚本中通过 source 激活 virtualenv 环境。在您的 supervisord.conf 中使用 directory=/home/ferski/deployment/today_project/

      Supervising virtualenv django app via supervisor

      【讨论】:

        猜你喜欢
        • 2023-01-09
        • 2011-10-11
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 2015-07-21
        • 2022-10-08
        • 1970-01-01
        • 2014-09-16
        相关资源
        最近更新 更多