IIS มีหลายเว็บไซต์:

  • domain1.com
  • a.domain2.com
  • b.domain2.com

นอกจากนี้ยังมี TomCat ที่ทำงานอยู่

localhost:8087

ความท้าทายคือวิธีเปิดเผย TomCat ภายนอกเป็น

b.domain2.com

ฉันทำอะไรลงไป:

  • เปิดใช้งานพร็อกซีใน ARR ใน IIS
  • เพิ่มกฎการเขียน Reverse Proxy URL Rewrite บน b.domain2.com

    <rewrite>
        <rules>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                <match url="(.*)" />
                <action type="Rewrite" url="http://localhost:8087/{R:1}" />
            </rule>
          </rules>
        <outboundRules>
            <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" >
                <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8087/(.*)" />
                <action type="Rewrite" value="http{R:1}://femiscan.a2itsolutionsllc.com/{R:2}" />
            </rule>
    
            <preConditions>
                <preCondition name="ResponseIsHtml1">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
            </preConditions>
        </outboundRules>
    </rewrite>
    

ฉันเห็นอะไร:

ในพื้นที่ ถ้าฉันนำทางไปยัง

http://b.domain2.com 

เบราว์เซอร์ของฉันแสดงเว็บไซต์ TomCat เป็น

http://localhost:8087 

(ทำไม?)

ภายนอกถ้าฉันนำทางใน Chrome ไปที่

http://b.domain2.com 

มันพยายามจะลอดอุโมงค์ไปที่

http://localhost:8087

ถ้าฉันนำทางใน IE มันจะส่งคืนข้อผิดพลาด 500 (Fiddler: HTTP/1.1 500 URL Rewrite Module Error)

คำถาม: ฉันทำอะไรผิด? สามารถทำได้และอย่างไร?

answer

การดำเนินการของคุณถูกตั้งค่าเป็น Rewrite ดังนั้นจึงเป็นการเขียน URL ใหม่

ในตัวจัดการ IIS:

  • คลิกขวาที่เซิร์ฟเวอร์ฟาร์ม คลิก "สร้างเซิร์ฟเวอร์ฟาร์ม" ตั้งชื่อให้มันหน่อย
  • ใส่ชื่อโดเมนที่มีคุณสมบัติครบถ้วนให้กับอินสแตนซ์ Tomcat ของคุณในฟิลด์ "ชื่อเซิร์ฟเวอร์หรือที่อยู่"
  • คลิก "การตั้งค่าขั้นสูง..." ขยาย "applicationRequestRouting" และเปลี่ยน httpPort เป็น 8087
  • คลิก "ใช่" เมื่อได้รับแจ้งให้สร้างกฎการเขียนซ้ำ
  • คลิกฟาร์มที่สร้างขึ้นใหม่ภายใต้ "Server Farms" ในบานหน้าต่างด้านซ้ายของหน้าต่าง
  • เปิด "กฎการกำหนดเส้นทาง" ในหน้ามุมมองคุณสมบัติของฟาร์มเซิร์ฟเวอร์
  • คลิกลิงก์ "เขียน URL ใหม่..." ที่บานหน้าต่างด้านขวา
  • ลบกฎการเขียน Tomcat ที่พยายามเก่าออก
  • คลิก "เพิ่มกฎ..." ที่ด้านบนของบานหน้าต่างด้านขวา เลือก "กฎว่าง"
  • ตั้งชื่อให้มัน
  • ในบานหน้าต่าง Match URL:
    • URL ที่ขอ: Matches the Pattern
    • โดยใช้: Regular Expressions
    • ลวดลาย: *
  • ขยายบานหน้าต่างเงื่อนไข คลิก "เพิ่ม"
    • อินพุตเงื่อนไข: {HTTP_HOST}
    • ตรวจสอบว่าสตริงอินพุต: Matches the pattern
    • ลวดลาย: b.domain2.com
    • ตรวจสอบ Ignore Case
  • ในบานหน้าต่างการดำเนินการ:
    • ประเภทการดำเนินการ: Route to Server Farm
    • โครงการ: http://
    • ฟาร์มเซิร์ฟเวอร์: (the name of your server farm)
    • เส้นทาง: {R:1}( หมายเหตุ:อาจต้องมีการแก้ไขบ้าง แต่การตัดสินจากตัวอย่างของคุณน่าจะใช้ได้)
  • คลิก "ใช้" ในบานหน้าต่างด้านขวาและ