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

Redirect 200 /hello

ฉันสามารถทำสิ่งนี้กับ Nginx ได้หรือไม่ ฉันไม่ต้องการให้บริการไฟล์ ฉันแค่ต้องการให้เซิร์ฟเวอร์ตอบสนองด้วย 200 (ฉันแค่บันทึกคำขอ)

ฉันรู้ว่าฉันสามารถเพิ่มไฟล์ดัชนีและทำสิ่งเดียวกันได้ แต่การทำในการกำหนดค่าหมายความว่ามีสิ่งที่อาจผิดพลาดน้อยกว่าหนึ่งอย่าง

answer

ใช่คุณสามารถ

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

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

หากคุณต้องการส่งคืนข้อความ HTML ที่จัดรูปแบบโดยไม่ต้องแสดงไฟล์ HTML:

location / {
    default_type text/html;
    return 200 "<!DOCTYPE html><h2>gangnam style!</h2>\n";
}

หากคุณต้องการส่งคืนข้อความที่ไม่มีรูปแบบ htmlเป็นจุดคำตอบ:

location / {
    add_header Content-Type text/plain;
    return 200 'gangnam style!';
}

และถ้าคุณเพียงแค่ต้องการคืน 200:

location / {
    return 200;
}

เพียงจำไว้ว่า: locationบล็อกอยู่ภายในserverบล็อก นี่คือเอกสารสำหรับข้อมูลเพิ่มเติม

PS: ฉันมีการกำหนดค่าที่คล้ายกัน (รูปแบบ html) ที่ทำงานบนเซิร์ฟเวอร์จำนวนมาก

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

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

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

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

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

ขยายคำตอบ @cadmi สำหรับกรณีเฉพาะของการกำหนดค่าตัวควบคุม Kubernetes ingress-nginx

ในกรณีของฉัน ฉันสามารถผนวกส่วนเล็ก ๆ ของการกำหนดค่า Nginx ภายในlocationคำสั่งเท่านั้น

ฉันต้องการเพิ่มข้อความ JSON ข้อผิดพลาด 404 ที่กำหนดเองสำหรับifคำสั่งเฉพาะ เนื่องจากdefault_typeไม่ได้รับอนุญาตในifคำสั่งฉันจึงเพิ่ม "ว่าง" default_typeนอกifคำสั่งและadd_headerภายในifคำสั่ง:

http {
    default_type text/html; # can't change this
    ...
    server {
        ...
        location / {
            ...
            # This part of configuration is something I can change (generated by ingress-nginx controller `ingress.kubernetes.io/configuration-snippet` annotation)
            default_type "";
            # Custom 404 JSON page returned for the call to my.specific.host
            if ($host = my.specific.host) {
                return 404 '{\n  "status": "404",\n  "message": "Not Found",\n  "details": "Please call other hosts."\n}\n';
                add_header Content-Type "application/json" always;
            }
        }
    }
}

โดยไม่ต้องสั่งถูกเพิ่มสองหัวแทนการเปลี่ยนแปลงหนึ่งเริ่มต้นdefault_type "";add_headerContent-Type