我正在尝试使用nginx + gunicorn + mysql部署Django项目。所有的配置都完成了,但是现在我的nginx在任何静态内容上都抛出了404。
setting.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
Nginx conf文件
upstream app_server {
server unix:/var/www/production/JDApps/jd/jd_gunicorn.sock fail_timeout=0;
}
server {
listen 8000;
server_name 10.1.1.2;
keepalive_timeout 5;
client_max_body_size 4G;
access_log /var/log/nginx/jd-inventory-access.log;
error_log /var/log/nginx/jd-inventory-error.log;
location /static/ {
alias /var/www/production/JDApps/jd/staticfiles;
}
location /media/ {
alias /opt/;
}
location / {
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
Gunicorn启动脚本
#!/bin/bash
NAME="jd_inventory"
DJANGODIR=/var/www/production/JDApps/jd
USER=nginx
GROUP=nginx
WORKERS=3
BIND=unix:/var/www/production/JDApps/jd/jd_gunicorn.sock
DJANGO_SETTINGS_MODULE=jd.settings
DJANGO_WSGI_MODULE=jd.wsgi
LOGLEVEL=error
LOGFILE=/tmp/jd.log
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source ../venv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Start your Django Unicorn
exec ../venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $WORKERS \
--user=$USER \
--group=$GROUP \
--bind=$BIND \
--log-level=$LOGLEVEL \
--log-file=$LOGFILE
文件结构
[root@vm-1 JDApps]# pwd
/var/www/production/JDApps
[root@vm-1 JDApps]# ll
total 4
drwxr-xr-x. 7 nginx nginx 148 Aug 23 19:21 jd
-rw-r--r--. 1 nginx nginx 455 Aug 22 19:19 requirements.txt
drwxr-xr-x. 6 nginx nginx 69 Aug 22 19:19 venv
[root@vm-1 JDApps]# ll *
-rw-r--r--. 1 nginx nginx 455 Aug 22 19:19 requirements.txt
jd:
total 4
-rw-r--r--. 1 nginx nginx 0 Aug 22 22:30 filename_new.log
drwxr-xr-x. 4 nginx nginx 217 Aug 21 18:06 inventory
drwxr-xr-x. 3 nginx nginx 93 Aug 23 20:55 jd
srwxrwxrwx. 1 nginx nginx 0 Aug 23 19:21 jd_gunicorn.sock
-rw-rw-r--. 1 nginx nginx 622 Aug 21 18:06 manage.py
drwxrwxr-x. 4 nginx nginx 64 Aug 21 18:06 static
drwxr-xr-x. 6 nginx nginx 99 Aug 22 21:36 staticfiles
drwxrwxr-x. 3 nginx nginx 277 Aug 21 18:06 templates
venv:
total 4
drwxr-xr-x. 3 nginx nginx 4096 Aug 22 21:45 bin
drwxr-xr-x. 2 nginx nginx 24 Aug 22 19:17 include
drwxr-xr-x. 3 nginx nginx 23 Aug 22 19:17 lib
lrwxrwxrwx. 1 nginx nginx 3 Aug 22 19:17 lib64 -> lib
drwxr-xr-x. 3 nginx nginx 17 Aug 22 19:19 share
[root@vm-1 JDApps]#
通过上述配置,nginx会在任何静态文件上抛出404:
10.1.1.1 - - [23/Aug/2019:19:22:09 -0400] "GET /static/admin/css/base.css HTTP/1.1" 404 555 "http://10.1.1.2:8000/admin/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
10.1.1.1 - - [23/Aug/2019:21:05:01 -0400] "GET /static/js/inventory.js HTTP/1.1" 404 555 "http://10.1.1.2/inventory/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
我不明白为什么会这样。我在“ static”文件夹和“ staticfiles”文件夹中都有静态文件。但是nginx无法获得任何这些文件。
更新:
我通过将nginx conf文件更改为:
root /var/www/production/JDApps/jd;
然后将Django staic文件从staticfiles复制到static文件夹。
因此,我猜想带有位置块的别名无法按预期工作。 任何人都有猜想
解决方案 检查评论。