3

我有一个 Apache 前端服务器,直到今天它仍将子域的流量代理api.myapp.net到在 Nginx 上运行 Rails 应用程序的后端服务器。

现在,我alpha.myapp.net在我的域组合中添加了第二个子域,并为其分配了相同的 IP。该子域的流量不应访问 Rails 应用程序,而是 Nginx 服务器上的第二个 VHost,该 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 后端服务器现在不会请求哪个子域,而是为来自第一个可用服务器的请求提供服务,即 ist api

现在的问题似乎是:如何代理从 Apache 前端到 Nginx 后端的流量并维护子域和域?

或者可能还有其他问题?

希望有人可以提供帮助。

问候菲利克斯

4

1 回答 1

3

有时答案伴随着问题而来。问题正是缺少主机名。

/etc/hosts我通过在我的 Apache 服务器上进行编辑并添加两个条目解决了这个问题。一api.myapp.net,一alpha.myapp.net都引用相同的IP。

ProxyPass然后我更改了 bot Apache 代理配置,因此ProxyPassReverse不再使用 IP,而是使用新的主机名。

瞧,它起作用了。

于 2013-04-08T08:08:07.470 回答