Score:0

เขียนสตริงข้อความค้นหา Nginx ใหม่

ธง cn

ฉันมีการกำหนดค่าตามด้านล่าง แต่ฉันได้รับข้อผิดพลาด 500 ข้อผิดพลาดนี้อาจอยู่ที่ไหน

เซิร์ฟเวอร์ต้นทาง {เซิร์ฟเวอร์ 192.168.1.1:8000;}
อัปสตรีมเซิร์ฟเวอร์ทาส {เซิร์ฟเวอร์ 192.168.1.2:8001;}

แผนที่ $request_uri $redirect_to {
    "target=master" มาสเตอร์เซิร์ฟเวอร์;
    "เป้าหมาย = ทาส" เซิร์ฟเวอร์ทาส;
}

เซิร์ฟเวอร์ {
    ฟัง 80;
        server_name 192.168.1.10;

       ที่ตั้ง / {
        proxy_pass http://$redirect_to;
    }

}

เมื่อฉันเรียก URL ตามด้านล่าง ฉันได้รับข้อผิดพลาดต่อไปนี้

http://192.168.1.10/app/index.html?target=master

http://192.168.1.10/app/index.html?target=slave

บันทึก Nginx: *2 คำนำหน้า URL ไม่ถูกต้องใน "http://", ลูกค้า: 192.168.1.11, เซิร์ฟเวอร์: 192.168.1.10, คำขอ: "GET /favicon.ico HTTP/1.1", โฮสต์: "192.168.1.10", ผู้อ้างอิง: "http ://192.168.1.10/app/index.html?target=master"

Score:0
ธง gr

คุณกำลังเปรียบเทียบของคุณ $request_uriซึ่งเท่ากับ /app/index.html?target=master จากตัวอย่างของคุณถึง เป้าหมาย=หลัก และ เป้าหมาย=ทาส สตริง ไม่มีการจับคู่ดังนั้น $redirect_to ตัวแปรกลายเป็นสตริงว่าง หากต้องการตรวจสอบว่า $request_uri ประกอบด้วย เป้าหมาย=หลัก หรือ เป้าหมาย=ทาส สตริงย่อย คุณสามารถใช้รูปแบบ regex ภายใน แผนที่ บล็อก:

แผนที่ $request_uri $redirect_to {
    "~target=master" มาสเตอร์เซิร์ฟเวอร์;
    "~target=slave" เซิร์ฟเวอร์ทาส;
}

หรือดีกว่าตรวจสอบ $arg_target ค่าตัวแปร:

แผนที่ $arg_target $redirect_to {
    มาสเตอร์มาสเตอร์เซิร์ฟเวอร์;
    ทาสรับใช้;
}

พิจารณาใช้บางส่วนด้วย ค่าเริ่มต้น มูลค่าเมื่อไม่มี เป้า มีการระบุอาร์กิวเมนต์แบบสอบถามในคำขอ (หรือค่าไม่ถูกต้อง):

แผนที่ $arg_target $redirect_to {
    มาสเตอร์มาสเตอร์เซิร์ฟเวอร์;
    ทาสรับใช้;
    เซิร์ฟเวอร์หลักเริ่มต้น
}

อันสุดท้ายสามารถทำให้ง่ายขึ้นได้

แผนที่ $arg_target $redirect_to {
    ทาสรับใช้;
    เซิร์ฟเวอร์หลักเริ่มต้น
}

หรือตรวจสอบเบื้องต้นเช่น

แผนที่ $arg_target $redirect_to {
    มาสเตอร์มาสเตอร์เซิร์ฟเวอร์;
    ทาสรับใช้;
}
เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name 192.168.1.10;

    ถ้า ($redirect_to = '') {
        กลับ 501; # ไม่ได้ใช้งาน HTTP 501
    }

    ที่ตั้ง / {
        proxy_pass http://$redirect_to;
    }

}

อัปเดต

หากฉันเข้าใจคำถามเพิ่มเติมของคุณถูกต้อง - วิธีโหลดเนื้อหาทั้งหมดจากอัปสตรีมเดียวกันกับไฟล์ HTML หลัก - คุณสามารถลองรับชื่ออัปสตรีมจาก HTTP ผู้อ้างอิง ค่าส่วนหัวถ้า เป้า อาร์กิวเมนต์แบบสอบถามหายไปโดยใช้สองล่ามโซ่ แผนที่ บล็อก (นี่คือ regex จริง ๆ):


แผนที่ $arg_target $redirect_to {
    มาสเตอร์มาสเตอร์เซิร์ฟเวอร์;
    ทาสรับใช้;
    เริ่มต้น $by_referer;
}
แผนที่ $http_referer $by_referer {
    "~target=master" มาสเตอร์เซิร์ฟเวอร์;
    "~target=slave" เซิร์ฟเวอร์ทาส;
}
เซิร์ฟเวอร์ {
    ...
}
MrTux01 avatar
cn flag
ขอบคุณสำหรับคำอธิบายที่ดี ฉันจะกำจัดข้อผิดพลาด 500 สำหรับไฟล์ css และ js ได้อย่างไร
Ivan Shatsky avatar
gr flag
ไม่แน่ใจว่าฉันเข้าใจคำถามของคุณถูกต้องหรือไม่ หากฉันเข้าใจ โปรดตรวจดูการอัปเดตเพื่อหาคำตอบ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา