nginx 一人 nginx 勉強会 第一回 nginx で Django を動かしてみる

目標

nginx(えんじんえっくすと発音する) を使ってみます。
理由は単に cherokee のバージョンアップが遅い、微妙に安定してないから。
Apache は皆様がやっているから気にしない。

django-svn を nginx で動かすのを目標とします。

参考資料

Django on nginx
http://www.rkblog.rk.edu.pl/w/p/django-nginx/

環境

環境2

  • Ubuntu 7.10 Server
  • nginx 0.6.15 (src)
  • python 2.5.1 (apt-get)
  • setuptools 0.6c7 (apt-get 後 easy_install -U setuptools)
  • mysql 5.0.45 (src)
  • mysql-python 1.2.2 (src)
  • flup 1.0 (easy_install)
  • django r6596 (svn)

これでも動作確認。

設定

自分用
/etc/nginx/html/site_media

管理サイト用
/etc/nginx/html/media

少しマニアックな設定も入っていますが、これだけ書けば十分だと思います。

/etc/nginx/conf/nginx.conf

user nginx nginx;

worker_processes 2;

error_log logs/error.log debug;

events {
  worker_connections 1024;
}

http {
  include conf/mime.types;
  default_type application/octet-stream;

  charset utf-8;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 75 20;

  server {
    listen 80;
    server_name localhost;

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) {
      access_log off;
      expires 30d;
    }

    location /site_media/ {
      alias html/site_media;
    }

    location /media/ {
      alias html/media;
    }

    location / {
      fastcgi_pass 127.0.0.1:8080;
      fastcgi_param PATH_INFO $fastcgi_script_name;
      fastcgi_pass_header Authorization;
      fastcgi_intercept_errors off;
      include conf/fastcgi_params;
    }

    log_format main '$remote_addr - $remote_user [$time_local] $status '
                    '"$request" $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/localhsot.accense.log main;
    error_log logs/localhost.error.log;     
  }
}

nginx を起動する。

sudo /etc/rc.d/nginx start

fcgi で動かす。

$ python manage.py runfcgi host=127.0.0.1 port=8080 --settings=settings

動きました。

感想

  • sqlite だとどうも上手く行かなかった。
  • 本番で sqlite はあまりいないと思うのでいいと思う。
  • あっさり動くのが素敵
  • 本番に投入してもいいと思う
  • apache + mod_wsgi よりは面倒かな
  • チューニングの楽しさに目覚めるかもしれない
  • media サーバと分離しなくてもいいかな
  • これで trac が動いたら nginx を本番に投入したいと思います。

追記 [2008/8/11]

0.7 系でやったらメディアファイルが旨いこと提供できなかった。
下記で動作(もともとこう書くような記憶有り)

    location /media {
      root html/media;
    }