什么是正确的 nginx 位置规则以仅将 URI 中的第一个路径元素与 CGI 可执行文件匹配?

Posted

技术标签:

【中文标题】什么是正确的 nginx 位置规则以仅将 URI 中的第一个路径元素与 CGI 可执行文件匹配?【英文标题】:What is correct nginx location rules to match only the first path element in the URI to the CGI executable? 【发布时间】:2011-04-23 02:03:46 【问题描述】:

我正在使用为带有 nginx 的 apache cgi-bin 设计的 FreePascal Web 模块。

CGI 本身名为 spidersample.cgi,包含 hello, bye 等模块。

使用 Apache,当调用 spidersample.cgi/hello 时,spidersample.cgi 会被执行,并将控制权传递给它包含的 hello 子例程。

使用 nginx 而不是执行 spidersample.cgi 它将 spidersample.cgi/hello 视为 spidersample 中的 hello 文件.cgi 目录,并返回 404 错误,因为没有该目录。

我怀疑这是配置文件中的一些重写规则很容易解决的问题,并将其发布在下面。

==============================================

服务器 听8118; server_name 本地主机; access_log /var/log/nginx/sysman_access.log; 索引 index.html; 根 /home/rchurch/Data/Lazarus/CgiApps;

    location ~ \.cgi$ 
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/tmp/sysman_cgi.sock;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_n$
            fastcgi_param  QUERY_STRING     $query_string;
            fastcgi_param  REQUEST_METHOD   $request_method;
            fastcgi_param  CONTENT_TYPE     $content_type;
            fastcgi_param  CONTENT_LENGTH   $content_length;
    

================================================ ====================

【问题讨论】:

【参考方案1】:

location ~ .cgi$ 将匹配 spidersample.cgi //$ 表示行尾

spidersample.cgi/hello 匹配位置 ~ (.+)cgi/hello 或 (.+)cgi(.*)

【讨论】:

以上是关于什么是正确的 nginx 位置规则以仅将 URI 中的第一个路径元素与 CGI 可执行文件匹配?的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 位置匹配

Nginx 每个位置/将重写的 uri 传递给 proxy_pass

nginx配置

Nginx Location匹配规则

Nginx基本配置

SQL查询和计算;正确格式化查询以仅选择 id