Nginx 显示 404 并且日志是干净的
Nginx shows 404 and the logs are clean
我正在尝试使用 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 日志为空,supervisor 日志没有显示任何错误。 nginx的访问日志和错误日志也是如此! Nginx 正在 运行 作为 root。尚未创建 DNS 记录。正在使用其 IP 访问该站点。
首先看来你没有删除初次安装时创建的nginx默认站点。您对使用弹性 IP 的服务器的请求似乎由该默认站点处理。这表明您的访问日志文件为空。解决方法:删除其他站点的记录,只留下sites_enabled.
中的这个配置文件
其他问题:
你是 运行 nginx root。这是不可取的。请更改为非特权用户。
您的静态内容在 /home/ubuntu/django_project/static_root/;
中,nginx 将无法访问此文件夹,因为主文件夹通常可供所有者访问。您可能需要更改 /home/ubuntu/ 文件夹权限。但是,最好还是将文件移动到其他位置。
我正在尝试使用 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 日志为空,supervisor 日志没有显示任何错误。 nginx的访问日志和错误日志也是如此! Nginx 正在 运行 作为 root。尚未创建 DNS 记录。正在使用其 IP 访问该站点。
首先看来你没有删除初次安装时创建的nginx默认站点。您对使用弹性 IP 的服务器的请求似乎由该默认站点处理。这表明您的访问日志文件为空。解决方法:删除其他站点的记录,只留下sites_enabled.
中的这个配置文件其他问题: 你是 运行 nginx root。这是不可取的。请更改为非特权用户。
您的静态内容在 /home/ubuntu/django_project/static_root/;
中,nginx 将无法访问此文件夹,因为主文件夹通常可供所有者访问。您可能需要更改 /home/ubuntu/ 文件夹权限。但是,最好还是将文件移动到其他位置。