如何将没有扩展名的URL解释为文件而不是缺少nginx中的目录?

时间:2014-06-07 19:24:37

标签: cgi fastcgi

所以我正在尝试安装ZoneMinder并让它在Nginx下运行,但它有一些需要使用Fast-CGI运行的编译文件。这些文件没有扩展名。

如果文件有扩展名,那么没有问题,Nginx将其解释为文件,如果找不到,则返回404。如果它没有扩展名,它将假定它是一个目录,然后当它找不到任何类型的索引页时最终返回404。

以下是我现在所拥有的:

# 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;
    }
}

这个想法是,cgi-bin目录下的任何内容都会通过fastcgi管道。

关于我如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

仔细观察后,我意识到ZoneMinder只有两个cgi脚本(nph-zms,zms),因此更容易在nginx中明确说明它们:

# 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;
}

似乎是最好的方式:)