首页 文章

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

提问于
浏览
9

在我的环境中,我使用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?

1 回答

  • 10

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

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

相关问题