- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在同时运行 Nodejs 和 Apache。
node-http-proxy 正在监听端口 80,然后将请求转发到 Apache(:9000) 或 Express(:8000)。
我在 Apache 上的虚拟主机如下所示:
<VirtualHost 127.0.0.1>
DocumentRoot "/localhost/myVhost"
ServerName myVhost
</VirtualHost>
我的问题是,在 Express/Nodejs 端拥有类似 vhost 的功能的“正确”方式是什么?我宁愿不必像这里建议的那样将每个 Nodejs 应用程序放在自己的端口上:
https://github.com/nodejitsu/node-http-proxy(标题为“使用 'Hostname Only' ProxyTable 的代理请求”部分)
我注意到 Connect(据我了解,它捆绑在 Express 中)具有一些虚拟主机功能。我应该使用那个吗?如果是这样,与 node-http-proxy 一起运行它的正确方法是什么?
http://www.senchalabs.org/connect/middleware-vhost.html
我还注意到另一个名为“Cluster”的模块,它似乎是相关的,但我不确定如何:
http://learnboost.github.com/cluster/
虽然不想让人不知所措,但我也遇到了一个叫做“Haibu”的东西,它似乎是相关的,但我不确定它是否只是使用虚拟主机的全面替代品:
https://github.com/nodejitsu/haibu
注意:我是前端人员,所以对很多服务器术语不是很熟悉
最佳答案
我从来不知道 Haibu 或 Cluster。但我确实找到了一个很好的解决方案来解决我的问题。令我惊讶的是,它实际上非常简单。但是,我对服务器了解不多,所以虽然这可行,但可能不是最佳的。
我在 Apache 上像平常一样设置虚拟主机(http://httpd.apache.org/docs/2.0/vhosts/examples.html)
我在 Node 上安装了以下内容
然后,出于个人风格,我将所有虚拟主机放在一个公共(public)目录(/localhost)中
然后,我将 Apache 切换到监听端口 80 以外的端口。我只是碰巧选择了端口 9000,因为我曾在某处看到过该端口。 (在 httpd.conf 中,将“Listen 80”更改为“Listen 9000”)。我还必须确保我的所有虚拟主机(在 extra/httpd-vhosts.conf 中定义)都设置为基于 IP 的 nameVirtualHost (127.0.0.1) 而不是使用端口 (*:80)。
在 Node 方面,我创建了我的应用程序/服务器(又名 Node 虚拟主机),它在端口 8000 上监听(端口号的任意选择)请参阅此链接以使用 express 创建服务器:http://expressjs.com/guide.html
然后我在我的/localhost 目录中创建了一个名为“nodeHttpProxy.js”的文件
使用 node-http-proxy,在 nodeHttpProxy.js 中,我创建了一个代理服务器,它在端口 80 上监听。使用 express,它包装了连接 (http://www.senchalabs.org/connect/) 我创建了我的虚拟主机。
nodeHttpProxy.js 文件如下所示:
// Module dependancies
var httpProxy = require('/usr/local/lib/node_modules/http-proxy/lib/node-http-proxy')
, express = require('/usr/local/lib/node_modules/express/lib/express');
// Http proxy-server
httpProxy.createServer(function (req, res, proxy) {
// Array of node host names
var nodeVhosts = [
'vhost1'
, 'vhost2'
]
, host = req.header('host')
, port = nodeVhosts.indexOf(host) > -1
? 8000
: 9000;
// Now proxy the request
proxy.proxyRequest(req, res, {
host: host
, port: port
});
})
.listen(80);
// Vhosts server
express.createServer()
.use(express.vhost('vhost1', require('./vhost1/app')))
.use(express.vhost('vhost2', require('./vhost2/app')))
.app.listen(8000);
如您所见,每次创建新的 Node 虚拟主机时,我都必须做两件事:
当然,我还必须在我的/localhost 目录中创建实际的主机路径/文件。
完成所有这些后,我只需要运行 nodeHttpProxy.js:
node nodeHttpProxy.js
您可能会遇到一些奇怪的“EACCESS”错误,在这种情况下,只需以 sudo 运行即可。
它将监听端口 80,如果主机与 nodeVhosts 数组中的名称之一匹配,它将请求转发到端口 8000 上的该主机,否则它将转发请求到端口 9000 上的该主机。
关于apache - 如何在 node-http-proxy 旁边使用虚拟主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368794/
据我了解,HTTP POST 请求的正文大小没有限制。因此,客户端可能会在一个 HTTP 请求中发送 千兆字节 的数据。现在我想知道 HTTP 服务器应该如何处理此类请求。 Tomcat 和 Jett
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
假设我有一个负载均衡器,然后是 2 个 Web 服务器,然后是一个负载均衡器,然后是 4 个应用程序服务器。 HTTP 响应是否遵循与 HTTP 请求服务相同的路径? 最佳答案 按路径,我假设您是网络
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
是否有特定的(或约定的)HTTP 响应消息(或除断开连接之外的其他操作)来阐明服务器不接受 pipelined HTTP requests ? 我正在寻找能让客户端停止流水线化它的请求并分别发送每个请
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我使用 Mule 作为 REST API AMQP。我必须发送自定义请求方法:“PRINT”,但我收到: Status Code: 400 Bad Request The request could
我需要针对具有不同 HTTP 响应代码的 URL 测试我的脚本。我如何获取响应代码 300、303 或 307 等的示例/示例现有 URL? 谢谢! 最佳答案 您可以使用 httpbin为此目的。 例
我正在尝试编写一个程序来匹配 HTTP 请求及其相应的响应。似乎在大多数情况下一切都运行良好(当传输完全有序时,即使不是,通过使用 TCP 序列号)。 我发现的唯一问题是当我有流水线请求时。在那之后,
RESTful Web Services鼓励使用 HTTP 303将客户端重定向到资源的规范表示。它仅在 HTTP GET 的上下文中讨论主题。 这是否也适用于其他 HTTP 方法?如果客户端尝试对非
当使用chunked HTTP传输编码时,为什么服务器需要同时写出chunk的字节大小并且后续的chunk数据以CRLF结尾? 这不会使发送二进制数据“CRLF-unclean”和方法有点多余吗? 如
这个问题在这里已经有了答案: Is it acceptable for a server to send a HTTP response before the entire request has
如果我向同一台服务器发出多个 HTTP Get 请求并收到每个请求的 HTTP 200 OK 响应,我如何使用 Wireshark 判断哪个请求映射到哪个响应? 目前看起来像是发出了一个 http 请
func main() { http.HandleFunc("/", handler) } func handler(w http.ResponseWriter, r http.Request
我找不到有值(value)的 NodeJS with Typescript 教程,所以我在无指导下潜入水中,果然我有一个问题。 我不明白这两行之间的区别: import * as http from
问一个关于Are HTTP headers case-sensitive?的问题,如果 HTTP 方法区分大小写,大多数服务器如何处理“get”或“post”与“GET”或“POST”? 例如,看起来
我正在使用ASP.NET,在其中我通过动词GET接收查询,该应用程序专用于该URL。 该代码有效,但是如果用户发送的密码使http 200无效,请回答我,并在消息的正文中显示“Fail user or
Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。 9
我是一名优秀的程序员,十分优秀!