2012-05-18 159 views
55

嘗試啓動Apache時出現此錯誤。Apache錯誤:端口443上_default_虛擬主機重疊

_default_ virtualhost overlap on port 443

我試圖設置SSL。幾乎所有的解決方案在網上說加:

NameVirtualHost *:443 

對conf文件,但仍阿帕奇無法啓動,只是說

Action start failed. the apache logs may have more information

有一個在Apache日誌零信息。

+0

你在檢查哪些日誌?如果你在一個Linux系統上,運行'netstat -lp --inet'來查看是否有進程已經在運行,並且使用端口443. – Ansari

+0

nope沒有別的東西在使用端口443.問題是我的< VirtualHost _default_:443>和 .... – Mark

+0

注意:我已將'NameVirtualHost'位放入'部分 - 看起來很明智 - 但它必須在該範圍之外。 – artfulrobot

回答

109

要解決Debian/Ubuntu系統上的問題,請將NameVirtualHost *:443添加到/etc/apache2/ports.conf設置文件中。我ports.conf是目前以下:

# /etc/apache/ports.conf 
# If you just change the port or add more ports here, you will likely also 
# have to change the VirtualHost statement in 
# /etc/apache2/sites-enabled/000-default 
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from 
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and 
# README.Debian.gz 

NameVirtualHost *:80 
Listen 80 

<IfModule mod_ssl.c> 
    # If you add NameVirtualHost *:443 here, you will also have to change 
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl 
    # to <VirtualHost *:443> 
    # Server Name Indication for SSL named virtual hosts is currently not 
    # supported by MSIE on Windows XP. 

    NameVirtualHost *:443 

    Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
    NameVirtualHost *:443 
    Listen 443 
</IfModule> 

而且確保「網站可用/默認SSL」未啓用,類型a2dissite default-ssl停用的網站。當你在它的時候輸入a2dissite來獲取一個列表,看看你有沒有其他的站點設置可以映射到端口443上。

+0

已修改,但錯誤仍在繼續... –

+1

HI @MUYBelgium,這意味着有另一個映射到443端口的虛擬主機。在'/ etc/apache/sites-enabled /'或Debian/Ubuntu上查看'a2dissite'來禁用所有網站,然後使用'a2ensite'逐個重新啓用它們直到出現錯誤;希望這可以幫助。 –

+1

是的...我有同樣的問題。必須更新ports.conf和sites-avaialble/default-ssl(用*替換_default_)然後我可以使用SSL啓用其他虛擬主機。應該編輯您的答案以包含這些附加信息。 – WernerCD

10

添加NameVirtualHost *:443是非常不可能的解決方案,因爲可以通過SSL支持基於名稱的虛擬主機的情況有限。有關詳細信息,請閱讀thisthis(可能有更好的文檔;這些只是我發現的詳細討論該問題的文章)。

如果你正在運行一個相對股票Apache的配置,你可能有這樣的話:

<VirtualHost _default_:443> 

您最好的選擇是要麼:

  • 將您額外的SSL配置到這個現有VirtualHost容器或
  • 註釋掉整個VirtualHost塊並創建一個新塊。不要忘記包含所有相關的SSL選項。
+0

嘿謝謝你的建議,但我仍然不能讓Apache工作。在/ etc/apache2/sites-available中包含的default-ssl文件,並且當我在/ etc/apache2/sites中創建一個新文件時,它可用於mydomain.com幷包含< VirtualHost *:443>,我得到_default_虛擬主機端口443錯誤重疊。當我剛剛有我的新的SSL設置的默認SSL,我只是得到一個動作開始失敗,當我嘗試啓動Apache沒有在錯誤日誌裏什麼都沒有......我完全集結:( – Mark

+0

後生成ssl再放< VirtualHost_default_:443>進入pache2.conf文件,apache重新開始,ssl我sworking :) – Mark

+0

很高興的事情正在工作! – larsks

30

在CentOS的一個vanilla Apache2安裝中,當你安裝MOD_SSL它會自動添加一個配置文件:

{apache_dir}/conf.d/ssl.conf 

此配置文件包含443端口默認的虛擬主機定義,命名默認:443。如果你也有自己的虛擬主機定義443(即在httpd.conf中),那麼你將會有一個疑惑。由於首先包含conf.d文件,它們將勝過你的。

要解決衝突,您可以從conf.d/ssl.conf刪除虛擬主機定義或將其更新爲您自己的設置。

+0

這是我在CentOS上的錯誤來源,也幫助解釋了警告,指出ssl_mod無法加載兩次。 – nedblorf

+3

謝謝你,我努力解決你的答案。 從ssl.conf中的行到行註釋掉它的所有工作。 – Sahil

+0

這是有道理的 - 對於單個VH。我在httpd.conf中有數百個,我想將SSL應用於它們。如果我刪除了ssl.conf中的_default_:443,那麼我將不得不將它的所有命令放入httpd.conf中的_every_ VH定義中,這肯定會過度。 –

3

我遇到了這個問題,因爲我有相同端口的多個通配符條目。您可以輕鬆地通過執行apache2ctl -S檢查:

# apache2ctl -S 
[Wed Oct 22 18:02:18 2014] [warn] _default_ VirtualHost overlap on port 30000, the first has precedence 
[Wed Oct 22 18:02:18 2014] [warn] _default_ VirtualHost overlap on port 20001, the first has precedence 
VirtualHost configuration: 
11.22.33.44:80  is a NameVirtualHost 
     default server xxx.com (/etc/apache2/sites-enabled/xxx.com.conf:1) 
     port 80 namevhost xxx.com (/etc/apache2/sites-enabled/xxx.com.conf:1) 
     [...] 
11.22.33.44:443  is a NameVirtualHost 
     default server yyy.com (/etc/apache2/sites-enabled/yyy.com.conf:37) 
     port 443 namevhost yyy.com (/etc/apache2/sites-enabled/yyy.com.conf:37) 
wildcard NameVirtualHosts and _default_ servers: 
*:80     hostname.com (/etc/apache2/sites-enabled/000-default:1) 
*:20001    hostname.com (/etc/apache2/sites-enabled/000-default:33) 
*:30000    hostname.com (/etc/apache2/sites-enabled/000-default:57) 
_default_:443   hostname.com (/etc/apache2/sites-enabled/default-ssl:2) 
*:20001    hostname.com (/etc/apache2/sites-enabled/default-ssl:163) 
*:30000    hostname.com (/etc/apache2/sites-enabled/default-ssl:178) 
Syntax OK 

注意如何在輸出的開頭是幾個警戒線。這些將顯示哪些端口正在創建問題(但您可能已經知道這一點)。

接下來,看看輸出的結尾,並且您可以準確查看正在創建問題的虛擬主機的哪些文件和行。在上面的示例中,端口20001分配在第33行的/etc/apache2/sites-enabled/000-default和第163行的/etc/apache2/sites-enabled/default-ssl。同樣*:30000列在2個地方。解決方案(在我的情況下)只是刪除其中一個條目。

+0

是的,這有很大的幫助。我在443上有一個示例www.example.com條目,導致所有其他443個虛擬主機發出錯誤。 –