tata色々な備忘録

データ解析、画像解析、化学分析などなど

python(Django)とapacheの連携(mod_wsgi)

DjangoとApacheで苦戦したのでメモ

Apacheはここで落とす
http://www.apachelounge.com/download/
wsgiと合わせる必要あり。32bit版推奨。展開して任意のフォルダへ。
WindowsならCドライブ直下に置くとhttp.confの編集量が減る。

mod_wsgiはココから落としてApacheのpluginフォルダへ。
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

Apacheのエラーメッセージ対策でhttpd.confに下記を追加

ServerName localhost:80

mod_wsgiを使用するためApachehttpd.confに下記を追加 (パスは適宜変更のこと)

LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonPath C:/HPLC_database/myproject/myproject
WSGIScriptAlias / C:/HPLC_database/myproject/myproject/wsgi.py
<Directory "C:/HPLC_database/myproject/myproject/">
Order deny,allow
Allow from all
</Directory>

そのままだと403が出るため、 httpd.confの下行をコメントアウトする。
(苦戦した一番の原因がココ)

#<Directory />
#    AllowOverride none
#    Require all Deny
#</Directory>

Apachehttpd.exeはコマンドラインで動かすと挙動がわかりやすい。

httpd.exe -k install #インストール
httpd.exe -k uninstall #アンインストール
httpd.exe -k start #開始
httpd.exe -k stop #終了

wsgi.pyはWSGIScriptAliasに記載した位置に作成

#wsgi.py
# -*-coding: sjis -*-
import os
#Djangoの環境設定ファイル(settings.py)を指定
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

こんなところか。4時間位使ってしまった。

  • 403Forbiddenはhttpd.confの設定が原因

  • サーバーエラー出る場合はApacheのエラーログを見ると原因が分かる