หน้าบำรุงรักษาบน nginx แนวทางปฏิบัติที่ดีที่สุด


13

ฉันต้องการกำหนดค่าเซิร์ฟเวอร์ให้แสดงหน้าการบำรุงรักษาเมื่อมีอยู่ ฉันลองใช้รหัสนี้และใช้งานได้:

location / {
    try_files /maintenance.html $uri $uri/ @codeigniter;
}

แต่ฉันสังเกตเห็นว่ามันจะได้รับรหัสสถานะ 200 และอาจทำให้เกิดความสับสนกับเครื่องมือค้นหา ฉันคิดว่าวิธีปฏิบัติที่ดีที่สุดคือส่งคืนรหัสสถานะ 503 ใน google ผมพบหน้าเว็บที่เกี่ยวข้องหลายประการเกี่ยวกับมันเช่นนี้ อย่างไรก็ตามพวกเขาใช้หากจะทำการเปลี่ยนเส้นทางและตามเอกสาร nginx มันไม่ปลอดภัยที่จะใช้ ifs

มีวิธีการทำโดยไม่ใช้ถ้า? ปลอดภัยหรือไม่หากใช้ในกรณีนี้

ขอบคุณ

คำตอบ:


7

ฉันคิดว่าวิธีปฏิบัติที่ดีที่สุดคือส่งคืนรหัสสถานะ 500

ฉันคิดว่าคุณหมายถึง 503 แทน 500

พวกเขาใช้ifเพื่อทำการเปลี่ยนเส้นทางและตามเอกสาร nginx มันไม่ปลอดภัยที่จะใช้ ifs

ไม่เฉพาะreturnเป็นปลอดภัย 100%ภายในifในlocationบริบท

ตามเอกสาร Nginxคุณสามารถระบุรหัสสถานะ HTTP try_filesเป็นอาร์กิวเมนต์สุดท้ายที่จะ ฉันได้ลองแล้ว แต่มันใช้งานไม่ได้


21

นี่คือสิ่งที่ฉันทำ

            if (-f $document_root/maintenance.html) {
                    return 503;
            }
            error_page 503 @maintenance;
            location @maintenance {
                    rewrite ^(.*)$ /maintenance.html break;
            }

หากไฟล์อยู่ที่นั่นมันจะแสดงหน้าการบำรุงรักษา เมื่อคุณลบไฟล์คุณจะกลับสู่ปกติ


2
ใช่นั่นคือรหัสเดียวกันกับที่ลิงค์ในคำถาม ฉันจริงถามว่ามันปลอดภัยที่จะใช้ifในกรณีนี้เพราะมันไม่ควรใช้ตามเอกสาร
NeDark

1
และเอกสารเดียวกันนั้น: In some cases it's also possible to move ifs to server level (where it's safe as only other rewrite module directives are allowed within it).error_page การบำรุงรักษาตามที่ไมค์แสดงให้เห็นจะถูกตั้งค่าตามปกติในบริบทของเซิร์ฟเวอร์ {}
รีแกน

1
ฉันทำเช่นเดียวกันยกเว้นเพิ่ง 'คืน 503' โดยไม่ตรวจสอบการมีอยู่ของไฟล์ ด้วยวิธีนี้ฉันสามารถเปิด / ปิดการใช้งานไซต์ (โดยใช้เค้าโครง "ไซต์ที่พร้อมใช้งาน" / "เปิดใช้งานไซต์" ของ Debian) โดยเชื่อมโยงและเปิดหน้าบำรุงรักษา
Asfand Qazi

2
เสียงเช่นนี้จะเป็นตีประสิทธิภาพ: NGINX จะต้องตรวจสอบสำหรับการดำรงอยู่ของไฟล์ทุกร้องขอ ...
มาร์ค

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