使用node和nginx部署网站服务

在之前的asp时代我们网站通常是使用windows的iis来架设,后来php时代,一般是启动php的服务,然后使用http server服务来做转发(反向代理),然而如今使用node时候如何处理呢?

众所周知,一个域名的直接访问是解析ip的80端口(浏览器会默认隐藏80端口),然而每一个node的进程又只能占用一个端口,那么当一个服务器(是指承载这些网站的机器,可能是windows、linux或者mac)上搭建的网站超过一个时,端口不够用乍破?那么就使用http server来代理吧~

使用nginx做反向代理

http server有很多,这里以nginx为例,谁让她好用呢
首先可以点这里看下 什么是反向代理 ,一般情况下是使用node监听某些端口,然后按域名(看自己需求)进行转换,比如:

a.com => 9000
b.com => 9001
c.com => 9002
...
那么来修改nginx的配置conf吧,推荐大家使用一个站点一个.conf文件,通过include来加载,比如:

nginx.conf文件是这样的:

confhttp {
    # 其他的配置

    # 加载所有conf目录下的配置文件 
    include conf/*.conf;
}
conf目录下的每一个.conf文件都是一个站点,比如a.com的代理到9000端口的配置大概是:

conf# 文件是:conf/a.com.conf
server {
    server_name a.com;
    listen 80;

    location / {
        # proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:9000$request_uri;
        proxy_redirect off;
    }
}

现在启用你的nginx并启动你的node程序就可以使用a.com访问了

使用pm2管理node进程

nginx起动了,也可以监听多个域名了,可以运行多个node进程(服务)难道要开n个窗口,然后node index.js启动着吗?我们可以使用一些成熟的服务进程管理器,比如pm2,比如:

shell# a.com网站
# 由于a.com的程序index.js是监听了9000端口,我们启用这个服务的时候以服务名+端口信息来命令名称,这样可以使用`pm2 ls`的时候很清晰的查看
cd a.com && pm2 start index.js --name a.com-9000 -e err.log -o out.log

# b.com
cd b.com && pm2 start index.js --name a.com-9001 -e err.log -o out.log
使用pm2 ls查看已启动的服务,如:

┌─────────────────┬────┬──────┬───────┬────────┬─────────┬────────┬──────────────┬──────────┐
│ App name        │ id │ mode │ pid   │ status │ restart │ uptime │ memory       │ watching │
├─────────────────┼────┼──────┼───────┼────────┼─────────┼────────┼──────────────┼──────────┤
│ a.com-9000      │ 0  │ fork │ 5001  │ online │ 0       │ 27D    │ 200.082 MB   │ disabled │
│ b.com-9001      │ 1  │ fork │ 13484 │ online │ 9       │ 31h    │ 64.535 MB    │ disabled │
└─────────────────┴────┴──────┴───────┴────────┴─────────┴────────┴──────────────┴──────────┘
当然pm2远不止这些,她还可以守护进程、负载、多核等功能,具体请看 pm2说明

使用nginx托管静态资源

由于我们已经使用nginx代理node层的网站服务,那么我们可以优先使用nginx来托管静态资源,比如:

# 网站根目录
/wwwroot/a.com/

# 网站静态资源
/wwwroot/a.com/static/

# node程序

/wwwroot/a.com/lib/
那么可以把nginx的根目录设置到/wwwroot/a.com/static/,然后配置对未找到的url路径重写到node,这样可以高效的利用nginx,大概配置如:

confserver {
    listen       80;
    server_name     a.com;

    root /wwwroot/a.com/static/;

    # 如果文件不存在则重写到一个假文件上
    if ( !-f $request_filename ){
       rewrite (.*) /server.js;
    }

    # 代理一个假文件以来配合上面的不存在重写
    location = /server.js {
        #proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:node端口$request_uri;
        proxy_redirect off;
    }
}

这样配置之后,当访问网站时如果访问的是已存在的静态文件,那么nginx会直接返回,如果文件不存在,则会代理到node,node层可以处理404的情况~

时间: 2024-09-20 21:08:31

使用node和nginx部署网站服务的相关文章

web服务-Azure中部署网站,如何使用不同的用户名,不想使用同一个用户

问题描述 Azure中部署网站,如何使用不同的用户名,不想使用同一个用户 在Azure中部署web服务,默认情况下都是使用同一个用户名,即使是不同的订阅,不同的web服务.怎么才能做到一个web服务拥有自己专门的部署用户,而不是公用用户

简单的构建和部署云服务的方法

Azure的管理门户为您提供了,部署和构建云服务的两种方法:"自定义构建"(Quick Create)和"快速构建"(Custom Create). 我在这里为你们介绍了,如何使用快速构建的方法.首先构建一项新的云服务,然后使用上传的(Update)功能,在Azure中上传和部署云服务包.如果你使用这样的方法,Azure管理门户提供了方便的链接,用来满足你的全部要求.如果你在构建云服务时准备开始部署云服务,那么可以使用"自定义构建",或者是同时执

Docker -- 2 -- 利用docker部署网站和数据库

在Docker – 系统整洁之道 – 1中已经对Docker的一些命令和Docker镜像的使用及操作做了记录. 这次就利用docker进行一次真正的实例使用,使用docker搭建一个简单的答题系统,这个系统是当时做来给网络安全周做手机答题的系统,很简单,代码风格很差. 这篇主要记录了三种docker使用的方式. 用supervisor方式运行一个多进程的docker实例 创建一个ngnix和php运行的环境 创建一个ngnix,php,mysql集合运行的环境,使用docker-compose构

网站服务管理系统wdcp系列教程之(一)

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 当我们安装了网站服务管理系统wdcp之后,在我们使用wdcp的过程中可能会出现各种疑问,下面给大家收集和整理几个比较常见的问题及解决方法,如若还有其他疑问,可到wdlinux论坛寻找相关的教程. 1.wdcp,wdOS,lanmp安装后的必须/常规操作 在wdcp,wdOS的系统里,因有一些是使用了默认密码的 默认的,所有有用到的默认密码均为

如何构建和部署云服务?

Azure管理门户为你提供了构建和部署云服务的两种方法:"快速构建"(Quick Create)和"自定义构建"(Custom Create). 本文介绍了如何使用快速构建方法构建一项新的云服务,然后使用上传(Update)功能,在Azure中上传和部署云服务包.如果你使用这种方法,Azure管理门户提供了方便的链接,以满足你的所有要求.如果你在构建云服务时准备部署云服务,可以使用"自定义构建",同时执行这两项操作. 注意:如果你打算从Windo

Nginx配置网站适配PC和手机

考虑到网站的在多种设备下的兼容性,有很多网站会有手机版和电脑版两个版本.访问同一个网站URL,当服务端识别出用户使用电脑访问,就打开电脑版的页面,用户如果使用手机访问,则会得到手机版的页面. 1.判断客户端的设备类型 要想让网站适配PC和手机设备,首先要能做出准确的判断.HTTP请求的Header中的User-Agent可以区分客户端的浏览器类型,可以通过User-Agent来判断客户端的设备. 无论是PC还是手机,由于操作系统.浏览器的多样性,自己来实现这个判断并不容易.好在国外有一套开源的通

如何快速实现一个基于Nginx的网站监控场景----需求篇

一切从应用服务监控说起 小明所在的一家小型互联网创业公司一直将应用运行在国内某A云上.该应用采用通用的分布式Nginx+App架构为用户提供电商数据统计的webservice 服务.应用运行至今除偶发各类Bug, 性能问题以外,情况还算良好.   最近,小明的老板给小明布置了一个任务,希望把应用服务监控起来,以提高应用运行质量.老板的需求有三点: 1.    先以应用服务监控为抓手,能 a)     实时统计应用各类服务的调用次数 b)     基于a,实时统计各类服务各类返回值的次数,如200

azure-一个网站服务中,怎样发布多个子网站啊~

问题描述 一个网站服务中,怎样发布多个子网站啊~ Hello,everybody!!! 我在原来的项目中有3个子网站,我可以在IIS中使用虚拟目录发布,但是Azure中我怎么去操作,有没有这样的方式啊 ??? 求解答!!!!! 解决方案 下一个开源的CMS,里面有源码 解决方案二: 实际配置的时候需要增加不同的IP地址,然后把域名分别对应到IP 解决方案三: 您好, 如果您想问的是虚拟目录或虚拟文件夹的话,windows Azure是可以实现的. 您也可以将您的网站发布到虚拟文件夹中,您可尝试如

微服务架构如何实现网站服务垂直化拆分

3月10日,2017阿里云网站行业热点问题和解决方案线下研讨会在上海举行.阿里云产品专家银时为大家带来<微服务架构如何实现网站服务垂直化拆分>精彩演讲.主要从服务化的缘起.微服务架构的形成,以及在大规模的服务化过程中所面临的一些挑战以及解决方案,跟大家分享整个微服务.   以下内容根据现场分享和讲师PPT整理而成.   关于讲师:   倪超,阿里花名银时,阿里巴巴企业互联网架构平台产品专家.国家认证系统分析师.IT畅销书作者,著有<从Paxos到ZooKeeper>一书,2015年