Search code examples
cgifastcgi

How do I interpret URLs without extension as files rather than missing directories in nginx?


So I'm trying to install ZoneMinder and have it run under Nginx, but it has a few compiled files that need to be run using Fast-CGI. These files lack an extension.

If the file has an extension, then there is no issue and Nginx interprets it as a file and will just return a 404 if it can't find it. If it has no extension, it will assume it's a directory and then eventually return a 404 when it can't find any sort of index page.

Here is what I have now:

# Security camera domain.
server {

    listen 888;
    server_name mydomain.com;
    root /srv/http/zm;

    # Enable PHP support.
    include php.conf;

    location / {
        index index.html index.htm index.php;
    }

    # Enable CGI support.
    location ~ ^/cgi-bin/(.+)$ {

        alias          /srv/cgi-bin/zm/;
        fastcgi_pass   unix:/run/fcgiwrap.sock;
        fastcgi_param  SCRIPT_FILENAME $document_root/$1;
        include        fastcgi.conf;
    }
}

The idea is, anything under the cgi-bin directory goes through the fastcgi pipe.

Any idea on howI can fix this?


Solution

  • Upon closer inspection, I realized ZoneMinder only has two cgi scripts (nph-zms, zms), so it was easier just to explicitly state them in nginx as so:

    # Enable CGI support.
    location ~ ^/cgi-bin/(nph-zms|zms)$ {
    
        alias          /srv/cgi-bin/zm/;
        fastcgi_pass   unix:/run/fcgiwrap.sock;
        fastcgi_param  SCRIPT_FILENAME $document_root/$1;
        include        fastcgi.conf;
    }
    

    Seems to be the best way to go :)