尽管我努力尝试设置测试服务器,但如果我错过了一些简单的事情,请原谅我,因为我仍然不是配置 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
子域使用完全不同的配置,将流量重定向到同一系统上端口 5000 上的另一台服务器,使用ProxyPass
和ProxyPassReverse
.
结果
所有请求都根据第一个<VirtualHost>
容器通过 Proxy 指令重定向,即使使用的子域不是 NOT code
。
虽然code
vhost 在配置中是第一个,但如果子域不是 NOT ,则不应使用它code
,因为客户端请求的 ServerName 不是code.domain.com
。
问题
如何协调这两种配置,以便一个特定的子域使用一个虚拟主机,而其他子域使用另一台虚拟主机?
配置
<VirtualHost *:80>
ServerName code.domain.com
ServerAlias code.local
ServerAdmin foo@domain.com
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 foo@domain.com
</VirtualHost>