Puncte:0

Serviți dinamic subdomenii noi

drapel pl

Am un serviciu exemplu.com care trebuie să permită utilizatorilor să găzduiască câteva fișiere în propriul lor subdomeniu userpage-userabc.example.com, la fel cum face Github cu userabc.github.io.

În prezent folosesc Apache și de fiecare dată când vreau să configurez un nou domeniu sau subdomeniu, trebuie să creez manual un nou domeniu. <VirtualHost>, reporniți serverul Apache etc. Acest lucru nu este posibil aici.

Exemplu: dacă un vizitator creează un cont nou userabc (adăugat într-o bază de date), cum se face userpage-userabc.example.com subdomeniul este disponibil și deservește automat fișierele din /www/userabc/ sau servirea http://userpage-userabc.example.com/ cu /www/main/index.php?user=userabc?

Notă: *.example.com are deja un wildcard A DNS-record pentru a redirecționa către serverul meu

Care este un instrument simplu și ușor pentru a face această „creare dinamică a subdomeniului”? (În prezent folosesc Apache, PHP, Python, dar pot folosi și alte instrumente).

Sau este posibil cu un singur <VirtualHost> care prinde toate sudomeniile *.example.com și un RewriteRule care include subdomeniul?

Appleoddity avatar
drapel ng
https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=115522231#content/view/115522231
Appleoddity avatar
drapel ng
https://httpd.apache.org/docs/2.4/vhosts/mass.html
Appleoddity avatar
drapel ng
Se pare că există mai multe modalități de a realiza acest lucru. Nu cred că ai cercetat prea mult sau te-ai gândit la asta.
drapel pl
@Appleoddity Mulțumesc pentru comentariile tale.Tocmai pentru că am văzut atât de multe metode și sfaturi diferite (cum ar fi „Folosește acest plugin”, „Mută la nginx”, „Folosește alt server”), îmi lipsește imaginea de ansamblu a acesteia, deci această întrebare.
Appleoddity avatar
drapel ng
Aici decideți ce funcționează cel mai bine pentru dvs. și îl implementați. Nimeni nu poate lua această decizie pentru tine. Pur și simplu nu știm suficient despre cazul dvs. de utilizare sau despre expertiza dvs. tehnică. Vestea bună este că există o mulțime de moduri de a face acest lucru.
drapel pl
@Appleoddity După teste suplimentare, am găsit în sfârșit ceea ce este probabil cea mai ușoară soluție cu Apache + PHP și un singur VirtualHost. Mulțumesc din nou pentru ajutor!
Puncte:1
drapel pl

După cum s-a menționat într-un comentariu, aici sunt referințe pentru Apache, există mai multe moduri de a face acest lucru: Găzduire virtuală în masă configurată dinamic, Gazde virtuale de masă dinamice cu mod_rewrite.

Cea mai simplă soluție pe care am găsit-o după alte câteva teste este: una singură <VirtualHost>

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

cu acest wildcard ServerAlias.

Cu un .htaccess conținând

RewriteEngine activat
RewriteRule ^(.*)$ index.php [QSA,L]

apoi putem face toată rutarea pentru fiecare utilizator prin 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)
?>

Beneficiu: funcționează și dacă utilizatorul final folosește propriul său domeniu personalizat cu o înregistrare CNAME DNS. Exemplu:

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

Apoi, în PHP, $gazdă va arata aici www.userabc.com. Dacă aceste informații de domeniu personalizate se află undeva în baza de date, putem difuza conținutul în consecință, chiar dacă utilizatorul folosește un domeniu personalizat.

Notă: în cazul în care utilizatorii își folosesc domeniul personalizat cu CNAME, acest lucru este util pentru a determina care este VirtualHost implicit de utilizat atunci când o solicitare vine cu o gazdă care nu este listată în Numele serverului directive: VirtualHost implicit Apache.

Torin avatar
drapel in
Doar pentru a adăuga, nu ar trebui să adăugați înregistrări CNAME apex precum `userabc.com. CNAME userpage-userabc.example.com.`. DNS deține mai mult decât „A/AAAA” și acestea vor fi, de asemenea, CNAME (a se vedea https://www.isc.org/blogs/cname-at-the-apex-of-a-zone/).
drapel pl
Mulțumesc @Torin, corect, am modificat la `www.userabc.com. CNAME ...`. Btw, cum fac oamenii care folosesc un domeniu personalizat cu „Pagini Github” sau cu un serviciu similar de găzduire care funcționează cu un domeniu personalizat? [Doc. Pagini GH](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your -github-pages-site) spune că ar trebui să `www.johndoe.com. CNAME johndoe.github.io.`. Dar atunci cum să faci că `http://johndoe.com` servește același conținut ca `http://www.johndoe.com`? (dacă nu putem CNAME `johndoe.com.`)
Torin avatar
drapel in
Unele software DNS au o înregistrare virtuală asemănătoare `CNAME` (uneori numită `ALIAS` sau `ANAME`) care va returna înregistrări `A/AAAA` cu acel alt nume. Dacă software-ul/furnizorul dvs. DNS vă permite să utilizați aceste tipuri de înregistrări, ar fi bine, dar în caz contrar va trebui să adăugați manual înregistrările „A/AAAA” și să le actualizați atunci când se schimbă. [GitHub docs](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) menționați despre înregistrările IPv4/6 pe care ar trebui să le adăugați.
drapel pl
Mulțumesc @Torin! Deci, în exemplul meu, ar trebui să fie `www.johndoe.com. CNAME johndoe.github.io.` și `johndoe.com. ALIAS johndoe.github.io.` sau acesta din urmă este `johndoe.com. ALIAS www.johndoe.com.`?
drapel pl
Ultimul lucru @Torin: dacă ALIAS/ANAME nu sunt disponibile de către furnizorul DNS, putem folosi DNAME (care pare disponibil)?
Torin avatar
drapel in
`DNAME` este ca `CNAME`, dar pentru subnume, deci probabil că nu este ceea ce doriți. Dacă faceți paginile GitHub, probabil că veți dori să adăugați cele patru înregistrări „A” și cele patru înregistrări „AAAA” care sunt menționate în documente. E o durere, dar asa este :(

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.