什么是正确的 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 可执行文件匹配?的主要内容,如果未能解决你的问题,请参考以下文章