---
title: "Django を Apache と mod_wsgi とともに使うには？"
version: 2.0
locale: ja
source: https://docs.djangoproject.com/ja/2.0/howto/deployment/wsgi/modwsgi/
canonical: https://djangodocs.dev/ja/2.0/howto/deployment/wsgi/modwsgi/
---
# Django を Apache と `mod_wsgi` とともに使うには？

[Apache](https://httpd.apache.org/) と [mod\_wsgi](http://www.modwsgi.org/) と共にDjangoをデプロイすることは、Djangoを製品とする際に試され、テストされた方法です。

mod\_wsgi は、Djangoを含む任意のPythonの W​​SGI\_ アプリケーションをホストできるApacheのモジュールです。 Djangoはmod\_wsgiをサポートしているApacheのすべてのバージョンで動作します。

The [official mod\_wsgi documentation](https://modwsgi.readthedocs.io/) is your source for all the details about
how to use mod\_wsgi. You'll probably want to start with the [installation and
configuration documentation](https://modwsgi.readthedocs.io/en/develop/installation.html).

## 基本設定

一度 mod\_wsgi をインストールして有効化すれば、 Apache サーバーの  [httpd.conf](https://wiki.apache.org/httpd/DistrosDefaultLayout) ファイルを編集して以下の記述を追加するだけです。もし利用している Apache のバージョンが 2.4 よりも前の物であれば、 `Require all granted` を `Allow from all` にしてその上に `Order deny,allow` を追記してください。

```apache
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonHome /path/to/venv
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
```

`WSGIScriptAlias​​` の行の最初の部分は、あなたがアプリケーションを提供したいベースとなるURLパスであり( `/` ルートURLを示している)、二番目の部分はシステムの `WSGI file` の場所 (下記参照) です。大抵はプロジェクトパッケージ (本例では `mysite` ) の内部です。これは、そのファイルで定義された WSGI アプリケーションを使用して、指定された URL 以下のすべての要求にサービスを提供するように Apache に指示します。

プロジェクトにおける Python の依存パッケージ関係を [virtualenv](https://virtualenv.pypa.io/) 内にインストールしている場合、 `WSGIPythonHome` を用いてそのパスを追加してください。詳細は [mod\_wsgi の virtualenv ガイド](https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html) を参照ください。

`WSGIPythonPath` の行は、プロジェクトのパッケージは Python のパス上でインポートすることが可能であることを保証します。言い換えると、 `import mysite` が動作することを保証します。

`<Directory>` 部分により、Apache が `wsgi.py` ファイルにアクセスできるようになります。

次に、この `wsgi.py` がWSGIアプリケーションのオブジェクトで存在することを確認する必要があります。 Djangoのバージョン1.4現在、 [`startproject`](/ja/2.0/ref/django-admin/#django-admin-startproject)  を実行した際に作成されます ; それより前のバージョンでは、あなたはそれを作成する必要があります。 [WSGI概要ドキュメント](/ja/2.0/howto/deployment/wsgi/) を参照し、デフォルトのコンテンツや、その他の必要な記載をこのファイルに追加してください。

> **Warning**
>
> 複数の Django のサイトが単一の mod\_wsgi プロセスで実行されている場合は、それらのすべては、最初に実行されたものの設定を使用します。これを解消するには、次の
>
> ```
> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
> ```
>
> という `wsgi.py` 内のコードを、次のように変更します。
>
> ```
> os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"
> ```
>
> もしくは、 [mod\_wsgi のデーモンモード](#daemon-mode) を使用することで、各サイトをそれぞれ独立したデーモンプロセスで実行できるようにします。

> **ファイルアップロード時の UnicodeEncodeError を修正する**
>
> 非 ASCII 文字を含む名前を持つファイルのアップロードする時に `UnicodeEncodeError` が発生する場合は、Apache が非 ASCII 文字を含むファイル名を許容する設定になっていることを確認してください。
>
> ```
> export LANG='en_US.UTF-8'
> export LC_ALL='en_US.UTF-8'
> ```
>
> この設定はふつう `/etc/apache2/envvars` で可能です。
>
> 詳細については、Unicode リファレンスガイドの [Files](/ja/2.0/ref/unicode/#unicode-files) セクションを参照してください。

## `mod_wsgi` をデーモンモードで使用する

`デーモンモード` はmod\_wsgiを (Windows以外のプラットフォーム上で) 実行するための推奨モードです。必要なデーモンプロセスグループを作成し、その中で起動するための Djangoのインスタンスを委任するためには、適切な \`\` WSGIDaemonProcess\`\` と \`\` WSGIProcessGroup\`\` ディレクティブを追加する必要があります。デーモンモードを使用する場合には `WSGIPythonPath` を使用できないため、上記設定にさらなる変更が求められます。代わりに `WSGIDaemonProcess` に `python-path` オプションを使用する必要があります。例えば、

```apache
WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com
WSGIProcessGroup example.com
```

サブディレクトリでプロジェクトを提供したい場合は(本例では `https://example.com/mysite` となります) 、 `WSGIScriptAlias` を設定の上部に追記します。

```apache
WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com
```

詳細については、公式の mod\_wsgi のドキュメント [details on setting up daemon mode](https://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html#delegation-to-daemon-process) を参照してください。

## ファイルを配信する

Django 自体はファイルを配信せず、Web サーバにそのジョブを委ねます。

メディアの配信には、Django を実行しているのとは別の Web サーバメディアを使用することをお勧めします。以下のサーバーは良い選択です。

- [Nginx](https://nginx.org/en/)
- [Apache](https://httpd.apache.org/) の機能縮小版

しかし、Django と同じ Apache の `VirtualHost` からメディアファイルを配信しなければならない場合には、一部の URL を静的メディアを配信するように設定し、その他の URL を Django への mod\_wsgi のインターフェイスとして設定することができます。

この例では、サイトのルートには Django を設定していますが、 `robots.txt` 、 `favicon.ico` 、 `/static/` 、そして `/media/` の URL 空間は静的ファイルとして配信しています。他のすべての URL は mod\_wsgi を使用して配信されます。

```apache
Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/

<Directory /path/to/mysite.com/static>
Require all granted
</Directory>

<Directory /path/to/mysite.com/media>
Require all granted
</Directory>

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
```

2.4 よりも古いバージョンの Apache を使用している場合は、 `Require all granted` を `Allow from all` に置き換え、さらにその行の上に `Order deny,allow` を追加します。

## admin ファイルを配信する

Django の開発サーバは、 [`django.contrib.staticfiles`](/ja/2.0/ref/contrib/staticfiles/#module-django.contrib.staticfiles) が [`INSTALLED_APPS`](/ja/2.0/ref/settings/#std-setting-INSTALLED_APPS) に存在する場合、自動的に admin アプリケーション（およびその他のインストールされているアプリケーション）の静的ファイルを配信します。しかしながら、他のサーバ編成を利用している場合はこの限りではありません。Apache や使用しているメディアサーバを設定し、 admin のファイルを公開できるようにしなければなりません。

admin ファイルは Django ディストリビューションの (`django/contrib/admin/static/admin`) にあります。

[`django.contrib.staticfiles`](/ja/2.0/ref/contrib/staticfiles/#module-django.contrib.staticfiles) を使って admin ファイルを扱うことを **強く** お勧 めします。 (前のセクションで概要を説明したように Web サーバを設定します。つまり [`collectstatic`](/ja/2.0/ref/contrib/staticfiles/#django-admin-collectstatic)  管理コマンドを使って静的ファイルを [`STATIC_ROOT`](/ja/2.0/ref/settings/#std-setting-STATIC_ROOT) に集め、Web サーバが [`STATIC_ROOT`](/ja/2.0/ref/settings/#std-setting-STATIC_ROOT) を [`STATIC_URL`](/ja/2.0/ref/settings/#std-setting-STATIC_URL) の場所で公開するよう設定します) しかし以下では別の方法を 3 つ挙げましょう:

1. ドキュメントルートに admin の静的ファイルへのシンボリックを作ります。 (Apache の設定に `+FollowSymLinks` が必要になるでしょう)
2. 上で示したように Alias ディレクティブを使って、適切な URL (おそらく [`STATIC_URL`](/ja/2.0/ref/settings/#std-setting-STATIC_URL) \+ `admin/`) から admin ファイルがある実際の場所へのエ イリアスを作ります。
3. admin の静的ファイルをコピーし、 Apache のドキュメントルートに置きます。

## Django のユーザーデータベースに対する Apache からの認証

DjangoはApacheがDjangoの認証バックエンドに対して直接ユーザを認証できるようにハンドラを提供します。 [mod\_wsgi 認証ドキュメント](/ja/2.0/howto/deployment/wsgi/apache-auth/) を参照してください。
