Django + FastCGI + Nginx on RHEL4

install nginx:

wget http://altruistic.lbl.gov/mirrors/centos/4.4/os/i386/CentOS/RPMS/pcre-4.5-3.2.RHEL4.i386.rpm
wget http://altruistic.lbl.gov/mirrors/centos/4.4/os/i386/CentOS/RPMS/pcre-devel-4.5-3.2.RHEL4.i386.rpm
sudo rpm -Uvh pcre-4.5-3.2.RHEL4.i386.rpm pcre-devel-4.5-3.2.RHEL4.i386.rpm
wget http://sysoev.ru/nginx/nginx-0.5.17.tar.gz
tar xvzf nginx-0.5.17.tar.gz
cd nginx-0.5.17

./configure --sbin-path=/usr/local/bin/nginx  --pid-path=/usr/local/nginx/nginx.pid  \
--conf-path=/usr/local/nginx/nginx.conf  --with-http_ssl_module --with-cc-opt="-I /usr/include/pcre"
make
sudo make install

nginx configuration ({project_location}/conf/nginx.conf):

# search and replace this: {project_location}
pid {project_location}/log/nginx.pid;
worker_processes  2;
error_log {project_location}/log/error_log;
events {
    worker_connections  1024;
    use epoll;
}
http {
    # default nginx location
    include        /usr/local/nginx/mime.types;
    default_type    application/octet-stream;
    log_format main
        '$remote_addr - $remote_user [$time_local] '
            '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
    connection_pool_size        256;
    client_header_buffer_size    1k;
    large_client_header_buffers    4 2k;
    request_pool_size        4k;
    output_buffers   4 32k;
    postpone_output  1460;
    sendfile        on;
    tcp_nopush             on;
    keepalive_timeout      75 20;
    tcp_nodelay            on;
    client_max_body_size       10m;
    client_body_buffer_size    256k;
    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    client_body_temp_path      {project_location}/log/client_body_temp;
    proxy_temp_path            {project_location}/log/proxy_temp;
    fastcgi_temp_path            {project_location}/log/fastcgi_temp;
    gzip on;
    gzip_min_length  1100;
    gzip_buffers     4 32k;
    gzip_types       text/plain text/html application/x-javascript text/xml text/css;
    ignore_invalid_headers    on;
    server {
        listen 8000;
        server_name localhost;
        index index.html;
        root   {project_location}/public;
        # static resources
        location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$
        {
                expires 30d;
                break;
        }
        location / {
            # host and port to fastcgi server
            fastcgi_pass unix:{project_location}/log/django.sock;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
        }
        location /403.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location /401.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location /404.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location = /_.gif {
                    empty_gif;
                access_log   off;
        }
            access_log    {project_location}/log/localhost.access_log main;
            error_log    {project_location}/log/localhost.error_log;
        }
}

django fastcgi:

start:

cd {project_location}
python ./manage.py runfcgi --settings={project}.settings_production maxchildren=10 \
maxspare=5 minspare=2 method=prefork socket={project_location}/log/django.sock pidfile={project_location}/log/django.pid 

stop:

kill -9 `cat {project_location}/log/django.pid` 

nginx frontend:

start:

nginx -c {project_location}/conf/nginx.conf 

stop:

kill -WINCH `cat {project_location}/log/nginx.pid` && kill -9 `cat {project_location}/log/nginx.pid`

django fastcgi + nginx benchmark:

http://www.alrond.com/en/2007/jan/25/performance-test-of-6-leading-frameworks/

NginxDjangoFastCGI (last edited 2007-12-30 19:01:50 by Emiller)