请原谅我,如果我在尝试设置测试服务器的过程中错过了一些简单的东西,因为我仍然不是配置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>
容器,所有请求都通过Proxy指令重定向,即使使用的子域不是code
。
虽然code
vhost是配置中的第一个,但如果子域不是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>
答案 0 :(得分:0)
解决你的问题不应该太难。
首先交换两个虚拟主机。第一个是每次默认值。因此,如果没有规则匹配,则每个呼叫都将作为此虚拟主机进行处理。
其次让mod重写将请求移动到正确的目录或为每个有效域创建虚拟主机。最后一个更简单,允许您有单独的日志文件。
答案 1 :(得分:0)
我找到了一个对我来说很漂亮的配置。我删除了整个vhost配置并将其替换为:
<VirtualHost *:80>
ServerAdmin foo@domain.com
VirtualDocumentRoot /var/www/html/%-3+
ServerName domain.com
ServerAlias localhost
CustomLog logs/domain.com-access "%V -> %u@%h (%t): %Bb %Dmu"
ErrorLog logs/error_log
</VirtualHost>
在/var/www/html/code/.htaccess中,我使用mod_rewrite中的P标志来根据需要代理我的流量。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ http://localhost:5000/$1 [L,P]
</IfModule>
在%-3+
中使用VirtualDocumentRoot
表示我的网址中I can also use more than one dot用于访问名称中带点的目录。例如,可以使用anothersite.com
访问anothersite.com.domain.com
的测试服务器,并从/var/www/html/anothersite.com
提供文件。
有两次捕获:
www.domain.com
和domain.com
请求的行为方式不同。