Wherever you go, there you are.

Running Max Media Manager With nginx


So I've been mucking around with a variety of webservers due to a number of performance concerns with Apache. I first landed on lighttpd, but it had some ambiguous 404 handling that confused Google. From there I decided to try out nginx, which seems to be a popular webserver among, um... Russian spam and porn sites. That does seem a little sketchy at first, but its hard to imagine a site with higher traffic loads than a Russian porn site. For that matter, its hard to imagine a webmaster with less tolerance for crappy software than the kind of Russian mafia lord that might be running said site. So, really, this all seems to be a good sign for nginx!

While getting Drupal to run in a FastCGI environment is well documented, I also need to be able to run my Openads server (AKA Max Media Manager), a setup which proved to be a little trickier. Ultimately, it boiled down to figuring out and providing all of the necessary headers that MMM uses to setup its web environment. It makes a number of unusual decisions based on obscure things like, for example, the SERVER_PORT being set -- if it's not, you won't get a default http:// protocol. So here's my sample nginx server config which, at the moment, seems to work great with MMM running as a standalone FastCGI process.

server {
    listen       80;
    server_name  ads.example.com;
    access_log   logs/adserver-access.log  combined;
    location / {
        root  /root/to/adserver/www;
        index index.php;

    location ~ .php$ {
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /root/to/adserver/www$fastcgi_script_name;
        fastcgi_param  DOCUMENT_ROOT    /root/to/adserver/www;
        fastcgi_param  PHP_SELF         $fastcgi_script_name;
        fastcgi_param  REQUEST_URI      $request_uri;
        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  SERVER_NAME      ads.example.com;
        fastcgi_param  HTTP_HOST        ads.example.com;
        fastcgi_param  SERVER_PORT      80;
        fastcgi_param  REMOTE_ADDR      $remote_addr;