3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Django+Nginx】静的ファイルを配信する時のNginx の設定ファイルのlocationの書き方

Last updated at Posted at 2022-05-10

環境

Django4.0
ubuntu 22.04 LTS

この記事では, 以下のプロジェクト構成を前提とします.

myProject
|  --manage.py
|  --db.sqlite3
|
|  --config
|    |--init.py
|    |--settings.py
|    |--...
|    
|  --static
|    |--css
|    |  |--...
|    |--image
|    |  |---...

Djangoの設定ファイル

まずはDjangoの設定ファイル(settings.py)を見ていきます.
以下の3つの設定を書きます.
値は例です.

STATIC_ROOT
python manage.py collectstaticコマンドを打った時の静的ファイルの格納場所となる絶対パス

settings.py
STATIC_ROOT = '/var/www/myProject/static'

STATIC_URL
STATIC_ROOTに格納されている静的ファイルを参照するための値で,静的ファイルのURLに含まれる.
例えば,STATIC_URL='/static/'で,/css/style.cssファイルを配信する時,URLは
http://example.com/static/css/style.css
となる.

settings.py
STATIC_URL = '/static/'

STATICFILES_DIRS
プロジェクト内の静的ファイルのディレクトリ

settings.py
STATICFILES_DIRS = [BASE_DIR / 'static']

Nginxの設定ファイル

次にNginxの設定ファイルを/etc/nginx/sites-available/に作ります.ファイル名をconfig(設定ディレクトリ名)とします.

config
server {

        略

        location /static/ {
               root /var/www/myProject;
        }

        略

}

locationの横の/static/はSTATIC_URLと同じ値にします.
rootの右のパスはSTATIC_ROOTの/staticを抜いた値と同じにします.

locationの/static/はURLと比較される部分です.
例えば, リクエストのURLがhttp://example.com/static/image/one.pngだった場合, URLの/static/の部分がlocationの/static/と合致するのでこのブロックが実行されます. そして, rootの右のパス(/var/www/myProject)の後ろに/static/image/one.pngが追加されます.
つまり, /var/www/myProject/static/image/one.pngとなり目的の静的ファイルが配信されます.

参考資料

現場で使えるDjangoの教科書
Django 公式ドキュメント
NginxのBeginner’s Guide
How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 22.04

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?