อัปเดต: ฉันได้เพิ่มความพยายามครั้งที่ 2 ที่ด้านล่างของโพสต์นี้ มัน "ใช้งานได้" แต่ฉันต้องการให้ความคิดดั้งเดิมของฉันทำงาน
ฉันพยายามเปลี่ยนเส้นทางคำขอ https สำหรับโดเมนหนึ่งไปยังอีกโดเมนหนึ่งผ่านเซิร์ฟเวอร์เปลี่ยนเส้นทาง
ฉันจะใช้ https://website.com
, https://website2.com
, และ https://myredirectserver.com
ตัวอย่าง.
ฉันมีใบรับรอง SSL ที่ซื้อสำหรับ เว็บไซต์.คอม
และ DNS เป็น CNAMED ที่ www
ถึง myredirectserver.com
. นอกจากนี้ยังมีใบรับรอง SSL สำหรับ mywebsite2.com
และขณะนี้อยู่บนเซิร์ฟเวอร์ ทั้งหมดเป็นโดเมนแบบสแตนด์อโลน
myredirectserver.com
มี Traffic Management A Records สองรายการ (ความพร้อมใช้งานสูง) ที่ชี้ไปยังที่อยู่ IP สองแห่ง
ที่อยู่ IP ทั้งสองนั้นเป็น NAT ในไฟร์วอลล์ไปยังพร็อกซีเซิร์ฟเวอร์
บนพร็อกซีเซิร์ฟเวอร์นั้นมี Docker Container ซึ่งรัน Alpine/Nginx
Dockerfile สำหรับคอนเทนเนอร์:
จาก nginx:1.17.7-อัลไพน์
RUN apk เพิ่ม --no-cache tzdata
ENV TZ อเมริกา/ชิคาโก
RUN rm /etc/nginx/conf.d/default.conf
คัดลอก myredirectserver.com.conf /etc/nginx/conf.d/myredirectserver.com.conf
เรียกใช้ rm /etc/nginx/nginx.conf
คัดลอก nginx.conf /etc/nginx/nginx.conf
คัดลอก myredirectserver.com.crt /etc/nginx/ssl/myredirectserver.com.crt
คัดลอก myredirectserver.com.key /etc/nginx/ssl/myredirectserver.com.key
คัดลอก proxy_params /etc/nginx/proxy_params
เดอะ เรียกใช้นักเทียบท่า
ส่วนที่จะเริ่มต้น (มีไดรฟ์ข้อมูลเมาต์สำหรับการสร้างไฟล์การกำหนดค่าแบบไดนามิกผ่านโค้ดส่วนหลัง):
นักเทียบท่าเรียกใช้ --name=myredirectserver --restart always --log-opt max-size=50m --log-opt max-file=5 -d -v /etc/nginx/myredirectserverBuild:/etc/nginx/myredirectserverBuild -v /etc/nginx/myredirectserverSSL:/etc/nginx/myredirectserverSSL -p 8224:443 -p 8223:80 myredirectserver
ใน Docker Container นั้น ไฟล์กำหนดค่า Nginx จะอยู่ใน /etc/nginx/conf.d/myredirectserver.com.conf
:
#ฉันไม่รู้ว่าสิ่งนี้ถูกต้องสำหรับสิ่งที่ฉันต้องการหรือไม่
เซิร์ฟเวอร์ {
ฟัง 443 ssl;
server_name myredirectserver.com www.myredirectserver.com;
ssl_certificate /etc/nginx/ssl/myredirectserver.com.crt;
ssl_certificate_key /etc/nginx/ssl/myredirectserver.com.key;
}
เซิร์ฟเวอร์ {
ฟัง 80;
server_name myredirectserver.com www.myredirectserver.com;
ส่งคืน 301 https://www.myredirectserver.com$request_uri;
}
รวม /etc/nginx/myredirectserverBuild/*.conf;
ไฟล์รวมที่ส่วนท้ายมีไฟล์ ต้นฉบับ โดเมนที่ขอ, mywebsite.com.conf
:
## www.mywebsite.com โฮสต์เสมือน
เซิร์ฟเวอร์ {
ฟัง 443 ssl;
ชื่อเซิร์ฟเวอร์ mywebsite.com www.mywebsite.com;
ssl_certificate /etc/nginx/myredirectwebsiteSSL/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/myredirectwebsiteSSL/mywebsite.com.key;
}
เซิร์ฟเวอร์ {
ฟัง 80;
ชื่อเซิร์ฟเวอร์ mywebsite.com www.mywebsite.com;
กลับ 301 https://www.mywebsite2.com$request_uri; <--- การเปลี่ยนเส้นทาง
}
เดอะ เว็บไซต์2.com
โดเมนอยู่บนเซิร์ฟเวอร์โฮสต์ และฉันสามารถขอโดเมนนั้นได้ตามปกติ ฉันไม่สามารถเข้าใจได้ว่าฉันทำอะไรผิดไป ฉันรู้สึกเหมือนอยู่ในการกำหนดค่า Nginx ของฉัน แต่ไวยากรณ์ Nginx ของฉันไม่ได้ดีที่สุด
ของฉันทำไม กลับ 301
ไม่ทำงานและเปลี่ยนเส้นทางฉันไปยังโดเมน?
หมายเหตุสองสามข้อระหว่างการแก้ไขปัญหา:
wget 0.0.0.0:8223
ผลตอบแทน:
--2021-07-26 23:44:19-- http://0.0.0.0:8223/
กำลังเชื่อมต่อกับ 0.0.0.0:8223... เชื่อมต่อแล้ว
ส่งคำขอ HTTP แล้ว กำลังรอการตอบกลับ... 301 ย้ายอย่างถาวร
ที่ตั้ง: https://www.mywebsite2.com/ [กำลังติดตาม]
--2021-07-25 23:44:19-- https://www.mywebsite2.com/
กำลังแก้ไข www.mywebsite2.com (www.mywebsite2.com)... XX.XXX.XXX.XXX
กำลังเชื่อมต่อกับ www.mywebsite2.com (www.mywebsite2.com)|XX.XXX.XXX.XXX|:443... เชื่อมต่อแล้ว
ส่งคำขอ HTTP แล้ว กำลังรอการตอบกลับ... 200 ตกลง
ความยาว: ไม่ระบุ [ข้อความ/html]
กำลังบันทึกไปที่: âindex.htmlâ
index.html [ <=> ] 37.56K 231KB/s ใน 0.2 วินาที
2021-07-25 23:44:20 (231 KB/s) - บันทึก âindex.htmlâ [38461]
curl -- แก้ไข www.myredirectserver.com:8223:0.0.0.0 http://www.myredirectserver.com/
ส่งคืนการหมดเวลาเช่นเดียวกับเบราว์เซอร์
ขณะอยู่บนเครือข่ายท้องถิ่น ให้ป้อน IP ของคอนเทนเนอร์ Docker ในแถบที่อยู่ (192.168.69.140:8223
) พาฉันไปที่ https://www.website2.com
.
กำลังเข้า https://192.168.69.140:8224
นำฉันไปที่หน้าคำเตือนความปลอดภัย คลิก ดำเนินดำเนินการต่อ
และมันทำให้ฉัน 404
.
ฉันรู้สึกสับสนเพราะไม่รู้วิธีจัดการกับคำขอเมื่อคำขอมาถึง IP ของ CNAME myredirectserver.com
. ฉันจะบอก Nginx ให้ดูโดเมนที่ร้องขอดั้งเดิมได้อย่างไร เว็บไซต์.คอม
?
อัปเดต (พยายามครั้งที่ 2):
ฉันหยุดคอนเทนเนอร์ Docker และเปลี่ยนไฟล์ CNAME
ที่ www
ระดับใน DNS เพื่อชี้ไปที่ Highly Available IP ที่มีอยู่แล้ว ฉันจะโทรหามัน เซิฟเวอร์ปลายทาง.net
. โดยพื้นฐานแล้ว:
`mywebsite.com`
|
|---> CNAME 'destinationsserver.net'
`destinationserver.net`
|
|----> A XX.XXX.XXX.XXX --> ไฟร์วอลล์ --> พร็อกซี
|----> A XX.XXX.XXX.XXX --> ไฟร์วอลล์ --> พร็อกซี
บน เซิฟเวอร์ปลายทาง.net
เซิร์ฟเวอร์ ฉันมีสิ่งต่อไปนี้ในการกำหนดค่า Nginx สำหรับ เว็บไซต์.คอม
:
# ## www.mywebsite.com โฮสต์เสมือน
เซิร์ฟเวอร์ {
ฟัง 8222 ssl;
ชื่อเซิร์ฟเวอร์ mywebsite.com www.mywebsite.com;
ssl_certificate /etc/nginx/ssl/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/ssl/mywebsite.com.key;
ส่งคืน 301 http://www.mywebsite2.com$request_uri;
}
เซิร์ฟเวอร์ {
ฟัง 8221;
ชื่อเซิร์ฟเวอร์ mywebsite.com www.mywebsite.com;
ส่งคืน 301 https://www.mywebsite2$request_uri;
}
ดังที่ฉันได้ระบุไว้ใน 'อัปเดต' ในบรรทัดแรกของคำถาม นี่คือ "การทำงาน" แต่จะเป็นการดีหากจัดการการเปลี่ยนเส้นทางเหล่านี้ในพื้นที่แยกต่างหาก ดังนั้นแนวคิดของคอนเทนเนอร์ Docker