2016-03-14 114 views
0

不太適合Apache,建立簡單的虛擬主機之前沒有問題。似乎有一個奇怪的,使用1個IP地址和多個服務器。Apache虛擬主機 - Mod代理問題

我的第二個虛擬主機似乎只查看前兩個條目而忽略其餘。我已經繪製出我想要發生的事情,以及我的虛擬主機文件的外觀和第二張圖像是如何發生的。

How my virtual hosts are setup and envision the routing to act

How it's currently operating

現在也許不是正確使用兩臺服務器上的虛擬主機?

不太適合Apache,建立簡單的虛擬主機之前沒有問題。似乎有一個奇怪的,使用1個IP地址和多個服務器。

我的第二個虛擬主機似乎只查看前兩個條目而忽略其餘。我已經繪製出我想要發生的事情,以及我的虛擬主機文件的外觀和第二張圖像是如何發生的。

Server1的

<VirtualHost *:80> 
    ServerName server1.domain.com 
    ServerAlias x.domain.com 
    DocumentRoot /var/www/html 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName server2.domain.com 
    ServerAlias y.domain.com 

    ProxyPreserveHost On 
    <Proxy *> 
     Order allow,deny 
     Allow from all 
    </Proxy> 
    ProxyPass/http://server2 
    ProxyPassReverse/http://server2 

</VirtualHost> 

<VirtualHost *:80> 
    ServerName server2.domain.com 
    ServerAlias z.domain.com 

    ProxyPreserveHost On 
    <Proxy *> 
     Order allow,deny 
     Allow from all 
    </Proxy> 
    ProxyPass/http://server2 
    ProxyPassReverse/http://server2 

</VirtualHost> 

<VirtualHost *:80> 
    ServerName server2.domain.com 
    ServerAlias w.domain.com 
    ProxyRequests Off 
    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 
    ProxyPass/http://server2 
    ProxyPassReverse/http://server2 
</VirtualHost> 

服務器2

<VirtualHost *:80> 
    ServerName server2.domain.com 
    DocumentRoot /var/www/html 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName server2.domain.com 
    ServerAlias z.domain.com 
    DocumentRoot /var/www/html/z 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName server2.domain.com 
    ServerAlias w.domain.com 
    DocumentRoot /var/www/html/w 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName server2.domain.com 
    ServerAlias y.domain.com 
    DocumentRoot /var/www/html/y 
</VirtualHost> 
+0

我不確定我是否正確配置您的配置。由於所有ServerNames都讀取server1虛擬主機配置中的「server2,domain.com」,它們實際上是相沖突的。因此只有第一個條目可能適用。與server2配置相同。你可以添加如何通過http調用這個設置嗎? – rpy

+0

因此,進入網絡的入口點是進入服務器1,因爲我只有1個面向公衆的IP地址。爲什麼我使用服務器1路由到服務器2是因爲我不想使用不同的端口號以方便使用,ege server1.domain.com:81。因此,任何選定的子域z,w和y。應該直接指向第二臺服務器,然後從服務器2虛擬主機將子域指向正確的文件夾。 – LOFast

回答

0

避免給同一服務器名任意兩個虛擬主機條目。使用x,y,z等名字是完全正確的(假定所有解析爲來自外部用戶的一個IP地址)。爲了簡化(維護和管理配置),還應避免將VirtualHost服務器配置(例如server1上的x)與「標準」服務器配置混合使用。您的Web名稱空間上的任何可訪問區域都應通過VirtualHost進行配置。 (在這種情況下,配置中的第一個默認設置爲「默認」。)

在兩臺服務器上使用VirtualHosts本身並不是問題。您只需確保原始HTTP請求中的ServerName正確轉發併到達server2。爲此,您需要將您的VirtualHost配置添加到

ProxyPreserveHost On 

但是,放棄基於名稱的VirtualHosts與server2的使用情況並轉而使用不同的IP地址或端口用於單個(邏輯)主機可能更容易。 Server2(至少在概念上)是一個內部設置,對於「外部」而言是不可見的。因此,易用性不是真正的可歸因於

+0

感謝您的意見,真的試圖避免使用端口,只是針對子域擁有一切。 – LOFast

+0

無論你做什麼,server2都需要基本信息來區分你的各種虛擬主機。否則,它們只位於單個匹配條目中(例如第一個)。這是你觀察到的... – rpy

+0

好吧,所以我的問題必須與防火牆/端口。第一個問題是ProxyPass,而ProxyPassReverse是「/ http:// server2」,它需要是「/ http:// server2 /」,所以缺少最後一個破折號。除此之外,我爲這臺服務器翻譯了81到80。所以ProxyPass和ProxyPassReverse看起來像「/ http:// server2:81 /」 – LOFast