日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2025年1月
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Search Results

Django2 CGI handler + apache2.4 : メモ

執筆:2018.06.13
編集:2018.06.13


概要
python3.6 + django 2.0.6
  1. .htaccess に cgi用のエントリを追記する
  2. start-django.cgi を設置する(名称はなんでもいい)
    wsgi_emulate.py または wsgi_over_cgi.pyをimportする
  3. wsgi_emulate.py または wsgi_over_cgi.py を settings.py と同じフォルダに設置する
以上をすませて、アクセスすると CGIモードで動作する

基本的に wsgi_over_cgi.py 内の
from wsgiref.handlers import CGIHandler
from . import wsgi
app = wsgi.get_wsgi_application()
CGIHandler().run(app)
だけで動かないといけないのですが、django内の処理が間違っているために、環境変数名の変更 及び
PATH_INFO、FORCE_SCRIPT_NAMEの変更設定がwsgi_emulate.py または wsgi_over_cgi.py および setting.py内に追加されています。


IfModuleで条件指定しているため
wsgiモジュールが有効になった場合は自動的にwsgiで動作する

必要な設定
.htaccess

# 追加分
<IfModule !mod_wsgi.c>
<FilesMatch "\.(?i:pyc?)$">
order deny,allow
deny from all
# RewriteRule "" - [L,R=404]
</FilesMatch>

# wsgi_emulate.py 内で この値をもとに正しいURLを生成できるように成形される
setenv BASE_URI    /    # / or /pathtositetop
setenv SCRIPT_URL /    # / or /pathtositetop/

RewriteRule "^$" start-django.cgi [L,T=application/x-httpd-cgi]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule "." start-django.cgi [L,T=application/x-httpd-cgi]
</IfModule>

apacheが古くて、環境変数が渡らない場合は
start-django.cgi に以下を追加する
os.environ.setdefault("BASE_URI", "/") # / or /pathtositetop
os.environ.setdefault("SCRIPT_URL", "/") # / or /pathtositetop/
こちらに書き込んでいたほうが確実だろう

表示されない場合
  • start-django.cgi ファイルの実行権限がついているか確認する
  • djangoへのパスが通っているか?
    • インストールする場合
      pip3 install Django
    • 指定フォルダから読み込む場合
      スクリプト内で
      sys.path.append("パス")
  • pytzの確認
    pip3 install pytz
  • No module named '_sqlite3'
    sudo pkg install databases/py35-sqlite3
# https://www.djangoproject.com/download/
# https://pypi.python.org/pypi/pytz#downloads
2018.06.13

さくらインターネット ライトプラン で django2.0 + python3.6

執筆:2018.06.15
編集:2018.06.15


設定の仕方
導入方法は関連ページへ

サイト内 関連ページ
  1. さくらインターネット ライトプランに python3をインストール
  2. Django2 CGI handler + apache2.4

応答速度
応答速度
django2.0
+ python3.6
(デフォルトページ)
PHP製のCMS
(運用しているサイト)
ライトプラン

0.48 - 1.41秒

0.50 - 1.46秒
https://
min : 0.48
max : 1.41
avg : 0.85 n[20]
https://
min : 0.50
max : 1.46
avg : 0.85 n[20]
備考 体感で遅く感じる 気にならない

ブラウザだとdjangoは少し遅く感じますが、機械的な取得だとほぼ同じという結果になりました。
djangoのデフォルトページに描画処理があるせいでブラウザだと遅いのかもしれないですね

pythonのほうは、この速度にさらに表示用のなんらかの処理を加えることになるので
phpのほうがcgi応答速度は速いということになります。

djangoは脆弱性がわりとあるようなので、ライトプランというcronが動作しない自動更新できない環境ではちょっと勇気がいる
djangoの導入は見送りになりそう。

キーワード
Django2 CGI handler
Django2 CGI handler さくらインターネット 共有サーバー
Django2 python3 さくらインターネット 共有サーバー
django 脆弱性
2018.06.15

PR

[PR]