ฝั่งเซิร์ฟเวอร์ Blazor ด้านหลัง reverse proxy 404


10

ฉันมีแอพฝั่งเซิร์ฟเวอร์ที่โฮสต์บน IIS หลังพร็อกซีย้อนกลับ (ใช้ ARR)

ฉันลองทุกอย่างที่ฉันสามารถคิดได้ แต่ฉันจะได้รับ 404 ต่อไป

_framework / blazor.server.js

href ฐานของฉันถูกตั้งค่าเป็น "/ subsite /":

<base href="https://stackoverflow.com/subsite/" />

และค่า src ทั้งหมดของฉันสัมพันธ์กับสิ่งนี้:

<script src="_framework/blazor.server.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="animations.js"></script>

สคริปต์อื่น ๆ ทุกตัวโหลดได้ดีแม้กระทั่งข้อมูล _content แต่ไม่ใช่ blazor.server.js

ฉันลองใช้เคล็ดลับ PathBase แบบเก่าสำหรับแอป MVC เช่นกันโดยไม่ประสบความสำเร็จ:

if (!env.IsDevelopment()) {
    app.Use((context, next) => {
        context.Request.PathBase = new PathString("/subsite");
        return next();
    });
}

ทุกคนสามารถบอกฉันได้ว่าจะทำให้ Blazor ตระหนักได้อย่างไรว่าจะวาง blazor.server.js ในสถานการณ์ reverse proxy อย่างไร


1
blazor.server.js เป็นทรัพยากรที่ฝังตัว คุณสามารถลองรับสำเนาของไฟล์และให้บริการแบบคงที่เหมือนกับไฟล์ js อื่น ๆ แต่ถึงอย่างนั้นก็ยังมีสัญญาณแช็ทระหว่างเซิร์ฟเวอร์กับเบราว์เซอร์จำนวนมาก ไม่แน่ใจว่ามันทำงานอย่างไรในการตั้งค่าของคุณ
ravi

อืมมม ฉันไม่เข้าใจจริง ๆ ว่าทำให้ส่วนประกอบมีการฝังทรัพยากรด้วยอยู่ใน _content แต่พบว่าพวกมันใช้ได้ดี ฉันจะพยายามคว้ามันและให้บริการแบบคงที่ แต่ดูเหมือนว่าเป็นข้อผิดพลาดจริง - ฉันหมายถึงคุณจะลืมการสนับสนุน reverse proxy subsites ในปี 2019 ได้อย่างไร
Dynde

คุณมีการบันทึกเพื่อดูว่าคำขอเส้นทางใด (และถ้า) จบลงด้วย ASP.NET หรือไม่?
Henk Holterman

คำตอบ:



-1

จากเอกสาร

เขียนซ้ำ URL สำหรับการกำหนดเส้นทางที่ถูกต้อง

คำขอการกำหนดเส้นทางสำหรับองค์ประกอบของหน้าในแอป Blazor WebAssembly ไม่ได้ตรงไปตรงมาเหมือนกับการร้องขอการกำหนดเส้นทางใน Blazor Server แอปที่โฮสต์ พิจารณาแอป Blazor WebAssembly ด้วยสององค์ประกอบ:

  • Main.razor - โหลดที่ root ของแอพและมีลิงค์ไปยังAboutcomponent ( href="About")
  • About.razor - Aboutองค์ประกอบ

เมื่อมีการร้องขอเอกสารเริ่มต้นของแอปโดยใช้แถบที่อยู่ของเบราว์เซอร์ (ตัวอย่างเช่นhttps://www.contoso.com/):

  • เบราว์เซอร์ทำการร้องขอ
  • หน้าเริ่มต้นจะถูกส่งกลับซึ่งมักจะindex.html
  • index.html bootstraps แอป
  • โหลดเราเตอร์ของ Blazor และMainองค์ประกอบของมีดโกนถูกแสดงผล

ในหน้าเลือกการเชื่อมโยงไปเกี่ยวกับการทำงานของส่วนประกอบที่ลูกค้าเพราะเราเตอร์ Blazor หยุดเบราว์เซอร์จากการทำคำขอบนอินเทอร์เน็ตเพื่อwww.contoso.comสำหรับการAboutให้บริการที่แสดงAboutส่วนประกอบของตัวเอง คำขอทั้งหมดสำหรับจุดปลายภายในภายในแอป Blazor WebAssemblyทำงานในลักษณะเดียวกัน: การร้องขอไม่เรียกการร้องขอที่อิงกับเบราว์เซอร์ไปยังทรัพยากรที่โฮสต์บนเซิร์ฟเวอร์บนอินเทอร์เน็ต เราเตอร์จัดการการร้องขอภายใน

หากมีการร้องขอโดยใช้แถบที่อยู่ของเบราว์เซอร์สำหรับwww.contoso.com/Aboutคำขอจะล้มเหลว ไม่มีทรัพยากรดังกล่าวอยู่บนโฮสต์อินเทอร์เน็ตของแอปดังนั้นการตอบสนอง404 - ไม่พบจะถูกส่งคืน

เนื่องจากเบราว์เซอร์ทำการร้องขอไปยังโฮสต์บนอินเทอร์เน็ตสำหรับหน้าฝั่งไคลเอ็นต์เว็บเซิร์ฟเวอร์และบริการโฮสติ้งต้องเขียนคำขอทั้งหมดใหม่สำหรับทรัพยากรที่ไม่ได้อยู่บนเซิร์ฟเวอร์ไปยังหน้าindex.html เมื่อindex.htmlถูกส่งคืนเราเตอร์ Blazor ของแอปจะเข้ามาแทนที่และตอบกลับด้วยทรัพยากรที่ถูกต้อง

เมื่อปรับใช้กับเซิร์ฟเวอร์ IIS คุณสามารถใช้ URL Rewrite Module กับไฟล์web.config ที่เผยแพร่ของแอป สำหรับข้อมูลเพิ่มเติมให้ดูที่ส่วนIIS


บางทีคุณอาจลองเปิดใช้งานการส่งต่อพร็อกซีใน IIS manager-> เซิร์ฟเวอร์โหนด -> แอปพลิเคชันการร้องขอการกำหนดเส้นทางแคช -> พร็อกซี -> เปิดใช้งาน

หากคุณมีเว็บไซต์เพียงแห่งเดียวคุณสามารถเพิ่มเว็บไซต์ไปยังเซิร์ฟเวอร์ฟาร์ม ARR ได้จากนั้นจะสร้างกฎการกำหนดเส้นทางโดยอัตโนมัติ มันจะสะดวกในการตรวจสอบเซิร์ฟเวอร์ส่วนหลังด้วยการตรวจสอบสุขภาพ

คำเตือน ARR นี้ทำให้ 404 ของฉันหรือไม่


เท่าที่ฉันเห็น - บทความนั้นหมุนรอบ Blazor WebAssembly และฉันใช้ฝั่งเซิร์ฟเวอร์ ยิ่งไปกว่านั้น IIS ของฉันกำลังใช้คุณสมบัติการส่งต่อพร็อกซีของ ARR อยู่แล้ว (เช่นนี้เป็นวิธีที่ฉันใช้ทำ reverse proxy ในการตั้งค่า)
Dynde
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.