ฉันมี nginx และโดเมนย่อยต่างกัน:
a.mydomain.com
b.mydomain.com
c.mydomain.com
Nginx มีกฎ 4 ข้อ:
1) เขียนกฎใหม่:
server {
listen 80
server_name gl.udesk.org;
root /nowhere;
rewrite ^ https://a.mydomain.com$request_uri permanent;
}
2) กฎ https:
server {
listen 443;
server_name a.mydomain.com;
root /home/a/a/public;
ssl on;
ssl_certificate conf.d/ssl/a.crt;
ssl_certificate_key conf.d/ssl/a.key;
ssl_protocols ...
ssl_ciphers ...
ssl_prefer_server_ciphers on;
location ...
}
3) กฎเริ่มต้น http:
server {
listen 80 default_server;
return 444;
}
4) กฎเริ่มต้น https:
server {
listen 443 default_server;
return 444;
}
ดังนั้นถ้าฉันเริ่ม nginx และ:
- ถ้าฉันไปที่เบราว์เซอร์เพื่อhttp://a.mydomain.comจะเปลี่ยนเส้นทางไปที่ https://a.mydomain.comและจากนั้นจะส่งคืนข้อผิดพลาด 107 (สุทธิ :: ERR_SSL_PROTOCOL_ERROR): ข้อผิดพลาดของโปรโตคอล SSL
- ถ้าฉันไปในเบราว์เซอร์เพื่อhttps://b.mydomain.comฉันคาดว่าจะส่งคืนข้อผิดพลาด 444 กลับ แต่จะส่งกลับข้อผิดพลาด 107 เดียวกัน (สุทธิ :: ERR_SSL_PROTOCOL_ERROR): ข้อผิดพลาดของโปรโตคอล SSL แทน
- ดังนั้นสำหรับการลงทะเบียนทั้งหมดโดยผู้ให้บริการ DNS CNAME (เช่น a, b, c)
- http- เวอร์ชันทั้งหมด (เช่นกฎ 3 -) ทำงานตามที่คาดไว้:
- http://a.mydomain.comเปลี่ยนเส้นทางไปที่ https: // version
- http://b.mydomain.comและhttp://c.mydomain.comกำลังส่งคืนข้อผิดพลาด 444 กลับมาตามที่กำหนดค่า
ดังนั้นทำไมกฎ https ในnginxจึงยุ่งยากในการกำหนดค่าและฉันควรกำหนดค่าให้เหมาะสมเพื่อให้มีพฤติกรรมเช่นเดียวกับรุ่น http หรือไม่
ปรับปรุง:
การสร้างใบรับรองใหม่และการเพิ่ม:
ssl on;
ssl_certificate conf.d/ssl/default.crt;
ssl_certificate_key conf.d/ssl/default.key;
ใช้งานได้ แต่ฉันจะมีทางออกโดยไม่ต้องใช้ใบรับรอง SSL ใด ๆ เพียงรีเซ็ตการเชื่อมต่อทั้งหมดสำหรับโดเมนย่อย https (พอร์ต 443) ทั้งหมดยกเว้นhttps://a.mydomain.com โดยไม่ต้องให้ใบรับรอง
nginx