【问题标题】:Nginx shows 404 and the logs are cleanNginx 显示 404 并且日志是干净的
【发布时间】:2016-12-09 03:28:26
【问题描述】:

我正在尝试使用 Gunicorn 和 nginx 将 django 应用程序部署到 AWS EC2 实例。我跟着 this 教程,因为上次它对我有用,但现在不行了。

我总是得到 404 响应,即使在静态文件上也是如此。

主管脚本:

[program:django]
command = /home/ubuntu/bin/gunicorn_start
user = ubuntu
stdout_logfile = /home/ubuntu/logs/gunicorn_supervisor.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

gunicorn_start:

#!/bin/bash

NAME="django"
DJANGODIR=/home/ubuntu/django_project
SOCKFILE=/home/ubuntu/run/gunicorn.sock
USER=ubuntu
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=django_project.settings
DJANGO_WSGI_MODULE=django_project.wsgi

echo "Starting $NAME as `whoami`"

cd $DJANGODIR
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-

Nginx 配置:

upstream django_server {
    server unix:/home/ubuntu/run/gunicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name _;

    client_max_body_size 4G;

    access_log /home/ubuntu/logs/nginx-access.log;
    error_log /home/ubuntu/logs/nginx-error.log;

    location /static/ {
        alias /home/ubuntu/django_project/static_root/;
    }
    location /media/ {
        alias /home/ubuntu/django_project/media/;
    }
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxt_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://applify_server;
    }

    error_page 500 502 503 v504 /500.html;
    location = /500.html {
        root /home/ubuntu/django_project/static_root/;
    }
}

nginx 日志为空,主管日志不显示任何错误。同样适用于 nginx 访问日志和错误日志! Nginx 正在以 root 身份运行。尚未创建 DNS 记录。正在使用它的 IP 访问该站点。

【问题讨论】:

  • nginx 以 root 用户身份运行。访问日志由于某种原因是空的……也许这就是问题所在……
  • 好吧,如果访问日志为空,nginx 从未见过这个请求。而且你不应该以 root 身份运行它
  • 那么我需要解决什么问题?
  • 我还没有注册域名,我正在使用弹性IP地址访问它

标签: django amazon-web-services nginx gunicorn django-deployment


【解决方案1】:

首先显示你没有删除第一次安装时创建的nginx默认站点。您使用弹性 IP 对服务器的请求似乎由该默认站点处理。这表明您的访问日志文件为空。解决方法:删除其他站点的记录,在sites_enabled中只保留这个配置文件。

其他问题: 您正在以 root 身份运行 nginx。这是不可取的。请更改为非授权用户。

您的静态内容位于/home/ubuntu/django_project/static_root/; 中,nginx 无法访问此文件夹,因为所有者通常可以访问主文件夹。您可能需要更改 /home/ubuntu/ 文件夹权限。不过最好还是将文件移动到其他位置。

【讨论】:

  • 删除启用站点的默认配置文件?
  • 或将其替换为您的配置。无论哪种方式都有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2022-01-16
  • 2015-01-28
  • 1970-01-01
  • 2010-11-24
  • 2015-07-03
相关资源
最近更新 更多