NGINX recently added support for XSL transformations, and it is AWESOME! In fact, its one of the coolest pieces of software I’ve used in a long time.

Its very simple. The extra cool part of the module is how the templates can be chained together, and it almost seems like a stream editor in a way. Its also very fast!

The example from the NGINX modules website:

 location / {
     xml_entities       /site/dtd/entities.dtd;
     xslt_stylesheet    /site/xslt/one.xslt   param=value;
     xslt_stylesheet    /site/xslt/two.xslt;

This is so cool because you can dynamically combine and mesh all sorts of xml documents together. The xml documents can come from a variety of sources - local static XML files or remote dynamic files generated from a database.

This is really, really great!

UPDATE: What’s even more amazing about this module is that it works with FastCGI output, like this:

        location = /cgi-bin/barf.cgi {
            xslt_types text/html;
            add_header     Cache-Control:  no-store;
            fastcgi_pass   unix:/tmp/fcgi.sock;
            fastcgi_param  DOCUMENT_ROOT     $document_root;
            fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
            fastcgi_param  SCRIPT_NAME       $fastcgi_script_name;
            fastcgi_param  QUERY_STRING      $query_string;
            fastcgi_param  REQUEST_METHOD    $request_method;
            fastcgi_param  CONTENT_TYPE      $content_type;
            fastcgi_param  CONTENT_LENGTH    $content_length;
            fastcgi_param  TARGET_FILENAME   $arg_TARGET_FILENAME;
            xslt_stylesheet /var/www/public/a/webop/templates/xsl/status_services.xsl mynid="$arg_nid";

This means I can use a scripting language like PHP, Perl, Python, Ruby, Tcl, Lua or really anything to generate XML, and then it will be transformed via the NGINX xslt module. Sooooo cooool!!!

Whoa! It also works with proxy_pass!!!!!