13

私の環境では、perlbal を使用してリクエストを nginx にリダイレクトしています。verify_backendがオンの場合。perbal は "OPTIONS *" リクエストを nginx に送信しますが、nginx はそれを不正なリクエストとして応答します。

RFC2616によると:

Request-URI がアスタリスク (" ") である場合、OPTIONS 要求は、特定のリソースではなく一般的な ?server に適用されることを意図しています。通常、サーバーの通信オプションはリソースに依存するため、" " リクエストは "ping" または "no-op" タイプのメソッドとしてのみ有用です。クライアントがサーバーの機能をテストできるようにする以外には何もしません。たとえば、これを使用して、HTTP/1.1 準拠 (またはその欠如) についてプロキシをテストできます。

perlbal はこの種のリクエストを送信しようとしていると思いますが、nginx はデフォルトでこれを処理できません。

リクエスト「OPTIONS * HTTP/1.0」を送信しようとすると、常に「HTTP 400 bad request」が表示されます。

127.0.0.1 - - [18/Feb/2013:03:55:47 +0000] "オプション * HTTP/1.0" 400 172 "-" "-" "-"

ただし、アスタリスク要求なしで「OPTIONS / HTTP/1.0」オプションで動作します:

127.0.0.1 - - [18/Feb/2013:04:03:56 +0000] "オプション/HTTP/1.0" 200 0 "-" "-" "-"

HTTP return 400 ではなく http return 200 で応答するように nginx を構成するにはどうすればよいですか?

4

2 に答える 2

16

やり過ぎだとはわかっていますが、1 つの解決策は、HAProxy をその前に配置して、その OPTIONS リクエストをキャプチャし、HAProxy で独自のレスポンスを構築することです。

location * {
    if ($request_method = OPTIONS ) {
        add_header Content-Length 0;
        add_header Content-Type text/plain;
        return 200;
    }
}
于 2013-02-26T20:19:28.927 に答える