Domain-Name-System

具有綁定 DNS 的 Apache 虛擬站點,不重定向到文件根目錄

  • March 18, 2017

我在這裡有一個複雜的問題。

我看到許多論壇討論如何​​為 LAN 設置 Bind 以及如何設置 Apache2 以允許託管多個站點。但通常綁定教程是針對單區域設置的,而虛擬站點最終會編輯主機文件以在 LAN 內進行主機名解析。

但我想在一台 Web 伺服器上託管多個站點,並將主機解析外包給名稱伺服器。在這種情況下,這一切都是在 virtualbox 內完成的,使用 pfSense 的虛擬實例為虛擬子網提供虛擬路由和防火牆。Bind DNS 伺服器和 LAMP Web 伺服器都是 Ubuntu 16.04.1 VM。兩者都安裝了 Webmin 以幫助維護和維護。

Bind 進行了一些設置工作,但它會將我的 www.fqdn2.com 重定向到 www.fqdn1.com 上的正確伺服器。所有 nslookups 和 ping 到主機名工作。

當我鍵入 www.fqdn2.com 時,它會將我帶到網路伺服器。但是,我在根目錄中設置了一個 Hello World 樣式的 index.html 文件,即使我輸入 www.fqdn2.com/index.html 也無法看到它。相反,我得到了 Apache 歡迎頁面的標準全新安裝。只是 Red and Blue It Works 啟動頁面。

因此,我猜問題不在於 Bind,而在於 Apache 配置文件。請要求我發布您希望查看的任何配置文件以查找問題。

<VirtualHost *>
DocumentRoot "/var/www/fqdn2.com"
ServerName fqdn2.com
ServerAlias www.fqdn2.com
<Directory "/var/www/fqdn2.com">
allow from all
Options None
Require all granted
</Directory>
</VirtualHost>

我沒有編輯 apache2.conf 文件。

站點配置文件都在那裡。

root@www :/etc/apache2/sites-available$ ls
000-default.conf  default-ssl.conf fqdn2.com.conf

當我訪問 www.fqdn1.com 時,我被帶到 000-default.conf 中預設站點的文件根目錄。此文件未經編輯,此頁面的到達由 Bind DNS 服務負責。也許我需要手動將 fqdn1.com 添加到 Apache 的虛擬站點列表並刪除 000-default.conf 設置?這裡沒有伺服器名稱指令。一切都預設了。

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

如果我在那裡編輯頁面的 html,我會看到它為 fqdn1.com 更新,但沒有為 fqdn2.com 更新。這意味著 fqdn2.com 不只是被重定向到 fqdn1.com 的 DocRoot。由於這個頁面的普通版本在 fqdn2.com 的文件根目錄中沒有副本,我什至不確定這個 html 頁面是從哪里托管的。

這是其他一些配置。

user@www:/etc/apache2/sites-enabled$ apache2ctl -S 
VirtualHost configuration: 
:80 www.fqdn1.com (/etc/apache2/sites-enabled/000-default.conf:1) 
*: fqdn2.com (/etc/apache2/sites-enabled/fqdn2.com.conf:1) 
ServerRoot: "/etc/apache2" 
Main DocumentRoot: "/var/www/html" 
Main ErrorLog: "/var/log/apache2/error.log" 
Mutex mpm-accept: using_defaults 
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/lock/apache2" 
mechanism=fcntl PidFile: "/var/run/apache2/apache2.pid" 
Define: DUMP_VHOSTS 
Define: DUMP_RUN_CFG 
User: name="www-data" id=33 not_used 
Group: name="www-data" id=33 not_used

user@www :/etc/apache2/sites-enabled$ cat fqdn2.com.conf 
<VirtualHost *> DocumentRoot "/var/www/fqdn2.com" 
ServerName fqdn2.com 
ServerAlias www.fqdn2.com
<Directory "/var/www/fqdn2.com"> 
allow from all 
Options None 
Require all granted 
</Directory> 
</VirtualHost> 

user@www:/etc/apache2/sites-available$ cat fqdn2.com.conf 
<VirtualHost *> 
DocumentRoot "/var/www/fqdn2.com" 
ServerName fqdn2.com 
ServerAlias www.fqdn2.com 
<Directory "/var/www/fqdn2.com"> 
allow from all 
Options None 
Require all granted 
</Directory> 
</VirtualHost>

user@www :/etc/apache2/sites-available$ ls 
000-default.conf default-ssl.conf fqdn2.com.conf 

user@www :/etc/apache2/sites-enabled$ ls 
000-default.conf fqdn2.com.conf

任何幫助都將是壯觀的,伺服器夥伴。

謝謝。

同樣值得一試的是改變你的 VirtualHost 語法:

<VirtualHost *:80>
   DocumentRoot "/var/www/fqdn2.com"
   ServerName fqdn2.com
   ServerAlias www.fqdn2.com
   <Directory "/var/www/fqdn2.com">
       Options None
       Require all granted
   </Directory>
</VirtualHost>

這應該有助於確保您的 fqdn2.com 虛擬主機與 apache 附帶的預設 NameVirtualHost *:80 配置相匹配,並且可能會解決您的問題。

我不認為 DNS 是問題的一部分,但您可以對此進行測試:

  • 對於 HTTP,telnet 是一種合理的方式:telnet 127.0.0.1 80,然後輸入以下內容,然後輸入

GET / HTTP/1.1 Host: fqdn2.com

  • 對於 HTTPS,使用openssl s_client -connect 127.0.0.1:443 -servername fqdn2.com

如果其中任何一個返回您期望的數據,但涉及 DNS 查找的請求沒有返回(例如 curl -L http://fqdn2.com),則 DNS 可能是問題的一部分。

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