在主域上独立提供 Meteor 服务,在子域上独立提供 Apache 服务

在主域上独立提供 Meteor 服务,在子域上独立提供 Apache 服务

我在 Ubuntu 服务器上运行 Meteor 服务器。但是当我尝试让 Apache 在同一台服务器上为子域提供服务时,出现了问题。

main.domain.com -> Meteor

sub.domain.com -> Apache

Meteor 在端口 80 上运行。我之前曾尝试过让 Meteor 在端口 3000 上运行,并使用 Nginx 进行反向代理,但 Meteor 开始表现不佳(tcp/websockets 问题),我花了太多的夜晚和夜晚来坚持下去。

所以我恢复了设置,让 Meteor 成为主服务器(应用程序运行良好),然后安装 Apache 为我的子域提供服务。问题是我无法让 Apache 在端口 80 上提供服务,因为它似乎超出了我的 Meteor 服务器的承载能力。

根据经验,我尝试远离反向代理 Meteor,但我对让 Apache 专用于我的子域以及不压倒我的服务器上的“所有端口 80”的了解还不够。

在这种设置下,我怎样才能让两种服务相互协作?


更新:

按照 EasyEcho 的建议,我转而使用 2 个不同的 IP 地址。

需要说明的是,我在 Rackspace 上使用“下一代”云服务器(运行最新的 Ubuntu 12.04 LTS 和最新的 grub2/更新的内核)。

Rackspace 不允许在其云服务器上使用其他 IP(来源)...

由 OpenStack 支持的下一代云服务器平台尚不支持额外的 IP 地址。

... 但创建服务器时,您会获得 1 个 IPv4 和 1 个 IPv6。那么为什么不加入 IPv6 潮流呢?说起来容易做起来难。

以下是我的“新问题”:将我的子域映射到 IPv6 地址(DNS 中的 AAAA)并配置 Apache 以监听 IPv6 地址后,我得到了以下行为:

从我的服务器远程桌面(使用 freeNX),在 Firefox 中

  • http:// [我的:ip:v6:地址] -> Apache (WIN)
  • http://sub.domain.com-> Apache (WIN)
  • http://my.ip.v4.address -> Meteor(WIN)
  • http://main.domain.com -> Apache(失败)

从我的工作站(Win7 x64),也在 Firefox 中

  • http:// [my:ip:v6:address] -> 连接已超时(失败)
  • http:// sub.domain.com -> 未找到服务器(失败)
  • http://my.ip.v4.address -> Meteor(WIN)
  • http://main.domain.com -> Meteor(WIN)

这是我的 Apache 配置:

/etc/apache2/ports.conf

NameVirtualHost [my:ip:v6:address]:80
Listen [my:ip:v6:address]:80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

/etc/apache2/sites-enabled/default

<VirtualHost [my:ip:v6:address]:80>
    ServerAdmin webmaster@localhost

    ServerName sub.domain.com

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

是否可以修复此问题并使其如“广告”中所述那样工作?

答案1

如果可能的话,为机器分配多个 IP,并将 Meteor 设置为在其中一个 IP 上绑定到 80,将 Apache 设置为在另一个 IP 上绑定到端口 80。请参阅Apache 文档Meteor 演示这似乎涵盖了您正在寻找的内容。


更新:

嗯,这有很多新信息......

您可能无法从工作站连接到 IPv6 ip/主机,因为您使用的是 IPv4。

答案2

嗯,您不需要多个 IP 地址来执行此操作。

使用 NginX 或 HAProxy 等轻量级程序监听 0.0.0.0:80(扩展不会成为问题),然后将流量反向代理到下面的相关层,在单独的端口上运行(监听本地主机,而不是 0.0.0.0)。

因此,请求进入apache.your_domain.com,并且 HAProxy 在内部将流量路由到在另一个端口上运行的 Apache。

请求进入meteor.your_domain.com,并且 HAProxy 内部将流量路由到 Node.js...

相关内容