2013-02-18 16 views
8

W moim środowisku używam perlbal do przekierowania żądania do nginx. Jeśli verify_backend jest włączone. perbal wyśle ​​żądanie "OPCJE *" do nginx, ale odpowiedź nginx to złe żądanie.Jak obsługiwać żądanie "OPTIONS *" w nginx?

Według RFC2616:

Jeśli Request-URI jest gwiazdka („”), wniosek OPCJE ma zastosowania do serwera w ogóle, a nie do konkretnego zasobu?. Ponieważ opcje komunikacyjne serwera zazwyczaj zależą od zasobu, żądanie "" jest użyteczne tylko jako metoda "ping" lub "bez opcji"; nie robi nic poza umożliwieniem klientowi przetestowania możliwości serwera. Na przykład można to wykorzystać do przetestowania proxy pod względem zgodności HTTP/1.1 (lub jego braku).

Myślę, że perlbal próbuje wysłać tego rodzaju żądanie, ale nginx domyślnie nie może tego obsłużyć.

Gdy próbuję wysłać żądanie "OPTIONS * HTTP/1.0", zawsze dotrzesz "HTTP 400 złe żądanie":

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

ale to działa na "Opcje/HTTP/1.0" opcja bez wniosków gwiazdka:

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

Jak skonfigurować nginx, aby mógł odpowiedzieć przez HTTP return 200 zamiast HTTP return 400?

+0

nie sądzę, że jest to rozwiązanie ale czy próbowałeś używać HTTP/1.1 z nagłówkiem 'Host:'? ala ... 'OPCJE * HTTP/1.1 \ r \ nHost: devserver \ r \ n \ r \ n'. Zgodnie z [RFC2616 sekcja 9] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html): 'Zestaw wspólnych metod dla HTTP/1.1 jest zdefiniowany poniżej ...' – Basic

+0

Cześć, dziękuję dla twojego pomysłu, ale wciąż mam "400 złego żądania", nawet nie ma szansy na wpisanie nagłówka Próbowałem wysłać żądanie opcji z nagłówkiem hosta przez telnet: ' telnet 10.1.128.97 5274 Próbuję 10.1.128.97 .. . Połączony z 10.1.128.97. Escape to "^]". OPTIONS * HTTP/1,1 400 Bad Request

400 Bad Request


nginx/1.2.6
Połączenie zamknięte host zagraniczny. ' – Cody

Odpowiedz

8

wiem, że jest to przesada, ale jedno rozwiązanie jest umieszczenie HAProxy przed nim po prostu uchwycić OPCJE żądania, a następnie zbudować swoją własną odpowiedź w HAProxy:

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