如果我错过了一些简单的事情,尽管我努力尝试设置测试服务器,但我仍然决不是配置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可以工作,那还能继续吗?回想一下其他服务器在同一个系统上运行。 –