2013-02-18 14 views
8

私の環境では、リクエストをnginxにリダイレクトするためにperlbalを使用します。 verify_backendがオンの場合。 perbalはnginxに "OPTIONS *"リクエストを送りますが、nginxはそれを悪いリクエストとして応答します。 RFC2616によるとnginxで "OPTIONS *"リクエストを処理する方法は?

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

私はperlbalがこの種の要求を送信しようとしていますが、nginxはこれをデフォルトで処理できないと思います。

私がリクエストを送信しようとすると、 "OPTIONSを* HTTP/1.0"、私は常に "HTTP 400不正な要求" を取得:

127.0.0.1 - - [18/2月/ 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] "オプション/ HTTP/1.0" 200 0 - "" - "" - "

HTTPリターン400ではなくHTTPリターン200で応答するようにnginxを設定するにはどうすればよいですか?

+0

私はこれが解決策だとは思いません'Host:'ヘッダでHTTP/1.1を試してみましたか? ala ... 'オプション* HTTP/1.1 \ r \ nホスト:devserver \ r \ n \ r \ n' [RFC2616 Section 9](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)によると: 'HTTP/1.1のための一般的なメソッドのセットは以下に定義されています... ' – Basic

+0

こんにちは、ありがとうあなたのアイデアのために、私はまだ '400 Bad Request'を手に入れました。ヘッダを入力する機会がありません。 私はtelnetでホストヘッダーでオプション要求を発行しようとしました: ' telnet 10.1.128.97 5274 試してみました10.1.128.97 .. 10.1.128.97に接続しました。 エスケープ文字は '^]'です。 OPTIONSは* HTTP/1.1 400不正な要求

400不正な要求


nginxの/ 1.2.6
によって閉じ接続外国人ホスト。 ' – Cody

答えて

8

私はそれはやり過ぎだ知っているが、1つの解決策はただOPTIONSが要求していることキャプチャしHAProxyで独自の応答を構築するために、それの前にHAProxyを置くことです:

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