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
配置好域名之后就可以开始写了
创建一个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
以上是关于nginx 反向代理服务器是何时启动nodejs服务的的主要内容,如果未能解决你的问题,请参考以下文章