如果我錯過了一些簡單的事情,儘管我努力嘗試設置測試服務器,但我仍然決不是配置Apache的專家,請原諒我。Apache:正常虛擬主機的一個子域,其他虛擬主機的其他子域
背景
我有兩個要求:
- 請求
subdomain.domain.com
應該從/var/www/html/subdomain
- 請求中投放的
code.domain.com
應該由另一臺服務器在同一系統上處理,用不同的端口。請注意,code
是一個固定的子域,不應該按照與第一個要求相同的規則進行處理。換句話說,mysite.domain.com
應該來自/var/www/html/mysite
,而xyz.domain.com
應該來自/var/www/html/xyz
,但是code.domain.com
的處理方式完全不同。
事情試過
要做到#1,我用VirtualDocumentRoot /var/www/html/%1
。對於#2,我只想要code
子域使用完全不同的配置,使用ProxyPass
和ProxyPassReverse
將流量重定向到端口5000上相同系統上的另一臺服務器。
所有請求都根據第一<VirtualHost>
容器經由代理指示重定向,即使所使用的子域是NOT code
。
儘管code
虛擬主機是第一個在配置中,但如果子域不是code
,則不應使用它,因爲客戶端請求的ServerName不是code.domain.com
。
問題
我如何調和這兩種配置,這樣一個特定子域使用一個虛擬主機,而其他子域使用其他虛擬主機?
配置
<VirtualHost *:80>
ServerName code.domain.com
ServerAlias code.local
ServerAdmin [email protected]
DocumentRoot /var/www/repos
ErrorLog logs/code.domain.com
CustomLog logs/code-access common
ProxyPass/http://localhost:5000/
ProxyPassReverse/http://localhost:5000/
<Directory "/var/www/repos">
DAV On
Options +Indexes +FollowSymLinks
AllowOverride All
Allow from all
Order allow, deny
</Directory>
</VirtualHost>
<VirtualHost *:80>
UseCanonicalName Off
VirtualDocumentRoot /var/www/html/%1
VirtualScriptAlias /var/www/html/%1/cgi-bin
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access_log vcommon
ServerName domain.com
ServerAlias localhost
ServerAdmin [email protected]
</VirtualHost>
爲什麼不直接讓代碼子域指向另一個IP? – rekire
感謝您的意見。假設我只有一個盒子和NIC可以工作,那還能繼續嗎?回想一下其他服務器在同一個系統上運行。 –