如何在nginx中处理"OPTIONS*"请求?

Cod*_*ody 12 http nginx bad-request http-options-method

在我的环境中,我使用perlbal将请求重定向到nginx.如果启用了verify_backend.perbal会向nginx发送一个"OPTIONS*"请求,但是nginx会将其作为一个错误的请求进行响应.

根据RFC2616:

如果Request-URI是星号(" "),则OPTIONS请求通常应用于?服务器而不是特定资源.由于服务器的通信选项通常取决于资源,因此" "请求仅用作"ping"或"no-op"类型的方法; 除了允许客户端测试服务器的功能之外,它什么都不做.例如,这可以用于测试HTTP/1.1合规性(或缺乏)的代理.

我认为perlbal试图发送这种请求,但是nginx默认不能处理这个问题.

当我尝试发送请求"OPTIONS*HTTP/1.0"时,我总是得到"HTTP 400错误请求":

127.0.0.1 - - [18/Feb/2013:03:55:47 +0000]"OPTIONS*HTTP/1.0"400 172" - "" - "" - "

但它适用于没有星号请求的"OPTIONS/HTTP/1.0"选项:

127.0.0.1 - - [18/Feb/2013:04:03:56 +0000]"OPTIONS/HTTP/1.0"200 0" - "" - "" - "

如何配置nginx以使其响应http返回200而不是HTTP返回400?

jes*_*sal 14

我知道这是一个矫枉过正的但是一个解决方案是将HAProxy放在它前面以捕获OPTIONS请求,然后在HAProxy中构建自己的响应:

location * {
    if ($request_method = OPTIONS ) {
        add_header Content-Length 0;
        add_header Content-Type text/plain;
        return 200;
    }
}
Run Code Online (Sandbox Code Playgroud)