Odpowiedz 200 z konfiguracji Nginx bez podawania pliku

122

Skonfigurowałem Apache, aby wysyłał odpowiedź 200 bez podawania żadnego pliku w tej linii konfiguracyjnej

Redirect 200 /hello

Czy mogę to zrobić za pomocą Nginx? Nie chcę podawać pliku, chcę tylko, aby serwer odpowiedział 200 (po prostu rejestruję żądanie).

Wiem, że mogę dodać plik indeksu i osiągnąć to samo, ale robienie tego w konfiguracji oznacza, że ​​jest jedna rzecz, która może pójść nie tak.

Theo
źródło

Odpowiedzi:

261

Tak, możesz

location / {
    return 200 'gangnam style!';
    # because default content-type is application/octet-stream,
    # browser will offer to "save the file"...
    # if you want to see reply in browser, uncomment next line 
    # add_header Content-Type text/plain;
}
Cadmi
źródło
1
jak dodać nowy wiersz do odpowiedzi? gangnam\nstyle?
tback
1
@ powrót oczywiście, masz rację
Cadmi
4
add_header nie działa dla mnie, ponieważ dodaje kolejny nagłówek zamiast zastępowania starego „Content-type”. W mojej odpowiedzi mam 2 nagłówki „Content-type”: $ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> User-Agent: curl / 7.38.0> Host: localhost> Zaakceptuj: / > <HTTP / 1.1 200 OK <Data: wtorek, 11 października 2016 13:27:53 GMT <Typ zawartości: application / octet-stream <Długość treści: 25 <Połączenie: keep-alive <Typ zawartości: application / json
jmcollin92,
1
@ jmcollin92 twój komentarz nie ma nic wspólnego z zadanym pytaniem i na które udzielono odpowiedzi. ponieważ oczywiście masz jakieś proxy_pass, fascgi_pass, cokolwiek ... ale wciąż odpowiadam location / healthcheck / h1_pio {# proxy_pass blablabla, czego potrzebujesz; proxy_hide_header Content-Type; add_header Aplikacja Content-Type / json; } w przyszłości zadaj pytanie poprawnie i we właściwej lokalizacji
cadmi
6
@ jmcollin92, co może się zdarzyć, jeśli istniejący typ domyślny został zadeklarowany w innym miejscu. Możesz to zmienić, używając default_type text/plain;wewnątrz bloku lokalizacji zamiast add_headerdyrektywy.
tjb1982
20

Musisz użyć 204, ponieważ Nginx nie pozwoli na 200 bez treści odpowiedzi. Aby wysłać 204 po prostu użyć dyrektywy powrotu do return 204;w odpowiednim miejscu.

Martin Fjordvald
źródło
Jeśli spróbujesz wyświetlić to w przeglądarce, będzie to wyglądało, jakby nic nie zrobiło. to celowe. Nic nie podałeś (204), nic nie wyświetla. Aby udowodnić, że podałeś 204, użyj curl.
jnovack
4

Zgodnie z definicjami kodów statusu, uważam, że chcesz, aby był to 204, a nie 200. 200 musi być z zasobem w odpowiedzi, lub podejrzewam, że większość rozsądnych przeglądarek by się tym pomyliła. Drugim, którego możesz użyć, jest 304, który dotyczy zawartości w pamięci podręcznej.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

sandroid
źródło
Jasne, zrób to 204, jak to zrobić? Chociaż bardzo wątpię, że jakakolwiek przeglądarka będzie mylona przez puste ciało.
Theo
1
puste ciało jest nadal odpowiedzią z obiektem, takim jak pusty index.html. Poprosiłeś o odpowiedź 200 bez dołączonego zasobu (nie podano pliku). Jeśli chodzi o to, jak dokładnie to zrobić na Nginxie, muszę to sprawdzić sam, tylko raz zrobiłem to na Apache i nie pamiętam z ręki.
sandroid
304 wydaje się, że wysyłałoby wszystkie złe sygnały dla takich rzeczy jak debugowanie i tymczasowe zwroty.
Kzqai
2

Aby wypełnić odpowiedź @Martin Fjordval, bądź ostrożny, jeśli używasz takiej konfiguracji do sprawdzenia stanu zdrowia.

Chociaż 204kod HTTP jest semantycznie idealny do kontroli zdrowia (wskazanie sukcesu bez zawartości), niektóre usługi nie uważają go za sukces.

Miałem problem z modułami równoważenia obciążenia Google Cloud .

toadjaune
źródło