Apache-2.4

Apache 中的 VirtualHost 為瀏覽器提供了錯誤的頁面(但不是 curl)

  • July 1, 2018

我嘗試使用不同的虛擬主機在同一 Apache 伺服器(在 Ubuntu 16.04 上執行的 Apache 2.4)上託管不同的網站。但是,當嘗試打開domain-two.tld伺服器時,會傳遞domain-one.tld. 這個那個問題中描述了類似的行為。根據我的配置文件,這兩個問題的答案應該已經實現了。

虛擬主機定義如下:

<VirtualHost *:80>
   ServerName domain-one.tld
   ServerAlias www.domain-one.tld
   DocumentRoot /var/www/html/domain_one
</VirtualHost>

<VirtualHost *:80>
   ServerName domain-two.tld
   ServerAlias www.domain-two.tld
   DocumentRoot /var/www/html/domain_two
</VirtualHost>

兩個配置文件都位於sites-availablesites-enabled通過使用a2ensite指向以下目錄樹的符號連結到:

sites-enabled/
|-- domain_one.conf -> ../sites-available/domain_one.conf
`-- domain_two.conf -> ../sites-available/domain_two.conf

啟用配置文件後,我重新啟動了 apache,以便通過systemctl restart apache2. 為了測試這兩種配置,我在/etc/hosts文件中添加了一些額外的主機

127.0.0.1       localhost
127.0.0.1       domain-one.tld
127.0.0.1       www.domain-one.tld
127.0.0.1       domain-two.tld
127.0.0.1       www.domain-two.tld
# some further IPs down here

並使用 curl 在本地訪問了這兩個網站。

這將根據需要返回正確的文件。但是,通過瀏覽器從遠端客戶端訪問這兩個站點 Apache 僅提供(由於技術原因domain_one無法測試,記憶體在瀏覽器中已停用)。domain-two.tld

這種奇怪的行為從何而來?我怎麼能縮小這個範圍?


由於@kubanczyk 的評論而更新:

  • 問題:針對遠端curl請求而不是本地curl請求返回什麼localhost
  • 答:正確的頁面內容。

對於pvz-sphere.de這是domain_one

$ curl -v http://www.pvz-sphere.de      # which is domain_one
* Rebuilt URL to: http://www.pvz-sphere.de/
*   Trying 217.160.122.225...
* TCP_NODELAY set
* Connected to www.pvz-sphere.de (217.160.122.225) port 80 (#0)
> GET / HTTP/1.1
> Host: www.pvz-sphere.de
> User-Agent: curl/7.60.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 905
< Connection: keep-alive
< Keep-Alive: timeout=15
< Date: Wed, 06 Jun 2018 15:45:32 GMT
< Server: Apache
< 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<html>
<head>
<title>SPhERe - Symposium on Pharmaceutical Engineering Research</title>
<meta name="keywords" content="SPhERe, ICTV, TU Braunschweig, PVZ, Zentrum für Pharmaverfahrenstechnik, Institut für Chemische und Thermische Verfahrenstechnik" />
<meta name="description" content="Symposium on Pharmaceutical Engineering Research" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<frameset rows="100%">
<frame src="http://ictv.rz.tu-bs.de/SPhERe/" title="SPhERe - Symposium on Pharmaceutical Engineering Research" frameborder="0" noresize="noresize"/>
<noframes>
<body>
<h1>SPhERe - Symposium on Pharmaceutical Engineering Research</h1>
<p><a href="http://ictv.rz.tu-bs.de/SPhERe/">http://pvz-sphere.de/</a></p>
</body>
</noframes>
</frameset>
</html>
* Connection #0 to host www.pvz-sphere.de left intact

對於teresa-projekt.de這是domain_two

$ curl -v http://www.teresa-projekt.de    # which is domain_two
* Rebuilt URL to: http://www.teresa-projekt.de/
*   Trying 217.160.233.207...
* TCP_NODELAY set
* Connected to www.teresa-projekt.de (217.160.233.207) port 80 (#0)
> GET / HTTP/1.1
> Host: www.teresa-projekt.de
> User-Agent: curl/7.60.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Keep-Alive: timeout=15
< Date: Wed, 06 Jun 2018 15:38:17 GMT
< Server: Apache
< 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<html>
<head>
<title>Teresa-Projekt</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<frameset rows="100%">
<frame src="http://ictv.rz.tu-bs.de" title="Teresa-Projekt" frameborder="0" noresize="noresize"/>
<noframes>
<body>
<h1>Teresa-Projekt</h1>
<p><a href="http://ictv.rz.tu-bs.de">http://teresa-projekt.de/</a></p>
</body>
</noframes>
</frameset>
</html>
* Connection #0 to host www.teresa-projekt.de left intact

在查看請求和響應標頭以及不同的日誌文件(啟用取證日誌之後)後,我發現域重定向(類型iframe redirection而不是HTTP redirect)和 DNS 條目都有問題。那些錯誤的 DNS 條目和重定向使 Apache 提供預設值VirtualHost,因為沒有給定ServerNamesServerAlias匹配請求的域。

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