2013-02-18 108 views
8

在我的環境中,我使用perlbal將請求重定向到nginx。如果verify_backend處於打開狀態。 perbal會向nginx發送一個「OPTIONS *」請求,但是nginx將它作爲一個不好的請求來回應。如何在nginx中處理「OPTIONS *」請求?

根據RFC2616

如果Request-URI是一個星號(「」),OPTIONS請求旨在適用於服務器一般,而不是特定的資源?由於服務器的通信選項通常取決於資源,因此「」請求僅作爲「ping」或「no-op」類型的方法有用;除了允許客戶端測試服務器的功能之外,它什麼都不做。例如,這可用於測試代理是否符合HTTP/1.1(或缺乏)。

我想perlbal試圖發送這種請求,但nginx默認情況下無法處理這個。

當我試圖發送一個請求 「OPTIONS * HTTP/1.0」,我總是得到 「HTTP 400錯誤的請求」:

127.0.0.1 - - [18 /二月/ 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?

+0

我不認爲這是一個解決方案但你有沒有嘗試使用帶有'Host:'頭部的HTTP/1.1? ala ...'選項* HTTP/1.1 \ r \ n主機:devserver \ r \ n \ r \ n'。根據[RFC2616第9節](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html):HTTP/1.1的一組常用方法定義如下...' – Basic 2013-02-18 12:55:01

+0

嗨,謝謝爲您的想法,但我仍然有'400壞請求',甚至沒有機會輸入標頭 我試圖通過遠程登錄發出帶主機標題的選項請求: ' telnet 10.1.128.97 5274 嘗試10.1.128.97 .. 。 連接到10.1.128.97。 轉義字符是'^]'。 OPTIONS * HTTP/1.1 400錯誤的請求 <體BGCOLOR = 「白色」>

400錯誤的請求


的nginx/1.2.6
連接被關閉國外主機。 ' – Cody 2013-02-22 06:41:48

回答

8

我知道這是一個矯枉過正,但一個解決辦法是把HAProxy的在它前面剛剛捕獲OPTIONS請求,然後建立HAProxy的自己的迴應:

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