NodeJS 多个网站

8
我已经在互联网上搜索了一个星期,试图找到一个好的解决方案。首先我了解了http-master,但是在安装时遇到了一些问题。然后我看到了一些其他的解决方案,但是它们没有特性和易用性配置。或者答案都过时了。
我们想要使用NodeJS开发网站,目前有三个,两个用于测试/开发,一个用于生产。这些网站都托管在同一台服务器上,目前是一个Apache服务器,具有相同的域名但不同的端口。我们还在开发另一个拥有不同域名的网站。
问题是,如何最好地使用NodeJS来服务所有网站及更多?未来,我们希望使用NodeJS开发所有应用程序。
服务器规格: Windows Server 2012 R2 两个内核 4 GB RAM

我正在查看VirtualHost定义和mod_proxy指令,以分配节点运行的端口,但这是在LAMP环境中。不确定Windows是否适用... - Bosworth99
可能是重复的问题,与如何在同一IP/服务器上使用不同域名托管多个Node.js站点?相似。该问题已经有一些很好的答案,介绍了使用Node.js进行多站点策略的方法。 - Dwayne Charrington
@DigitalSea,这很接近了,但我的服务器目前运行的是Windows和Apache。使用我已经安装好的东西会很好。被接受的答案演示了如何实现它的例子。 - Brandon Wilson
2个回答

10

你想使用反向代理。nginx是一个很好的选择,因为其配置非常简单。但同样也可以使用apache来实现这一点。

基本上,只需在不同端口下运行每个应用程序,并根据域名代理请求。这里是使用nginx的示例设置。

## Upstream www.example.com ##
upstream examplelive  {
      server 8081; # nodejs server running on port 8081
}

## Upstream dev.example.com ##
upstream exampledev  {
      server 8082; # nodejs server running on port 8082
}

## www.example.com ##
server {
    listen       80;
    server_name  www.example.com;

    access_log  /var/log/nginx/log/www.example.access.log  main;
    error_log  /var/log/nginx/log/www.example.error.log;

    ## send request back to examplelive ##
    location / {
     proxy_pass  http://examplelive;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}


## dev.example.com ##
server {
   listen      80;
   server_name dev.example.com;

   access_log  /var/log/nginx/log/dev.example.com.access.log  main;
   error_log   /var/log/nginx/log/dev.example.com.error.log;

   location / {
        proxy_pass  http://exampledev;
        proxy_set_header        Host            static.example.com;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
下面的 Apache 示例应该可以工作。
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName www.example.com

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:8081/
            ProxyPassReverse http://localhost:8081/
    </Location>

</VirtualHost>
<VirtualHost *:80>
    ServerAdmin admin@dev.example.com
    ServerName  dev.example.com    

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:8082/
            ProxyPassReverse http://localhost:8082/
    </Location>

</VirtualHost>

1
你是否有Apache的例子? - Brandon Wilson
@BrandonWilson 还添加了使用 Apache 的示例。看看这是否适合您。 - Kirill Fuchs
非常棒的工作,先生。我已经在我的Apache设置中成功运行了它,谢谢你。 - Brandon Wilson

0

我一直喜欢使用vhost和Express来托管多个域名,这样可以匹配不同的域名。

var mailapp = connect()
var staticapp = connect()

// create main app
var app = connect()

// add vhost routing to main app for mail
app.use(vhost('mail.example.com', mailapp))
app.use(vhost('assets-*.example.com', staticapp))

如果您不想通过获取多个域名指向此服务器的方式来解决问题,我发现在一个主要名称上使用多个子域名(例如foo1.bar.com,foo2.bar.com)并使用CNAME记录来指向这些子域名非常有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接