Flask – FastCGI


FastCGI is another deployment option for Flask application on web servers like nginix, lighttpd, and Cherokee.

Configuring FastCGI

First, you need to create the FastCGI server file. Let us call it yourapplication.fcgi.

from flup.server.fcgi import WSGIServer
from yourapplication import app

if __name__ == '__main__':

nginx and older versions of lighttpd need a socket to be explicitly passed to communicate with the FastCGI server. For that to work, you need to pass the path to the socket to the WSGIServer.

WSGIServer(application, bindAddress = '/path/to/fcgi.sock').run()

Configuring Apache

For a basic Apache deployment, your .fcgi file will appear in your application URL e.g. example.com/yourapplication.fcgi/hello/. There are few ways to configure your application so that yourapplication.fcgi does not appear in the URL.

<VirtualHost *>
   ServerName example.com
   ScriptAlias / /path/to/yourapplication.fcgi/

Configuring lighttpd

Basic configuration of lighttpd looks like this −

fastcgi.server = ("/yourapplication.fcgi" => ((
   "socket" => "/tmp/yourapplication-fcgi.sock",
   "bin-path" => "/var/www/yourapplication/yourapplication.fcgi",
   "check-local" => "disable",
   "max-procs" => 1

alias.url = (
   "/static/" => "/path/to/your/static"

url.rewrite-once = (
   "^(/static($|/.*))$" => "$1",
   "^(/.*)$" => "/yourapplication.fcgi$1"

Remember to enable the FastCGI, alias and rewrite modules. This configuration binds the application to /yourapplication.

Useful Video Courses


Flask Framework Online Training

22 Lectures 6 hours

Malhar Lathkar


Python Flask and SQLAlchemy ORM

21 Lectures 1.5 hours

Jack Chan


Python for web development using Flask

16 Lectures 4 hours

Malhar Lathkar


From Zero to Flask: The Professional Way

88 Lectures 3.5 hours

Jorge Escobar