Score:0

ให้บริการโดเมนย่อยใหม่แบบไดนามิก

ธง pl

ฉันมีบริการ ตัวอย่าง.คอม ที่ต้องอนุญาตให้ผู้ใช้โฮสต์ไฟล์บางไฟล์ในโดเมนย่อยของตนเอง หน้าผู้ใช้-userabc.example.comเช่นเดียวกับ Github ด้วย userabc.github.io.

ปัจจุบันฉันใช้ Apache และทุกครั้งที่ต้องการกำหนดค่าโดเมนหรือโดเมนย่อยใหม่ ฉันต้องสร้างโดเมนใหม่ด้วยตนเอง <VirtualHost>รีสตาร์ทเซิร์ฟเวอร์ Apache เป็นต้น เป็นไปไม่ได้ที่นี่

ตัวอย่าง: หากผู้เข้าชมสร้างบัญชีใหม่ ผู้ใช้ abc (เพิ่มในฐานข้อมูล) วิธีการทำนั้น หน้าผู้ใช้-userabc.example.com มีโดเมนย่อยและให้บริการไฟล์จาก /www/userabc/ หรือเสิร์ฟ http://userpage-userabc.example.com/ กับ /www/main/index.php?user=userabc?

บันทึก: *.example.com มี wildcard A DNS-record เพื่อเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์ของฉันแล้ว

เครื่องมือง่ายๆ ที่มีน้ำหนักเบาในการทำ "การสร้างโดเมนย่อยแบบไดนามิก" คืออะไร (ปัจจุบันฉันใช้ Apache, PHP, Python แต่ฉันสามารถใช้เครื่องมืออื่นได้)

หรือเป็นไปได้ด้วยตัวคนเดียว <VirtualHost> ที่จับซูโดเมนทั้งหมด *.example.com และ RewriteRule รวมถึงโดเมนย่อย?

Appleoddity avatar
ng flag
https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=115522231#content/view/115522231
Appleoddity avatar
ng flag
https://httpd.apache.org/docs/2.4/vhosts/mass.html
Appleoddity avatar
ng flag
ดูเหมือนจะมีหลายวิธีในการบรรลุเป้าหมายนี้ ฉันไม่คิดว่าคุณไม่ได้ค้นคว้าหรือคิดเรื่องนี้มากนัก
pl flag
@Appleoddity ขอบคุณสำหรับความคิดเห็นของคุณเป็นเพราะฉันได้เห็นวิธีการและคำแนะนำต่างๆ มากมาย (เช่น "ใช้ปลั๊กอินนี้", "ย้ายไปที่ nginx", "ใช้เซิร์ฟเวอร์อื่น") ที่ฉันพลาดภาพรวมของมัน ดังนั้นคำถามนี้
Appleoddity avatar
ng flag
นี่คือที่ที่คุณตัดสินใจว่าอะไรดีที่สุดสำหรับคุณและนำไปใช้ ไม่มีใครสามารถตัดสินใจแทนคุณได้ เราไม่รู้เพียงพอเกี่ยวกับกรณีการใช้งานหรือความเชี่ยวชาญทางเทคนิคของคุณ ข่าวดีก็คือมีหลายวิธีในการทำเช่นนี้
pl flag
@Appleoddity หลังจากการทดสอบเพิ่มเติม ในที่สุดฉันก็พบวิธีแก้ปัญหาที่ง่ายที่สุดด้วย Apache + PHP และ VirtualHost หนึ่งเดียว ขอบคุณสำหรับความช่วยเหลือของคุณอีกครั้ง!
Score:1
ธง pl

ดังที่กล่าวไว้ในความคิดเห็น นี่คือข้อมูลอ้างอิงสำหรับ Apache มีหลายวิธีในการดำเนินการ: โฮสติ้งเสมือนจริงจำนวนมากที่กำหนดค่าแบบไดนามิก, โฮสต์เสมือนจำนวนมากแบบไดนามิกพร้อม mod_rewrite.

ทางออกที่ง่ายที่สุดที่ฉันพบหลังจากการทดสอบอีกสองสามครั้งคือ: หนึ่งเดียว <VirtualHost>

<VirtualHost *:80>
  ServerName example.com
  ServerAlias *.example.com
  DocumentRoot /www/example
  <Directory />
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

ด้วยไวด์การ์ดนี้ นามแฝงเซิร์ฟเวอร์.

ด้วย .htaccess ที่มี

RewriteEngine เปิดอยู่
RewriteRule ^(.*)$ index.php [QSA,L]

จากนั้นเราสามารถกำหนดเส้นทางทั้งหมดสำหรับผู้ใช้แต่ละคนผ่าน PHP:

<?php
$host = $_SERVER['HTTP_HOST'];
$sname = $_SERVER['SERVER_NAME'];
// parse the subdomain of $host or $sname and deliver 
// the content accordingly (using the database)
?>

ประโยชน์: ยังใช้งานได้หากผู้ใช้ขั้นสุดท้ายกำลังใช้งานอยู่ โดเมนที่กำหนดเองของเขาเอง ด้วยระเบียน CNAME DNS ตัวอย่าง:

www.userabc.com CNAME userpage-userabc.example.com

จากนั้นใน PHP $โฮสต์ จะแสดงที่นี่ www.userabc.com. หากข้อมูลโดเมนที่กำหนดเองนี้อยู่ในฐานข้อมูล เราสามารถให้บริการเนื้อหาตามนั้น แม้ว่าผู้ใช้จะใช้ a โดเมนที่กำหนดเอง.

หมายเหตุ: ในกรณีที่ผู้ใช้ใช้โดเมนที่กำหนดเองกับ CNAME สิ่งนี้มีประโยชน์ในการพิจารณาว่า VirtualHost เริ่มต้นใดที่จะใช้เมื่อคำขอมาพร้อมกับโฮสต์ที่ไม่ได้อยู่ในรายการ ชื่อเซิร์ฟเวอร์ คำสั่ง: Apache เริ่มต้น VirtualHost.

Torin avatar
in flag
หากต้องการเพิ่ม คุณไม่ควรเพิ่มระเบียน apex CNAME เช่น `userabc.com หน้าผู้ใช้ CNAME-userabc.example.com.` DNS มีมากกว่า `A/AAAA` และสิ่งเหล่านี้จะเป็น CNAME ด้วย (ดู https://www.isc.org/blogs/cname-at-the-apex-of-a-zone/)
pl flag
ขอบคุณ @Torin ถูกต้อง ฉันแก้ไขเป็น `www.userabc.com CNAME ...`. Btw ผู้ที่ใช้โดเมนที่กำหนดเองกับ "Github Pages" หรือบริการโฮสติ้งที่คล้ายกันซึ่งทำงานร่วมกับโดเมนที่กำหนดเองจะทำอย่างไร [เอกสาร GH Pages](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your -github-pages-site) บอกว่าเราควร `www.johndoe.com. CNAME johndoe.github.io.` แต่จะทำอย่างไรให้ `http://johndoe.com` ให้บริการเนื้อหาเดียวกันกับ `http://www.johndoe.com` (หากเราไม่สามารถ CNAME `johndoe.com.` ได้)
Torin avatar
in flag
ซอฟต์แวร์ DNS บางตัวมีบันทึกเสมือน `CNAME` (บางครั้งเรียกว่า `ALIAS` หรือ `ANAME`) ซึ่งจะส่งคืนบันทึก `A/AAAA` ของชื่ออื่นนั้น หากซอฟต์แวร์/ผู้ให้บริการ DNS ของคุณอนุญาตให้คุณใช้ระเบียนประเภทดังกล่าวได้ ก็ไม่เป็นไร แต่มิฉะนั้น คุณจะต้องเพิ่มระเบียน `A/AAAA` ด้วยตนเองและอัปเดตเมื่อมีการเปลี่ยนแปลง [เอกสาร GitHub](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your- github-pages-site#configuring-an-apex-domain) กล่าวถึงระเบียน IPv4/6 ที่คุณต้องเพิ่ม
pl flag
ขอบคุณ @Torin! ในตัวอย่างของฉัน มันควรจะเป็น `www.johndoe.com CNAME johndoe.github.io.` และ `johndoe.com. ALIAS johndoe.github.io.` หรืออย่างหลังคือ `johndoe.com. ALIAS www.johndoe.com.`?
pl flag
สิ่งสุดท้าย @Torin: หาก ALIAS/ANAME ไม่พร้อมใช้งานโดยผู้ให้บริการ DNS เราจะใช้ DNAME (ซึ่งดูเหมือนมี) ได้ไหม
Torin avatar
in flag
`DNAME` เหมือนกับ `CNAME` แต่สำหรับชื่อย่อย จึงอาจไม่ใช่สิ่งที่คุณต้องการเช่นกัน หากคุณกำลังสร้างหน้า GitHub คุณอาจต้องการเพิ่มบันทึก `A` สี่รายการและบันทึก `AAAA` สี่รายการที่กล่าวถึงในเอกสาร มันเจ็บนะ แต่มันก็เป็นอย่างนั้น :(

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา