关于vhost

  个人理解为vhost是一种可以在一个ip下同时部署多个不同域名站点的的概念。

  其好处就是对一些小型的网站不必每个网站都占用一个ip,或者说一个服务,举个例子,vhost的概念就相当于打开一个浏览器,里面有多个窗口,每个窗口就是一个站点,而不是说打开多个浏览器,一个浏览器只开一个窗口。

  之所以可以这么做,主要因为以下2方面:

    1、访问一个域名时,客户端不仅通过dns找到对应的ip,还会把域名也发送过去。

    2、中间件的存在,使得每个请求可以被预处理,从而可以通过域名获取客户端访问的站点。

关于中间件

  在这里可以这么理解,中间件就是一系列的过滤器,当服务器接收每一个到请求时,会先通过中间价做一些处理,再到真正的请求响应程序,在预处理的过程中的改动都会存在request中。

基于nodejs的代码实现

需要安装2个模块

npm install express -g
npm install vhost -g

简单代码,文件名为Evhost.js

var ex = require('express')
var vhost = require('vhost') var app = ex() function handler(req, res, next) {
console.log(req.vhost);
res.send('your request site: ' + req.vhost.hostname)
} var domain_sn = vhost('sn.cn', handler) var domain_vra = vhost('vra.cn', handler) app.use(domain_sn)//使用中间件
app.use(domain_vra) app.listen(80,function(err){
if (err)
throw err
console.log('服务启动,监听端口:80');
})

运行该程序

node Evhost.js

关于express:www.expressjs.com.cn/

关于vhost:https://github.com/expressjs/vhost

vhost关键代码解析,整个vhost的模块代码其实很简单

/**
* Create a vhost middleware.
*
* @param {string|RegExp} hostname
* @param {function} handle
* @return {Function}
* @api public
*/ module.exports = function vhost(hostname, handle) {
if (!hostname) {
throw new TypeError('argument hostname is required')
} if (!handle) {
throw new TypeError('argument handle is required')
} if (typeof handle !== 'function') {
throw new TypeError('argument handle must be a function')
} // create regular expression for hostname
var regexp = hostregexp(hostname) return function vhost(req, res, next) {//返回一个函数,作为中间件
var vhostdata = vhostof(req, regexp)//通过正则表达式判断域名是否是这个host处理
if (!vhostdata) {//不是则调到下一个中间件
return next()
} // populate
req.vhost = vhostdata//将域名信息存到request的vhost变量汇中 // handle
handle(req, res, next)//执行这个host绑定的处理程序
};
};

通过输入域名进行访问

因为需要获取域名信息,所以不可以通过输入ip直接进行访问,由于80端口是默认的http端口,所有不需要在后面再加上端口号。

如果该端口被占用则必须先关闭占用该端口的程序:http://jingyan.baidu.com/article/37bce2be10a5c21002f3a2cf.html

在访问之前还需要配置系统的vhost:http://www.cnblogs.com/sesna/p/host_troubleshot.html

  

vhost in nodejs的更多相关文章

  1. Node.js之路【第二篇】Nodejs中的pip(NPM)&REPL

    什么是NPM 在学Python的时候我们肯定会使用第三方模块或者编写模块供别人使用,我们有一个非常好用的pip来帮我们管理我们的模块包!那么Nodejs重的模块包呢? 对没错就是NPM,他是随同Nod ...

  2. nginx 各类网站设置 (laravel , thinkphp , nodejs , https)

    基础部分设置 [root@centos ~]# vim /opt/nginx/conf/nginx.conf user www www;worker_processes auto;pid logs/n ...

  3. nodejs review-03

    39 Serve different file types with our server 处理文件类型 function content_type(filename) { var ext = pat ...

  4. [转]Nodejs基础中间件Connect

    Nodejs基础中间件Connect 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的J ...

  5. Nodejs基础中间件

    Nodejs基础中间件Connect   http://www.tuicool.com/articles/emeuie 关于作者 张丹(Conan), 程序员Java,R,PHP,Javascript ...

  6. Nodejs基础中间件Connect

    http://www.tuicool.com/articles/emeuie 关于作者 张丹(Conan), 程序员Java,R,PHP,Javascript weibo:@Conan_Z blog: ...

  7. NodeJS 框架 Express 从 3.0升级至4.0的新特性

    NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...

  8. nodejs学习笔记之包、模块实现

        简单了解了node的安装和一些基本的常识之后,今天学习了node中很重要的包和模块的一些知识点.       首先学习一下包的规范,它由包结构和包描述两部分组成.包结构用于组织包的各种文件,包 ...

  9. NodeJS爬虫系统初探

    NodeJS爬虫系统 NodeJS爬虫系统 0. 概论 爬虫是一种自动获取网页内容的程序.是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上是针对爬虫而做出的优化. robots.txt是一个文本文 ...

随机推荐

  1. 与Xamarin.Forms跨平台的用户界面

    Xamarin.Forms 与Xamarin.Forms跨平台的用户界面 Xamarin的. 形式是一个跨平台的UI工具包,它允许开发人员 轻松地创建本地用户界面布局,可以共享 在Android,iO ...

  2. [Angular] Angular i18n Alternative Expressions Support (select)

    For example we have those code: <div class="course-category" [ngSwitch]="course.ca ...

  3. DNS域名解析服务

    一.DNS的体系结构: DNS:域名解析系统 DNS由根域.顶级域和子域构成.根域主要负责管理顶级域,顶级域主要负责管理其下面子域. .代表DNS的根域. .com..edu等代表顶级域. shou. ...

  4. android工具类(2)NetWorkHelper 网络工具类

    import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkIn ...

  5. iOS 使用 AVCaptureVideoDataOutputSampleBufferDelegate获取实时拍照的视频流

    iOS 使用 AVCaptureVideoDataOutputSampleBufferDelegate获取实时拍照的视频流 可用于实时视频聊天 实时视频远程监控 #import <AVFound ...

  6. 算法笔记_055:蓝桥杯练习 Tricky and Clever Password (Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 在年轻的时候,我们故事中的英雄——国王 Copa——他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好 ...

  7. TI BSL in python

    今天花了一下午在这个上面,被这个工具整没脾气了快.花点功夫记录一下. 代码是在linux下下过来的: bzr branch lp:python-msp430-tools 看了下,有我想要的器件.然后想 ...

  8. Odoo/OpenERP 日志配置、使用及实现

    当应用处于生产环境时,日志提供了有价值的运行时调试及监控信息,并且,也是一个有用的调试工具对于处于开发阶段的应用来说.此文描述在Odoo8.0中日志的配置.使用及实现 日志配置        Odoo ...

  9. centos7 install flash player

    1.在 https://get.adobe.com/cn/flashplayer/ 上选择需要下载版本---> ( YUM,适用于Linux (YUM) ); 2.进入root权限后,进入你的下 ...

  10. fastdfs安装

    1:安装libevent     rpm -aq |grep libevent|xargs rpm -e --nodeps     tar zxvf libevent-2.0.21-stable.ta ...