FAQ

Page Discussion Edit History

PythonFlup

Welcome to the home of Nginx on Ubuntu - specifically Jaunty Jackalope 9.04. This example uses the excellent Amazon ec2 ami-bf5eb9d6 from Eric Hammond.

First off, you need to install nginx and python-flup:

apt-get install nginx python-flup

You'll note that nginx first of all doesn't start. For now, just start it. I hope that this changes at some point:

service nginx start

You should now see "Welcome to Nginx!" at http://[IP Address]

In /etc/nginx/ you'll see some config files, don't update them. Create a file in /etc/nginx/sites-available/ . Any files in there will be included by nginx.conf after they are enabled. This is the content of the file I created, /etc/nginx/sites-available/site

    server {
        listen       80;
        server_name  _;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # Get people onto the non-www site
        if ($host = 'www.example.com' ) {
            rewrite  ^/(.*)$  http://example.com/$1  permanent;
        }

        # project media assuming it's called at media/
        # keep in mind that media/ will be maintained as a directory by the root command
        location ^~ /media/ {
            root   /site/where/project/is;
        }

        # admin uses admin-media/
        # alias works different than root above by dropping admin-media
        location ^~ /admin-media/ {
            alias /var/lib/python-support/python2.6/django/contrib/admin/media/;
        }

        location / {
            # host and port to fastcgi server
            fastcgi_pass 127.0.0.1:8080;
            fastcgi_param SERVER_NAME $server_name;
            fastcgi_param SERVER_PORT $server_port;
            fastcgi_param SERVER_PROTOCOL $server_protocol;
            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;
            }

        # todo: setup 404 for the /media directory.
        # / directory will be handled by django url dispatcher
        #error_page  404              /404.html;
        #location = /404.html {
        #    root   /var/www/nginx-default;
        #}

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www/nginx-default;
        }

    }

Now enable the site config:

sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example

And disable default:

rm /etc/nginx/sites-enabled/default

Now you need to restart nginx and go to the site again

service nginx restart

And start the django fastcgi process:

python ./manage.py runfcgi host=127.0.0.1 port=8080

Restarting python Fastcgi is odd right now. Do this for now:

ps -ef | grep python

Then, grab the parent process id:

kill 1234

Then, restart:

python ./manage.py runfcgi host=127.0.0.1 port=8080


See also:

* Django FastCGI init.d script for Linux for information on how to start up your Django FastCGI server(s) on system boot.

References:

* Slicehost Nginx enabling/disabling sites