Django部署生產環境,靜態文件不能訪問404,以及圖片不能訪問403
阿新 • • 發佈:2018-05-24
以及 數據 col debug client localhost char clear IE
部署環境的搭建請看此博客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