Ubuntu

使用 apache2 製作只能訪問域名的 Web 伺服器

  • March 22, 2017

我有一個域名example.com和一個帶有靜態 IP 地址的 VPS 123.123.123.123

我希望瀏覽器提供域名來訪問網站內容。

在實踐中,我希望人們只有在他們放置exemple.com而不是123.123.123.123在瀏覽器的 url 欄上時才能看到我的網站。

所以在我的/var/www/目錄中,我創建了兩個子目錄。

/var/www/default(對於不提供dn的人會看到的內容)和
/var/www/exemple實際的網站內容。

/etc/apache2/sites-enabled/000-default.conf像這樣編輯了我的文件。

<VirtualHost *:80>
   DocumentRoot /var/www/default
</VirtualHost>

<VirtualHost *:80>
   ServerName example.com
   ServerAlias example.com

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/exemple

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

在我看來,這應該有效。/var/www/default實際上,如果我在瀏覽器的 url 欄中放置123.123.123.123和放置,伺服器會為我提供兩者的內容。exemple.com為什麼?

Apache 會將流量定向到它在配置中看到的第一個匹配項。VirtualHost因為定義的第一個沒有定義ServerNameor ServerAlias,所以它被配置為擷取到任何綁定主機名或埠 80 上任何綁定 IP 地址的任何流量。

您忘記命名專用於 example.com 的 VirtualHost。這是我的修改(有一些補充建議):

<VirtualHost *:80>
   DocumentRoot /var/www/default
</VirtualHost>

<VirtualHost 123.123.123.123:80>                              # <= Should fix your issue
   ServerName example.com
   ServerAlias www.example.com                               # <= Suggested modification

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/exemple

   ErrorLog ${APACHE_LOG_DIR}/error-example.log              # <= Suggested modification
   CustomLog ${APACHE_LOG_DIR}/access-example.log combined   # <= Suggested modification
</VirtualHost>

當然,不要忘記重新載入 Apache。

引用自:https://unix.stackexchange.com/questions/353104