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 的生产环境部署