ฉันมีอินสแตนซ์ ERDDAP ที่ทำงานบนเซิร์ฟเวอร์ Tomcat ที่อยู่เบื้องหลังพร็อกซีย้อนกลับ NGINX
สภาพแวดล้อมทั้งหมดอยู่บน Kubernetes โดย RP เป็นตัวควบคุมขาเข้า NGINX ที่ส่งต่อคำขอบนพอร์ต 443 ไปยังอินสแตนซ์บริการบนพอร์ต 8080 ที่เชื่อมโยงกับคอนเทนเนอร์ที่ Tomcat (และอินสแตนซ์ ERDDAP) ทำงาน
ฉันพบบทช่วยสอนนี้ (https://www.n0r1sk.com/post/nginx-reverse-proxy-with-ssl-offloading-and-apache-tomcat-backends/) ที่แสดงวิธีกำหนดค่า server.xml สำหรับ Tomcat หลัง reverse proxy ดังนั้น HTTP Connector สำหรับเซิร์ฟเวอร์ Tomcat ของฉันคือ:
<Connector server="Apache" secure="true" port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
proxyPort="443"
relaxedPathChars='[]|'
relaxedQueryChars='[]:|{}^\`"<>' />
ด้วยการกำหนดค่านี้ เมื่อฉันขอ URL https://erddap.ve.ismar.cnr.it/erddap:
รับ /erddap/ HTTP/1.1
โฮสต์: erddap.ve.ismar.cnr.it
X-Request-ID: 484e514b4038614090bf34061e9287f3
X-Real-IP: 10.104.235.192
X-ส่งต่อ-สำหรับ: 10.104.235.192
X-ส่งต่อโฮสต์: erddap.ve.ismar.cnr.it
X-Forwarded-Port: 443
X-ส่งต่อโปรโต: https
X-Scheme: https
...
ฉันได้รับคำตอบต่อไปนี้:
HTTP/1.1 302
เข้มงวด-การขนส่ง-ความปลอดภัย: max-age=0
ตัวเลือก X-Frame: SAMEORIGIN
X-Content-Type-Options: ไร้สาระ
X-XSS-การป้องกัน: 1; โหมด = บล็อก
แตกต่างกัน: แหล่งกำเนิด
Access-Control-Allow-Credentials: จริง
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-
ข้อมูลรับรอง
ที่ตั้ง: https://erddap.ve.ismar.cnr.it/erddap/index.html
ความยาวเนื้อหา: 0
วันที่: พฤ. 24 ก.พ. 2565 17:55:41 GMT
เซิร์ฟเวอร์: อาปาเช่
และทุกอย่างทำงานได้ดีกับการส่งต่อพร็อกซีและการตอบกลับ Tomcat แบ็กเอนด์
แต่ถ้าฉันเพิ่มการกำหนดค่าตัวเชื่อมต่อ Tomcat เป็นพารามิเตอร์ scheme="https" ตามที่แนะนำในบทช่วยสอนที่กล่าวถึงข้างต้น:
<Connector server="Apache" secure="true" port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
proxyPort="443"
scheme="https"
relaxedPathChars='[]|'
relaxedQueryChars='[]:|{}^\`"<>' />
คำขอเดียวกันนี้ล้มเหลวและฉันได้รับคำตอบต่อไปนี้จาก Tomcat:
HTTP/1.1 302
เข้มงวด-การขนส่ง-ความปลอดภัย: max-age=0
ตัวเลือก X-Frame: SAMEORIGIN
X-Content-Type-Options: ไร้สาระ
X-XSS-การป้องกัน: 1; โหมด = บล็อก
แตกต่างกัน: แหล่งกำเนิด
Access-Control-Allow-Credentials: จริง
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-
ข้อมูลรับรอง
ตำแหน่ง: (ไม่ระบุ)/erddap/index.html
ความยาวเนื้อหา: 0
วันที่: พฤ. 24 ก.พ. 2565 18:02:44 GMT
เซิร์ฟเวอร์: อาปาเช่
คุณสามารถสังเกตว่าส่วนหัว "ตำแหน่งที่ตั้ง:" ผิดกับคำนำหน้า "(ไม่ระบุ)" โดยสิ้นเชิง และทำให้ไคลเอ็นต์ส่งคำขอ URL ตามมา https://erddap.ve.ismar.cnr.it/erddap/(not%20specified)/erddap/index.html (และแน่นอนว่าคำขอล้มเหลว)
ทุกคนสามารถช่วยฉันระบุจุดที่อาจเป็นปัญหาในการกำหนดค่า Tomcat ของฉันได้ไหม
เหตุใดพฤติกรรมจึงแตกต่างกันเพียงแค่เพิ่มพารามิเตอร์ scheme="https" ใน server.xml
ขอบคุณมากล่วงหน้า
ปิแอร์เปาโล