파일을 제공하지 않고 Nginx 설정에서 200으로 응답


122

이 구성 줄에서 파일을 제공하지 않고 200 응답을 다시 보내도록 Apache를 구성했습니다.

Redirect 200 /hello

Nginx로 이것을 할 수 있습니까? 파일을 제공하고 싶지 않고 서버가 200으로 응답하기를 원합니다 (요청을 기록하고 있습니다).

인덱스 파일을 추가하고 동일한 작업을 수행 할 수 있다는 것을 알고 있지만 구성에서 수행하면 잘못 될 수있는 일이 적습니다.

답변:


261

그래 넌 할수있어

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;
}

1
응답에 줄 바꿈을 어떻게 추가합니까? gangnam\nstyle?
tback December

1
@tback은 물론입니다.
cadmi

4
add_header는 이전 'Content-type'을 바꾸는 대신 다른 헤더를 추가하므로 작동하지 않습니다. 내 응답에는 2 개의 '콘텐츠 유형'헤더가 있습니다 : $ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> User-Agent : curl / 7.38.0> 호스트 : localhost> 수락 : / > <HTTP / 1.1 200 OK <날짜 : 2016 년 10 월 11 일 화요일 13:27:53 GMT <콘텐츠 유형 : application / octet-stream <콘텐츠 길이 : 25 <연결 : 연결 유지 <콘텐츠 유형 : application / json
jmcollin92

1
@ jmcollin92 귀하의 의견은 질문과 답변이있는 질문과 관련이 없습니다. 왜냐하면 당신은 분명히 어떤 종류의 proxy_pass, fascgi_pass 등을 가지고 있기 때문입니다. 그러나 나는 여전히 위치에 응답합니다. / healthcheck / h1_pio {# proxy_pass blablabla 필요한 것; proxy_hide_header 컨텐츠 유형; add_header Content-Type application / json; } 앞으로는 올바른 위치에 올바로 질문하십시오
cadmi

6
@ jmcollin92 기존의 default_type이 다른 곳에 선언 된 경우 발생할 수 있습니다. 지시문 default_type text/plain;대신 위치 블록 내부를 사용하여이를 대체 할 수 있습니다 add_header.
tjb1982

20

Nginx는 응답 본문이없는 200을 허용하지 않으므로 204를 사용해야합니다. 204를 보내려면 return 지시문return 204;적절한 위치에 사용하면 됩니다.


브라우저를 통해 이것을 보려고하면 아무것도하지 않은 것처럼 보일 것입니다. 의도적입니다. 당신은 아무것도 제공하지 않았다 (204), 그것은 아무것도 표시하지 않습니다. 204를 제공했음을 증명하려면을 사용하십시오 curl.
jnovack

4

상태 코드 정의에 따르면 200이 아닌 204가 되길 원한다고 생각합니다. 200은 응답으로 리소스와 함께 있어야하거나 대부분의 브라우저는 혼란 스럽습니다. 사용할 수있는 다른 하나는 304이며, 이는 캐시 된 콘텐츠에 사용됩니다.

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


물론 204로 만들면 어떻게해야합니까? 빈 브라우저로 인해 브라우저가 혼란 스러울 것입니다.
Theo

1
빈 본문은 여전히 ​​빈 index.html과 같은 개체에 대한 응답입니다. 요청한 것은 첨부 된 리소스가없는 200 개의 응답을 제공하는 것입니다 (파일이 제공되지 않음). nginx에서 정확히 수행하는 방법에 관해서는 직접 찾아봐야합니다. 아파치에서 한 번만 수행했으며 기억할 수 없습니다.
sandroid

304는 디버깅 및 임시 리턴과 같은 모든 잘못된 신호를 보내는 것처럼 보입니다.
Kzqai

2

@Martin Fjordval의 답변을 완료하려면 그러한 구성을 사용하여 상태 확인을 수행하는 경우주의하십시오.

204HTTP 코드는 의미 론적으로 건강 점검 (콘텐츠가없는 성공 표시)에 완벽 하지만 일부 서비스는 이를 성공으로 간주 하지 않습니다 .

즉, Google 클라우드로드 밸런서에 문제가 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.