调试 Gunicorn + Nginx + Django

调试 Gunicorn + Nginx + Django

我正在尝试部署阅读文档我自己服务器上的实例。推荐的部署方式是使用 Gunicorn + nginx 和 postgres。因为基本上没有关于如何执行此操作的文档(除了他们的 fabfile,当然,它只适用于他们的服务器),我一直在尝试手动设置自己的服务器。

这是我的nginx.conf

server {
    listen 80 default;
    server_name mysite.com;
    access_log /var/log/nginx/mysite.access.log;
    error_log /var/log/nginx/mysite.error.log;

    location /favicon.ico {
        root /home/mysite/Code/checkout/readthedocs.org/media/images;
        break;
    }

    location robots.txt {
        root /home/mysite/Code/checkout/readthedocs.org/media;
        break;
    }

    location /static/ {
        alias /home/mysite/Code/checkout/readthedocs.org/media/;
        expires 30d;
        break;
    }

    location /media/ {
        alias /home/mysite/Code/checkout/readthedocs.org/media/;
        expires 30d;
        break;
    }

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://127.0.0.1:8888;
    }
}

settings.py可以找到 django 的配置这里。我唯一改变的settings.py就是添加,gunicorn这样INSTALLED_APPS我就可以用它运行 gunicorn。

我用来运行 gunicorn 服务器的命令是:

./manage.py run_gunicorn -b 127.0.0.1:8888

然后,如果我尝试从本地浏览器访问127.0.0.1,它会工作,但总是显示 404 页面,无论我输入什么 URL。运行./manage.py runserver将正确运行所有内容。

现在我不是系统管理员,之前对 django、gunicorn 或 nginx 基本没有经验。我已经在 Google 上搜索并尝试了几个星期的配置,但一无所获。我的问题是:

  1. 我如何知道 gunicorn 调用了哪个 django 路由?我可以调试它吗?我能找到的所有日志文件都没有显示这一点。
  2. 您觉得我的配置文件有什么问题吗?如果是,您能告诉我哪里出了问题吗?

非常感谢。

答案1

您是否尝试过在端口 8888 加载该网站以确保它正常运行?

你收到的 404 消息是否包含nginx在文本中?这表明 nginx 在查找资源时遇到了问题,而不是端口 8888 上的服务。在这种情况下,您可以对配置文件进行故障排除。

您正在记录 nginx 中的访问,因此您可以查看日志以获取更多信息。tail -n 10 /var/log/nginx/mysite.access.log将让您看到该日志的最后 10 行。

默认情况下,nginx 使用合并日志格式:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

这应该可以帮助您弄清楚日志文件中每一列的含义。

相关内容