Apache-2.4

執行兩個具有兩個子域 httpd 的網站

  • February 15, 2019

我有一個example.com包含兩個子域的域:website.example.comcloud.example.com. 我為他們兩個都設置了一個 A-Record 到我的伺服器的 IP 地址。

我的伺服器是一個帶有 centos7 的 VPS,/var/www/html/每個域都有以下兩個目錄:

  • /var/www/html/website.example.com/包含所有 wordpress 文件
  • /var/www/html/cloud/包含 ownCloud 的所有文件。

我增強了我的 httpd.conf 以包含:

Listen 80
Listen 81

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /var/www/html/website.example.com
ServerName www.website.example.com
</VirtualHost>

NameVirtualHost *:81
<VirtualHost *:81>
DocumentRoot /var/www/html/cloud
ServerName www.cloud.example.com
</VirtualHost>

現在,當我重新啟動 httpd 並執行 wget 時,我得到以下響應:

  • my.vps.ip.address-> 來自 wordpress 網站的響應
  • my.vps.ip.address:80-> 來自 wordpress 網站的響應
  • my.vps.ip.address:81-> 來自云站點的響應
  • website.example.com-> 來自 wordpress 網站的響應
  • cloud.example.com-> 來自 wordpress 網站的響應。

這會導致瀏覽器體驗 - > 當我website.example.com在瀏覽器中輸入時,我會進入我的 wordpress 網站。但是當我進入時,cloud.example.com我也會訪問我的 wordpress 網站而不是 owncloud 網站。

我錯過了什麼?

您已設置ServerNamewww.cloud.example.com,但嘗試使用 訪問它cloud.example.com。你也忘記了81埠。

將其設置為cloud.example.com或添加一個ServerAlias cloud.example.com.

您不需要cloud.example.com在不同的埠上設置。Apache 完全有能力在同一個埠上處理不同的 VirtualHost。只需將其留在埠 80 上即可。

它應該如下所示:

Listen 80
# Listen 81
# Just stay on port 80, don't make it more complicated for the clients

# Listen for virtual host requests on all IP addresses
# NameVirtualHost *:80
# This is not needed anymore with Apache 2.4

<VirtualHost *:80>
DocumentRoot /var/www/html/website.example.com
ServerName website.example.com
ServerAlias www.website.example.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/html/cloud
ServerName cloud.example.com
</VirtualHost>

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