VirtualHost 不被視為最佳匹配

VirtualHost 不被視為最佳匹配

我有一個名為pga-default.conf看起來像

<VirtualHost *:8008>
    ServerName 192.168.1.10

    DocumentRoot /var/www/portals/default/public

    <Directory "/var/www/portals/default/public">
       AllowOverride All
    </Directory>
    ErrorLog /var/log/httpd/default.error.log
    CustomLog /var/log/httpd/default.requests.log combined
</VirtualHost>

問題是每當我嘗試http://192.168.1.10:8008它始終會載入預設的 Apache 測試頁面。 預設設定檔好像,

Listen 8008
<VirtualHost _default_:8008>
    DocumentRoot "/www/default"
</VirtualHost>

但是當我改變<VirtualHost *:8008><VirtualHost 192.168.1.10:8008>pga-default.conf它按預期工作。我想知道這是為什麼。據我所知,這是因為伺服器沒有選擇 VirtualHost 作為特定 IP 位址和連接埠的最佳匹配。 (這個答案證實了VirtualHost 上下文中 _default_:* 和 *:* 之間的區別

我也嘗試了其他幾種方法,但除了上述方法之外,其他方法都不起作用。以下是其他方法。 (更改為pga-default.conf

  • ServerName 192.168.1.10改成ServerName 192.168.1.10:8008
  • 用過的ServerAlias 192.168.1.10

筆記- 透過上述配置,<VirtualHost *:8008>我的一些同事已經收到了成功的結果。這個問題只發生在我身上。

我在這裡錯過了什麼?為什麼別人得到了預期的結果,而我卻沒有?

答案1

您必須始終在每個虛擬主機中定義 ServerName。

由於您的「預設」可能首先載入且沒有特定的伺服器名稱定義,因此它正在抓取所有請求。您可以透過在預設虛擬主機中設定「ServerName default」來輕鬆嘗試此操作。

所以當你請求“http://192.168.1.10:8008「您現在將登陸適當的虛擬主機。

因此請記住,最佳實踐是始終​​在每個虛擬主機中定義唯一的ServerName 指令,並考慮當沒有請求的主機名稱與定義的虛擬主機匹配時,第一個虛擬主機將接受請求,而且,如果您不小心首先在兩個虛擬主機中定義了相同的伺服器名稱載入的虛擬主機將接受請求。

相關內容