我正在使用一台服务器来托管多个Node.js网络应用程序,这些应用程序分布在多个域中.我目前的做法是为不同端口上的每个应用程序运行Express服务器,并运行只是将请求路由(重定向)到正确的端口/ Express服务器的基本服务器.这有效,但这意味着我的基本服务器正在路由每个HTTP请求(并通过手动重定向),并且我的用户将我的应用视为托管在[hostname.com]:8000.
经过一些研究,我发现我可以使用http-proxy来满足我的路由需求,但我仍然想知道在同一系统上运行多个Express服务器是否有最佳实践.这是我计划如何做的:
每个Web应用程序都有自己的文件夹,具有完整的Express文件夹结构(app.js,路由,视图等).应用程序将按域分组,因此示例文件夹结构将是:
hostname.com/
app.js
routes/
views/
...
app1/
app1.js
routes/
views/
...
app2
...
hostname2.com/
app.js
routes/
views/
...
Run Code Online (Sandbox Code Playgroud)
我将不得不分别用节点(或永远,我目前正在使用)运行每个app.js ,并且每个都必须在内部使用不同的端口,并且跨应用重定向指向端口目标应用.
那么,这是我目前的计划.有什么问题,我应该避免哪些陷阱?最重要的是,是否有针对此问题的既定解决方案 - 使用Node.js/Express在同一系统上托管多个Web应用程序的问题?
编辑:我计划最终使用WebSockets和HTTPS,我的设置可以支持的带宽量对我来说并不重要 - 这是一个开发服务器(至少现在).感谢David Ellis提出的WebSockets问题.
第二次编辑:感谢EhevuTov和David Ellis的回答,两者都有很大帮助.我仍在为我的应用程序确定一个整体结构,看起来这个问题通过StackOverflow问题得到了详细解决
第三次编辑:自从发布这个问题以来我已经找到了一些方法(尽管我还有很长的路要走).在我的GitHub存储库中查看这个文件,它利用了我从这个问题的答案中学到的东西!
我们正在跨多个应用程序实施单点登录[SSO],这些应用程序托管在不同的域和不同的服务器上.
现在如图所示,我们引入了一个Authenticate Server,它实际上与LDAP交互并对用户进行身份验证.将使用/与Authenticate Server通信的应用程序托管在不同的服务器和域中.
对于SSO,我不能使用会话变量,因为有不同的服务器和不同的应用程序,不同的域,域级cookie /会话变量没有帮助.
我正在寻找一个更好的解决方案,可用于跨越他们的SSO.任何已证实的实施都存在?如果是这样,请发布或指出我正确的方向.
java authentication servlets multiple-domains single-sign-on
我现在正在设置一些网站,其中许多网站都有多个网站.问题是:我是域名(使用ServerAlias)还是重定向请求?
显然,从可读性或脚本角度来看,ServerAlias更好/更容易.我听说如果一切都重定向到一个域,Google会更喜欢它.这是真的?如果是这样,应该使用什么重定向代码?
常见的vhost示例将包含:
ServerName example.net
ServerAlias www.example.net
Run Code Online (Sandbox Code Playgroud)
这是错的,除了example2.net和www.example2.net之外,www还应该是重定向吗?或者谷歌足够聪明,所有这些网站(或至少www)是同一个网站?
更新:想要别名的部分原因是它们更快.拨号用户的重定向仅仅是因为他们(或没有)使用www会显着增加初始页面加载.
更新和答案:感谢Paul找到Google链接,该链接指示我们"通过不延续重复内容处罚的神话来帮助您的网站管理员".但请注意,这仅适用于同一网站上的内容,例如文章"www.example.com/skates.asp?color=black&brand=riedell或www.example.com/skates.asp?brand=riedell&color=黑色".实际上,该文章明确指出"不要创建多个页面,子域或具有大量重复内容的域".
我有大约18个域需要重定向到一个新域.它必须在有或没有www前置的情况下工作.
我试过这个:
<IfModule mod_rewrite.c>
RewriteEngine on
Rewritecond %{HTTP_HOST} !^www\.domain\.com
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这给了我一个重定向循环(以前只能使用www,我想?).
.htaccess redirect multiple-domains http-status-code-301 web
我在IIS 7的端口443(https)中托管了一个网站"www.example1.com".现在我为同一个IP购买了一个新的"www.example2.com"域名.我想在443端口(我已经使用443端口用于"www.example1.com")托管该域(www.example2.com)中的另一个网站.
我怎样才能做到这一点?这是否可以在同一IP的端口443中托管两个域?如果有人可以,请让我知道正确的方法吗?我正在使用IIS 7.
此致,Karthik
最近我一直在跟踪craigslist上的垃圾邮件发送者.我最近发现他为他的武器库增加了一项新技术,他注册了一大堆域名,但他们都解析了相同的IP地址.
有没有办法获取IP地址并获取解析到该IP的所有域名列表?
10月,Facebook 宣布支持单个应用程序的多个域名.对于其应用程序具有多个域别名的开发人员来说,这是一个好消息 - 无论用户从哪个域查看该页面,都不再需要iframe来解决JavaScript SDK的问题!
不幸的是,它似乎没有像宣传的那样有效.
在博客文章中,他们说:
您的应用程序的URL(网站和/或移动Web URL)必须从"应用程序域"字段中列出的某个域派生.
这是合理的,但开发人员应用程序中的表单似乎是强制执行相反的策略.我有一对域名(例如,abc.com和xyz.com),站点URL设置为(http://abc.com),当我保存时,我收到错误消息:
xyz.com必须来自您的站点URL或您的移动Web URL.
有谁知道这个问题的解决方法?或者这是他们的意图,博客文章的内容是错误的?如果是这样,它似乎很愚蠢,因为很难从单个站点URL派生出多个域.
我对博客文章发表了评论,希望Facebook工程师能够看到它...但同时......
我正在开发一个网站,该网站要求在同一个域上的cms应用程序和在线商店应用程序之间共享会话,例如.
mydomain.com
Run Code Online (Sandbox Code Playgroud)
和
store.mydomain.com
Run Code Online (Sandbox Code Playgroud)
我已经取得了一些进展,它适用于我之间的本地构建
localhost/cms
Run Code Online (Sandbox Code Playgroud)
和
localhost/store
Run Code Online (Sandbox Code Playgroud)
基本上我已经完成了本文的建议
并攻击TempGetAppID存储过程以返回相同的应用程序ID(1).这似乎有效,因为它创建了像'abv5d2urx1asscfwuzw3wp4500000001'这样的ID,这是我所期望的.
我的问题是,当我将它部署到我们的测试环境时,它会在我在两个站点之间导航时创建一个新会话.因此,当我在cms网站上启动会话时,如果我导航到商店,它会创建一个新会话.这些在IIS7中设置为2个不同的网站.
在两个站点的web.config文件中,和元素都相同,如下所示(减去敏感信息)
有没有人知道为什么这可能不起作用?我正在两个站点共享表单身份验证,并且工作正常.任何帮助或想法将不胜感激!
非常感谢
戴夫
我有一个非独特的(其他人必须解决这个)问题围绕会话.
方案是我有5个顶级域(domain_a,domain_b,domain_c,domain_d,domain_e),以及每个域下的多个子域.我的应用程序需要在同一顶级域中的子域之间共享会话,例如sub_1.domain_b.com和sub2.domain_b.com可以共享,但sub_3.domain_c.com将是不同的会话.为了使问题更复杂,如果域a和b以及c&d也能够共享会话,那将是理想的.
所以规则:
domain_a与domain_b共享会话,并与其中的所有子域共享.很高兴在cookie_store中
domain_c与domain_d共享会话,并与其中的所有子域共享.很高兴在cookie_store中
domain_e仅在其子域中共享其会话.这需要在active_record_store中
我怎样才能做到这一点?
我尝试使用以下内容创建初始化程序:
MyApp::Application.config.session_store :cookie_store, :key => '_domain_a', :domain => '.domain_a.com'
MyApp::Application.config.session_store :cookie_store, :key => '_domain_b', :domain => '.domain_b.com'
MyApp::Application.config.session_store :cookie_store, :key => '_domain_c', :domain => '.domain_c.com'
MyApp::Application.config.session_store :cookie_store, :key => '_domain_d', :domain => '.domain_d.com'
MyApp::Application.config.session_store :active_record_store, :key => '_domain_e', :domain => '.domain_e.com'
Run Code Online (Sandbox Code Playgroud)
但是我不确定这是否有效.domain_e.com会话工作,这是有意义的,因为它是最后一个声明,任何想法?
我有一个WAMP服务器托管一些网站,但我有一个特定的网站有大约5个域名.我希望他们都指向正确的网站文件夹,并将所有内容重定向到单个域以进行搜索引擎优化.以下是虚拟主机文件中的内容:
<VirtualHost 50.62.82.101>
ServerAdmin info@hovaness.com
DocumentRoot "c:/wamp/www/example"
ServerName example.com
ServerAlias example.net www.example.com www.examples.net www.examples.com examples.com examples.net
ErrorLog "logs/example.com.log"
Run Code Online (Sandbox Code Playgroud)
htaccess文件如下所示:
RewriteEngine On
RewriteRule ^(.*)$ http://sellingwarriors.com/$1 [R=301,L]
RewriteBase /
Run Code Online (Sandbox Code Playgroud)
我只应该有一个或另一个吗?我也尝试过htaccess文件:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*?).example(s?).(.*)$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
RewriteBase /
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏