我有一个Apache前端服务器,直到今天将子域api.myapp.net
的流量代理到运行Nginx上的Rails应用程序的后端服务器。
现在我在我的域名组合中添加了第二个子域名alpha.myapp.net
并为其提供了相同的IP。到该子域的流量不应该是Rails应用程序,而是Nginx服务器上的第二个VHost,它被设置为服务于静态站点。
所以我有api.myapp.net
的代理配置:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@myapp.net
ServerName api.myapp.net
ServerAlias api.myapp.net
DirectoryIndex index.html
RewriteEngine On
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 9
RewriteCond %{HTTP_HOST} !^(api\.)?myapp\.net$
RewriteRule ^(.*)$ http://myapp.net$1 [L,R=301]
ProxyPass / http://192.168.1.145/
ProxyPassReverse / http://192.168.1.145/
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature Off
</VirtualHost>
我为alpha.myapp.net
设置了第二个配置:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@myapp.net
ServerName alpha.myapp.net
ServerAlias alpha.myapp.net
DirectoryIndex index.html
RewriteEngine On
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 9
RewriteCond %{HTTP_HOST} !^(alpha\.)?myapp\.net$
RewriteRule ^(.*)$ http://myapp.net$1 [L,R=301]
ProxyPass / http://192.168.1.145/
ProxyPassReverse / http://192.168.1.145/
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature Off
</VirtualHost>
现在发生的是,alpha.myapp.net
的所有流量都会点击我的Rails应用程序,该应用程序会侦听api.myapp.net
的请求。
我整理了所有Nginx配置问题,所以我认为它必须是Apache配置错误。我在Apache的重写日志中看到的似乎解释了这个问题:
xxx.yyy.zzz.95 - - [08/Apr/2013:09:34:35 +0200] [alpha.myapp.net/sid#b9279870][rid#b9311d38/initial] (2) init rewrite engine with requested uri /index.html
xxx.yyy.zzz.95 - - [08/Apr/2013:09:34:35 +0200] [alpha.myapp.net/sid#b9279870][rid#b9311d38/initial] (3) applying pattern '^(.*)$' to uri '/index.html'
xxx.yyy.zzz.95 - - [08/Apr/2013:09:34:35 +0200] [alpha.myapp.net/sid#b9279870][rid#b9311d38/initial] (4) RewriteCond: input='alpha.myapp.net' pattern='!^(alpha\.)?myapp\.net$' => not-matched
xxx.yyy.zzz.95 - - [08/Apr/2013:09:34:35 +0200] [alpha.myapp.net/sid#b9279870][rid#b9311d38/initial] (1) pass through /index.html
最后一部分pass through /index.html
似乎省略了子域和域部分。所以Nginx后端服务器现在没有,请求哪个子域,并且服务于来自第一个可用服务器的请求,该服务器是api
。
现在的问题似乎是:我如何代理从Apache前端到Nginx后端的流量并维护子域和域?
或者还有其他问题吗?
希望有人可以提供帮助。
关心菲利克斯
答案 0 :(得分:3)
有时答案会附带问题。问题恰好是缺少的主机名。
我通过在Apache服务器上编辑/etc/hosts
并添加两个条目来解决问题。一个api.myapp.net
,一个alpha.myapp.net
都引用相同的IP。
然后我更改了机器人Apache代理配置,因此ProxyPass
和ProxyPassReverse
不再使用IP了,而是使用新的主机名。
瞧它有效。