NodeJS 多个网站
NodeJS multiple websites
我已经在互联网上搜索了一个星期,现在正试图为此找到一个好的解决方案。首先,我阅读了有关 http-master 的信息,但我在安装它时遇到了问题。然后我看到其他一些没有配置的功能和便利性。或者答案都已过时
我们想用 NodeJS 开发网站,目前有三个,两个用于 test/dev,一个用于生产。它们中的每一个都托管在同一台服务器上,目前是具有相同域名但不同端口的 Apache 服务器。我们还有另一个网站,我们正在使用不同的域名。
问题是,使用 NodeJS 为所有站点和更多站点提供服务的最佳方式是什么?展望未来,我们希望在 NodeJS 中开发所有应用程序。
服务器规格:
Windows 服务器 2012 R2
两个核心
4 GB 内存
我最喜欢的托管多个域的方式一直是使用 vhost with 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 记录与您的指向这些子域的 DNS 非常有效。
您想使用反向代理。 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>
我已经在互联网上搜索了一个星期,现在正试图为此找到一个好的解决方案。首先,我阅读了有关 http-master 的信息,但我在安装它时遇到了问题。然后我看到其他一些没有配置的功能和便利性。或者答案都已过时
我们想用 NodeJS 开发网站,目前有三个,两个用于 test/dev,一个用于生产。它们中的每一个都托管在同一台服务器上,目前是具有相同域名但不同端口的 Apache 服务器。我们还有另一个网站,我们正在使用不同的域名。
问题是,使用 NodeJS 为所有站点和更多站点提供服务的最佳方式是什么?展望未来,我们希望在 NodeJS 中开发所有应用程序。
服务器规格: Windows 服务器 2012 R2 两个核心 4 GB 内存
我最喜欢的托管多个域的方式一直是使用 vhost with 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 记录与您的指向这些子域的 DNS 非常有效。
您想使用反向代理。 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>