How to handle "OPTIONS *" request in nginx?

10,045

I know it's an overkill but one solution is to put HAProxy in front of it to just capture that OPTIONS request and then build your own response in HAProxy:

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

Related videos on Youtube

Cody
Author by

Cody

Updated on June 04, 2022

Comments

  • Cody
    Cody almost 2 years

    In my environment, I use perlbal to redirect request to nginx. If verify_backend is on. perbal will send a "OPTIONS *" request to nginx, but the nginx response it as a bad request.

    According to RFC2616:

    If the Request-URI is an asterisk (""), the OPTIONS request is intended to apply to the ?server in general rather than to a specific resource. Since a server's communication options typically depend on the resource, the "" request is only useful as a "ping" or "no-op" type of method; it does nothing beyond allowing the client to test the capabilities of the server. For example, this can be used to test a proxy for HTTP/1.1 compliance (or lack thereof).

    I think perlbal is trying to send this kind of request, but nginx can't handle this by default.

    When I try to send a request "OPTIONS * HTTP/1.0", I always get "HTTP 400 bad request":

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

    but it works on "OPTIONS / HTTP/1.0" option without asterisk requests :

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

    How can I configure nginx to let it respond with http return 200 rather than HTTP return 400 ?