我在 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
答案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...