Virtualhost

Apache在伺服器上添加新站點作為子域

  • March 31, 2021

我有兩個在我的 VPS 上獨立執行的站點,我們稱它們為 site1 和 site2。

它們分別位於/var/www/html/site1/var/www/html/site2

我還沒有域名,但我可以使用伺服器 IP 訪問我的網站,假設它的地址是8.8.8.8

我目前為每個站點有兩個單獨的 apache 配置文件。

兩個站點的配置如下,只有DocumentRoot第二個Directory塊不同。

<VirtualHost *:80>
   ServerName 8.8.8.8
   DocumentRoot /var/www/html/site
   <Directory />
       Options FollowSymLinks
       AllowOverride All
   </Directory>
   <Directory /var/www/html/site>
       AllowOverride All
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我可以通過啟用一個和禁用另一個來訪問我的站點。

我想做的是在http://8.8.8.8上有 site1,在http://site2.8.8.8.8上有測試站點

我嘗試了以下配置但沒有成功

<VirtualHost *:80>
   ServerName 8.8.8.8
   DocumentRoot /var/www/html/site1
   <Directory />
       Options FollowSymLinks
       AllowOverride All
   </Directory>
   <Directory /var/www/html/site1>
       AllowOverride All
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
   ServerName site2.8.8.8.8
   DocumentRoot /var/www/html/site2
   <Directory />
       Options FollowSymLinks
       AllowOverride All
   </Directory>
   <Directory /var/www/html/site2>
       AllowOverride All
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我是否需要 DNS 記錄才能實現我的目標?

我沒有,我應該如何配置 apache 和我的 VPS 以根據 IP 前綴正確地使用 sat1 或 site2 重定向?

基於名稱的虛擬主機使用您的 Web 瀏覽器作為 HTTP 請求的一部分發送的主機名來辨識將使用哪個虛擬主機來回答請求。

通常,您需要為此設置 DNS,並同時指向site1.example.comsite2.example.com的網路伺服器的 IP 地址。

對於單個使用者/開發人員,您可以通過將這兩個主機名添加到工作站的主機文件中來避免註冊域和設置 DNS 記錄。


如果您有多個可用的 IP 地址(現在在 IPv4 世界中很少,但在 IPv6 中很常見),您可以將每個 Apache VirtualHost 條目綁定到不同的 IP 地址,並且不需要 DNS 或主機文件來提供不同的內容,只需訪問正確的 IP 地址

https://httpd.apache.org/docs/current/vhosts/name-based.html#namevip

引用自:https://serverfault.com/questions/1058973