ตอบกลับด้วย 200 จากการกำหนดค่า Nginx โดยไม่ต้องให้บริการไฟล์


122

ฉันได้กำหนดค่า Apache ให้ส่งการตอบกลับ 200 รายการโดยไม่แสดงไฟล์ใด ๆ ด้วยบรรทัดการกำหนดค่านี้

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

1
@tback แน่นอนใช่คุณ
cadmi

4
add_header ไม่ทำงานสำหรับฉันเนื่องจากจะเพิ่มส่วนหัวอื่นแทนการแทนที่ 'ประเภทเนื้อหา' แบบเก่า ในการตอบกลับของฉันฉันมี 2 'ประเภทเนื้อหา' ส่วนหัว: $ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> ตัวแทนผู้ใช้: curl / 7.38.0> โฮสต์: localhost> ยอมรับ: / > <HTTP / 1.1 200 ตกลง <วันที่: อังคาร, 11 ตุลาคม 2559 13:27:53 GMT <เนื้อหาประเภท: แอปพลิเคชัน / octet-stream <ความยาวเนื้อหา: 25 <การเชื่อมต่อ: Keep-alive <เนื้อหาประเภท: application / json
jmcollin92

1
@ jmcollin92 ความคิดเห็นของคุณไม่มีส่วนเกี่ยวข้องกับคำถามที่ถามและคำตอบที่ได้รับ เพราะเห็นได้ชัดว่าคุณมี proxy_pass, fascgi_pass, อะไรก็ตาม ... แต่ฉันยังคงตอบตำแหน่ง / healthcheck / h1_pio {# proxy_pass blablabla สิ่งที่คุณต้องการ; proxy_hide_header ประเภทเนื้อหา; แอปพลิเคชัน / json add_header ประเภทเนื้อหา } ในอนาคตถามคำถามของคุณอย่างถูกต้องและในตำแหน่งที่เหมาะสม
cadmi

6
@ jmcollin92 ที่สามารถเกิดขึ้นได้หากคุณมี default_type ประกาศอยู่แล้ว คุณสามารถลบล้างมันได้โดยใช้default_type text/plain;ด้านในของบล็อกตำแหน่งแทนadd_headerคำสั่ง
tjb1982

20

คุณจำเป็นต้องใช้ 204 เพราะ Nginx จะไม่อนุญาตให้ 200 โดยไม่มีเนื้อหาตอบสนอง เพื่อส่ง 204 คุณก็ใช้คำสั่งการกลับไปreturn 204;อยู่ในตำแหน่งที่เหมาะสม


หากคุณพยายามดูผ่านเบราว์เซอร์มันจะดูเหมือนไม่ทำอะไรเลย นั่นเป็นความตั้งใจ คุณไม่ได้ทำอะไรเลย (204) มันไม่แสดงอะไรเลย เพื่อพิสูจน์ว่าคุณทำหน้าที่ 204 curlใช้
jnovack

4

ตามคำจำกัดความของรหัสสถานะฉันเชื่อว่าคุณต้องการให้เป็น 204 และไม่ใช่ 200. 200 ต้องการทรัพยากรในการตอบสนองหรือฉันสงสัยว่าเบราว์เซอร์ที่มีสติส่วนใหญ่จะสับสน อีกอันหนึ่งที่คุณสามารถใช้ได้คือ 304 ซึ่งใช้สำหรับเนื้อหาที่แคช

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


แน่นอนทำให้เป็น 204 ฉันจะทำอย่างไร แม้ว่าฉันจะสงสัยอย่างมากเบราว์เซอร์ใด ๆ ก็ตามจะถูกทำให้สับสนโดยเนื้อความว่างเปล่า
Theo

1
ร่างกายที่ว่างเปล่ายังคงตอบสนองกับวัตถุเช่น index.html ที่ว่างเปล่า สิ่งที่คุณถามคือให้การตอบสนอง 200 โดยไม่มีทรัพยากรแนบอยู่ (ไม่มีไฟล์ให้บริการ) สำหรับวิธีที่จะทำมันบน nginx ฉันต้องค้นหามันเองฉันทำครั้งนี้ด้วย apache และฉันจำไม่ได้
sandroid

304 ดูเหมือนว่าจะส่งสัญญาณผิดทั้งหมดสำหรับสิ่งต่าง ๆ เช่นการดีบักและการส่งคืนชั่วคราว
Kzqai

2

เพื่อให้คำตอบของ @Martin Fjordval เสร็จสิ้นโปรดระมัดระวังหากคุณใช้การกำหนดค่าดังกล่าวเพื่อตรวจสุขภาพ

ในขณะที่204รหัส HTTP นั้นเหมาะสำหรับการตรวจสุขภาพ (บ่งชี้ความสำเร็จโดยไม่มีเนื้อหา) แต่บริการบางอย่างไม่ถือว่าสำเร็จ

คือผมมีปัญหากับGoogle Cloud โหลด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.