nginx 反向代理服务器是何时启动nodejs服务的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 反向代理服务器是何时启动nodejs服务的相关的知识,希望对你有一定的参考价值。

参考技术A 利用nginx反向代理原理,实现集群服务器瞬间故障转移,看用于生产环境中综合设置的例子:#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区proxy_temp_path/data0/proxy_temp_dir;#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。proxy_cache_path/data0/proxy_cache_dirlevels=1:2keys_zone=cache_one:200minactive=1dmax_size=30g;#轮询服务器,weight为服务器权重,与访问频率成正比,max_fails最大超时次数,fail_timeout服务器代理监听超时时间upstreambackend_serverserver192.168.203.43:80weight=1max_fails=2fail_timeout=30s;server192.168.203.44:80weight=1max_fails=2fail_timeout=30s;server192.168.203.45:80weight=1max_fails=2fail_timeout=30s;serverlisten80;server_name192.168.203.42;indexindex.htmlindex.htm;root/data0/htdocs/www;location/#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;proxy_cachecache_one;#对不同的HTTP状态码设置不同的缓存时间proxy_cache_valid20030412h;#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内proxy_cache_key$host$uri$is_args$args;proxy_set_headerHost$host;proxy_set_headerX-Forwarded-For$remote_addr;proxy_passhttp://backend_server;expires1d;

Nodejs绑定域名与反向代理





Nodejs作为Web开发的后起之秀,在现在的国内环境下,虽比不上PHP的火热,没有.net那么广大的群众基础,盖不过Java的高大上,但Nodejs基于谷歌V8引擎的极速,异步IO与事件模型,无疑将是Web开发的重大革新;作为一个前端,对node向往已久。



现在大多数都是用Nginx做反向代理,我是一个服务器小白,百度看Nginx做反向配置的时候,一脸懵逼,按照别人的模板,修改自己想要的样子,除非你是一个运维,不然避免一些未知的小问题  代理后客户端的IP获取问题(获取所有客户的IP都是一样的……),上传文件的大小限制问题,都需要你再次重新配置相关的Nginx配置项;
基本配置方式如下:


命令行进入nginx.exe目录 -> start nginx (启动nginx) -> 打开conf目录里的nginx.conf 文件 –> 新增一段upstream

upstream nodejs

{

     server 127.0.0.1:3000; //你的Express项目端口 # 

     server 127.0.0.1:3001; 

     keepalive 64;

}

-> 在后面的server{}里引用这里定义好的nodejs

完整的片段如下:

server { 

    listen 80;

     server_name www.famanoder.com famanoder.com; //请求到80端口的                     host location / { 

            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_set_header Connection ""; proxy_pass http://nodejs;

         }

     }

重启nginx:nginx –s reload或者nginx –c conf/nginx.conf

顺利的话就可以跨域请求了;


因为node的出现让我有种为什么不用node去做反向代理呢,在node模块中找到了http-proxy模块,了解了如何用node做反向代理 不多说贴上代码


首先修改 hosts 配置个域名

Win + R 组合快捷键打开运行命令框,然后在打开后面键入或者粘贴上上面的Hosts文件路径,如图所示。

C:\WINDOWS\system32\drivers\etc

Nodejs绑定域名与反向代理



配置好域名之后就可以开始写了

创建一个proxy.js

const http = require('http'),

    express = require('express'),

    httpProxy = require('http-proxy'),

    proxy = httpProxy.createProxyServer({

        xfwd: true//true/false, adds x-forward headers

    }),

    config = require('./config'),

    fs = require('fs'),

    path = require('path'),

    app = express();

//配置路由

app.use((req, res) => {

    config.forEach(o => {

        console.log(req.headers.host,o.proxy,o.host);

        if (req.headers.host == o.host) {

            //请求

            proxy.web(req, res, {

                target: 'http://' + o.proxy

            })

        }

    })

})

var cookie = ""

//监听请求,可以在里面设置请求头和参数

proxy.on('proxyReq', function (proxyReq, req, res) {

    let bodyData = JSON.stringify(req.body);

    req.headers.cookie = cookie + req.headers.cookie;

    proxyReq.setHeader('Content-Type', 'application/json');

    //proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));

    proxyReq._headers = req.headers;

    return req

});

//监听响应

proxy.on('proxyRes', function (proxyRes, req, res) {

    var JSESSIONID = proxyRes.headers['set-cookie']

    if (JSESSIONID) {

        cookie = JSESSIONID;

        res.setHeader('Set-Cookie', proxyRes.headers['set-cookie'])

    }

});

//监听报错 

proxy.on('error', function (proxyReq, req, res) {

    res.send("<h1>404 Not Found</h1>")

});

console.log("服务已经启动!");

app.listen(9005);//监听端口,因为我的80端口被使用了 ,所有随便用了一个端口

接口文件config.js

module.exports = [

    {

        host: 'admin.test.com:9005',

        proxy: '127.0.0.1:3001/api'

    },

    {

        host:'127.0.0.1:9005',

        proxy:'127.0.0.1:3001/api',

    },

]


配置响应服务器serverRes.js

var express = require('express');

var app = express();

var responsePort = 3001;  // 请求页面跑在3001端口

app.get('/api', (req, res) => {

    console.log(11);

    res.send("Hello world from Proxy  :)")

});

app.listen(responsePort, function () {

    console.log('Responser is listening on port '+ responsePort);

});

这样子启动服务就可以用了


但是在做小demo的过程发现了一篇文章,上面详解讲解了Nginx和http-proxy的的性能区别nginx的处理能力是http-proxy的2倍有兴趣的可以看下文章

https://segmentfault.com/q/1010000004652320



END





以上是关于nginx 反向代理服务器是何时启动nodejs服务的的主要内容,如果未能解决你的问题,请参考以下文章

nginx 配置nodejs后台代理

使用 nginx 反向代理后面的 keycloak 保护 nodejs 中的路由

LInux中Nginx+nodejs 反向代理

用nginx来作反向代理(调度器)来访问虚拟web主机

Nginx反向代理与负载均衡

Nginx 反向代理