Điểm:0

Phục vụ tên miền phụ mới một cách linh hoạt

lá cờ pl

tôi có một dịch vụ ví dụ.com cần cho phép người dùng lưu trữ một số tệp trong tên miền phụ của riêng họ userpage-userabc.example.com, tương tự như Github với userabc.github.io.

Tôi hiện đang sử dụng Apache và mỗi lần tôi muốn định cấu hình tên miền hoặc tên miền phụ mới, tôi phải tạo một tên miền mới theo cách thủ công <VirtualHost>, khởi động lại máy chủ Apache, v.v. Điều này là không thể ở đây.

Ví dụ: nếu khách truy cập tạo tài khoản mới người dùng (được thêm vào cơ sở dữ liệu), làm thế nào để biến nó thành userpage-userabc.example.com tên miền phụ khả dụng và tự động phục vụ các tệp từ /www/userabc/ hoặc phục vụ http://userpage-userabc.example.com/ với /www/main/index.php?user=userabc?

Ghi chú: *.example.com đã có ký tự đại diện Một bản ghi DNS để chuyển hướng đến máy chủ của tôi

Công cụ nhẹ đơn giản để thực hiện việc "tạo tên miền phụ động" này là gì? (Tôi hiện đang sử dụng Apache, PHP, Python, nhưng tôi có thể sử dụng các công cụ khác).

Hoặc là có thể với một <VirtualHost> bắt tất cả các tên miền sud *.example.com và một RewriteRule bao gồm tên miền phụ?

Appleoddity avatar
lá cờ ng
https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=115522231#content/view/115522231
Appleoddity avatar
lá cờ ng
https://httpd.Apache.org/docs/2.4/vhosts/mass.html
Appleoddity avatar
lá cờ ng
Có vẻ là một số cách để thực hiện điều này. Tôi không nghĩ bạn đã nghiên cứu hay suy nghĩ nhiều về vấn đề này.
lá cờ pl
@Appleoddity Cảm ơn ý kiến ​​​​của bạn.Chính vì tôi đã thấy rất nhiều phương pháp và lời khuyên khác nhau (chẳng hạn như "Sử dụng plugin này", "Chuyển sang nginx", "Sử dụng máy chủ khác") nên tôi bỏ lỡ bức tranh toàn cảnh về nó, vì vậy tôi có câu hỏi này.
Appleoddity avatar
lá cờ ng
Đây là nơi bạn quyết định điều gì phù hợp nhất với mình và thực hiện nó. Không ai có thể đưa ra quyết định này cho bạn. Chúng tôi không biết đủ về trường hợp sử dụng hoặc chuyên môn kỹ thuật của bạn. Tin tốt là có rất nhiều cách để làm điều này.
lá cờ pl
@Appleoddity Sau khi thử nghiệm thêm, cuối cùng tôi đã tìm thấy giải pháp có lẽ là dễ nhất với Apache + PHP và một Virtualhost duy nhất. Cảm ơn vì sự giúp đỡ của bạn lần nữa!
Điểm:1
lá cờ pl

Như đã đề cập trong một nhận xét, đây là tài liệu tham khảo cho Apache, có nhiều cách để thực hiện: Lưu trữ ảo hàng loạt được định cấu hình động, Máy chủ ảo hàng loạt động với mod_rewrite.

Giải pháp đơn giản nhất mà tôi đã tìm thấy sau một vài thử nghiệm nữa là: một <VirtualHost>

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

với ký tự đại diện này Bí danh máy chủ.

Với một .htaccess có chứa

RewriteEngine bật
RewriteRule ^(.*)$ index.php [QSA,L]

sau đó chúng tôi có thể thực hiện tất cả định tuyến cho từng người dùng thông qua 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)
?>

Lợi ích: nó cũng hoạt động nếu người dùng cuối cùng đang sử dụng miền tùy chỉnh của riêng mình với bản ghi CNAME DNS. Ví dụ:

www.userabc.com Trang người dùng CNAME-userabc.example.com

Sau đó, trong PHP, máy chủ $ sẽ ở đây hiển thị www.userabc.com. Nếu thông tin miền tùy chỉnh này nằm ở đâu đó trong cơ sở dữ liệu, chúng tôi có thể cung cấp nội dung tương ứng, ngay cả khi người dùng đang sử dụng một tên miền tùy chọn.

Lưu ý: trong trường hợp người dùng sử dụng miền tùy chỉnh của họ với CNAME, điều này hữu ích để xác định Virtualhost mặc định sẽ sử dụng khi yêu cầu đi kèm với máy chủ lưu trữ không được liệt kê trong danh sách Tên máy chủ chỉ thị: Máy chủ ảo mặc định của Apache.

Torin avatar
lá cờ in
Để bổ sung, bạn không nên thêm các bản ghi CNAME apex như `userabc.com. Trang người dùng CNAME-userabc.example.com.`. DNS chứa nhiều hơn chỉ `A/AAAA` và những thứ đó cũng sẽ là CNAME'd (xem https://www.isc.org/blogs/cname-at-the-apex-of-a-zone/).
lá cờ pl
Cảm ơn @Torin, chính xác, tôi đã sửa đổi thành `www.userabc.com. CNAME ...`. Nhân tiện, những người sử dụng miền tùy chỉnh với "Trang Github" hoặc với dịch vụ lưu trữ tương tự hoạt động với miền tùy chỉnh sẽ làm như thế nào? [Tài liệu trang GH](https://docs.github.com/en/pages/conforming-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your -github-pages-site) nói rằng chúng ta nên `www.johndoe.com. CNAME johndoe.github.io.`. Nhưng sau đó làm thế nào để `http://johndoe.com` phục vụ cùng một nội dung như `http://www.johndoe.com`? (nếu chúng tôi không thể CNAME tên `johndoe.com.`)
Torin avatar
lá cờ in
Một số phần mềm DNS có bản ghi ảo giống như `CNAME` (đôi khi được gọi là `ALIAS` hoặc `ANAME`) sẽ trả về các bản ghi `A/AAAA` của tên khác đó. Nếu phần mềm/nhà cung cấp DNS của bạn cho phép bạn sử dụng các loại bản ghi đó thì chúng sẽ ổn, nhưng nếu không thì bạn cần phải thêm các bản ghi `A/AAAA` theo cách thủ công và cập nhật chúng khi chúng thay đổi. [Tài liệu GitHub](https://docs.github.com/en/pages/conforming-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your- github-pages-site#conforming-an-apex-domain) có đề cập đến các bản ghi IPv4/6 mà bạn cần thêm.
lá cờ pl
Cảm ơn @Torin! Vì vậy, trong ví dụ của tôi, nó phải là `www.johndoe.com. CNAME johndoe.github.io.` và `johndoe.com. ALIAS johndoe.github.io.` hoặc sau này là `johndoe.com. BÍ MẬT www.johndoe.com.`?
lá cờ pl
Điều cuối cùng @Torin: nếu ALIAS/ANAME không có sẵn bởi nhà cung cấp DNS, chúng tôi có thể sử dụng DNAME (dường như có sẵn) không?
Torin avatar
lá cờ in
`DNAME` giống như `CNAME` nhưng đối với tên phụ, vì vậy đó cũng có thể không phải là thứ bạn muốn. Nếu bạn đang thực hiện các trang GitHub, có thể bạn sẽ muốn thêm bốn bản ghi `A` và bốn bản ghi `AAAA` được đề cập trong tài liệu. Đau đấy, nhưng nó là như vậy :(

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.