Linux

Apache 中基於名稱的虛擬主機

  • July 27, 2012

我在配置基於名稱的虛擬主機時遇到了一些麻煩。

我可以使用帶有空白 httpd.conf 文件的“service apache2 start”啟動伺服器,並且它將執行所有指向 /var/www 的內容,正如預期的那樣。


當我填寫 httpd.conf 時:

# Ensure that Apache listens on port 80
Listen 80

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

<VirtualHost *:80>
DocumentRoot /www/kevins_playground
ServerName home.coolkev.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/flatline_and_co
ServerName www.flatline_and_co.com

# Other directives here

</VirtualHost>

執行“service apache2 start”時出現此錯誤

root@kevin-server:/etc/apache2# service apache2 start
* Starting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[Thu Jul 26 20:10:01 2012] [warn] NameVirtualHost *:80 has no VirtualHosts
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

我找到了解決方案,

  1. 我刪除了對 httpd.conf 的所有更改,對我來說,這留下了一個空白文件。
  2. 我為我的兩個虛擬主機複製了 ./sites-available/ 中現有的預設站點文件。
  3. 我編輯了這兩個文件並替換了有意義的值,我認為它們需要更改的地方應該很明顯(網站基礎文件夾,網站 URL)。
  4. 我在 ./sites-enabled/ 中創建了您應該創建的符號連結
  5. 我重新啟動了網路伺服器“sudo service apache2 restart”,它工作了。

我認為問題源於這樣一個事實,即在解析文件時,Apache 發現了兩個帶有“<VirtualHost>”的文件,我的 httpd.conf 和 ./sites-available/ 中的預設網站配置

只要您沒有接觸預設虛擬主機(它已經包含 NameVirtualHost *:80 指令),就不應重複預設行為。

既然你不得不忍受 Debuntu,為什麼不去把你的虛擬主機放在 /etc/apache2/sites-enabled/ 中,每個文件一個呢?

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