在nginx中,如何允许任何字符串作为http方法?

在nginx中,如何允许任何字符串作为http方法?,nginx,Nginx,我使用nginx作为反向代理服务器 它背后的应用服务器接受请求的自定义扩展方法。 例如,“MYMETHOD” 然而,nginx默认配置似乎只接受非扩展方法,如HEAD、GET、POST等,并为没有非扩展方法的请求返回默认nginx 400响应,而不是将这些请求代理到我的应用服务器 我如何让nginx接受并代理任何http请求,而不管它们的方法是什么 我不想将特定方法列入白名单,因为这需要我在每次需要在我的应用程序服务器中支持新方法时更改nginx配置,我不希望这些方法紧密耦合 [编辑] 该解决方

我使用nginx作为反向代理服务器

它背后的应用服务器接受请求的自定义扩展方法。 例如,“MYMETHOD”

然而,nginx默认配置似乎只接受非扩展方法,如HEAD、GET、POST等,并为没有非扩展方法的请求返回默认nginx 400响应,而不是将这些请求代理到我的应用服务器

我如何让nginx接受并代理任何http请求,而不管它们的方法是什么

我不想将特定方法列入白名单,因为这需要我在每次需要在我的应用程序服务器中支持新方法时更改nginx配置,我不希望这些方法紧密耦合

[编辑]

该解决方案必须适用于官方支持的nginx发行版,无论是nginx.com还是流行的linux发行版(debian、centos等)

显然,我可以修改nginx源代码并使其传递任何方法,但如果我修改源代码并重新编译,它将不再是nginx,而是它的一个分支。

您可以使用它来允许自定义HTTP方法。此模块允许将任意HTTP方法传递到后端应用程序

例如:

http {
    server {

        location /api/ {
            allow_methods ".*";
        }

    }
}
指令

allow_methods "^(GET|POST|PUT|DELETE|PATCH|LINK|COPY)$";

该指令描述了应该传递的HTTP方法。模式区分大小写(根据RFC 2616)。如果没有,则应用Nginx的默认规则。您应该只在真正需要的位置使用此指令。

我不能接受此答案,因为它需要重新编译nginx。我需要一个适用于官方支持的nginx发行版的解决方案。此外,本模块的作者指出,这是一个容易出错的黑客解决方案,因为它欺骗nginx将每个请求都视为GET请求,这可能与其他模块冲突。这不适合我的需要。我认为,如果你接受一个开源项目,根据你的需要修改它,它仍然是你修改的Nginx代码库,如果你把你的更改推到存储库上游,它可以在项目中被吸收,成为Nginx代码库的一部分,因此,如果你把它修改成你的需求,你的改变被接受和上行,你仍然可以考虑NGIX,现在你的改变。我完全同意这个开源哲学,这可能是我最终要做的。但不幸的是,这不符合我最初的需求,这导致我提出了这个问题。看起来自2016年以来没有任何进展。令人沮丧的。