Django部署生产环境,静态文件不能访问404,以及图片不能访问403

Posted F

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django部署生产环境,静态文件不能访问404,以及图片不能访问403相关的知识,希望对你有一定的参考价值。

部署环境的搭建请看此博客https://blog.csdn.net/anifans9350/article/details/80145535

 

查看nginx.conf 文件,

nginx文件(etc/nginx/nginx.conf)配置:

修改http里面的server:

server {
         listen       80;
        server_name  localhost;


        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        access_log      /var/log/nginx/myweb_access.log;
         error_log       /var/log/nginx/myweb_error.log;


        client_max_body_size 75M;


        location / {
            include uwsgi_params;
            #这行指定uwsgi开放的数据交换接口
            uwsgi_pass 127.0.0.1:8090;
            #这里与配置uwsgi的ini文件中module内容一致
            uwsgi_param UWSGI_SCRIPT ibook.wsgi;
            #这里与配置uwsgi的ini文件中chdir内容一致
            uwsgi_param UWSGI_CHDIR  /root/ibook;
        }

        location ^~ /static/ {
            root /root/book/;
            #这行指定静态文件的搜索目录, localhost/static/test.css => /home/book/static/test.css
            #注意,这里location行中指定的地址也会在转换后的地址中
        }
    }

注意location的static配置,我的项目放在root目录,所以可能出现权限问题,也就是部署环境后,访问静态图片会出现403,解决就是在nginx.conf文件的开始处,把

user nginx;

改成

user root;

这样就不会出现403的问题,如果还是不能访问,尝试给项目文件加权限

chmod 777 项目文件夹

 

 

uwsgi配置:

在项目根目录新建文件test_proj.ini,内容为

# start_proj.ini file
[uwsgi]

# Django-related settings

# uwsgi的对外socket接口,nginx将通过该接口与uwsgi做数据交换,因为与nginx同在一个服务器内,不需要在防火墙上对端口8090做访问许可

socket = 127.0.0.1:8090

# the base directory (project full path)

# 本项记录Django对象工程的完整路径

chdir = /root/book

# Django s wsgi file

# 本项指示uwsgi.py文件的位置,其位于Django工程目录下有个与工程名同名的子文件夹内 ( 设置方式为   文件夹名.wsgi )

module = book.wsgi

# process-related settings
# master
master  = true

# maximum number of worker processes
processes = 4

# ... with appropriate permissions - may be needed
# chmod-socket= 664
# clear environment on exit
vacuum= true
# pidfile for record run pid 
pidfile=pid.uwsgi
# run process background and save log to daemonize
daemonize = UWSGI.log

 

启动时切换到项目根目录下,启动命令

uwsgi --ini  test_proj.ini

 

之后启动nginx

systemctl start nginx

 

 

 

settings.py 配置:

DEBUG = False

# 添加域名  
ALLOWED_HOSTS = [*]

静态文件配置相关:

# 静态文件 cs/js  
STATIC_URL = /static/  
STATICFILES_DIRS = (  
    os.path.join(BASE_DIR, book,static),    #book为项目名称
)  
STATIC_ROOT = (  
    os.path.join(BASE_DIR, static).replace(\\,/)  
  
)  
  
# 上传图片  
MEDIA_ROOT = os.path.join(BASE_DIR, media).replace(\\, /)  
MEDIA_URL = /media/

STATICFILES_FINDERS = ( "django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder" )

 

以上是关于Django部署生产环境,静态文件不能访问404,以及图片不能访问403的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何在生产中的apache服务器上部署静态文件

Django + Uwsgi + Nginx 的生产环境部署

Django + Uwsgi + Nginx 的生产环境部署

Django + Uwsgi + Nginx 的生产环境部署

Django + Uwsgi + Nginx 的生产环境部署

Django静态文件的加载以及STATIC_ROOT 与STATICFILES_DIRS的区别