nodejs抓取动态网页(Nodejs反向代理的建站问题,你知道吗?小前端)
优采云 发布时间: 2022-04-06 12:17nodejs抓取动态网页(Nodejs反向代理的建站问题,你知道吗?小前端)
所有的demo都不是完整的程序,所有没有上线的程序都只是demo;
作为Web开发的后起之秀,在目前的国内环境下,Nodejs虽然不如PHP流行,但没有.net的海量基础,也无法覆盖Java的高度。但是,Nodejs 基于谷歌 V8 引擎的速度、异步 IO 和事件模型,无疑将是 Web 开发的一大创新;我是一个小前端,自从知道了Nodejs,就觊觎了好久,期待终于可以在闲暇之余用Express4.x做一个断断续续的个人博客(花开花)建筑);
为了让我的博客不只是本地demo,我买了一台服务器,搭建好环境,选好日期,准备上线了。上线后发现自己是个白痴……在目前的国家,Nodejs是小众。当然,问题在所难免,你可以随便抱怨,但既然选择了,就必须相信自己不是瞎子,当然要坚定地走下去。继续; 关于上线后需要先解决的域名绑定问题,我会分享给喜欢Nodejs的朋友和前端朋友;可能你做过.net,PHP什么的,有IIS,一键建站软件,那没关系,我只是站在一个小前端的角度,分享一下基于Nodejs建站的问题;
Nginx 反向代理方式现在很流行。百度的时候,一开始也是选择使用Nginx反向代理我的博客站点;我是服务器新手,一开始真的伤不起,但也没什么好怕的。是的,你只需要根据别人分享的模型修改成你的,除非你想认真运维;当然也难免会出现一些无法预料的小问题,比如:客户代理后终端的IP获取问题(我当时获取的所有客户的IP都是一样的……),上传的大小限制文件,需要重新配置相关的Nginx配置项;
基本配置如下:
命令行进入nginx.exe目录->启动nginx(启动nginx)->打开conf目录下的nginx.conf文件->添加新的upstream
upstream nodejs{
server 127.0.0.1:3000; //你的Express项目端口
# server 127.0.0.1:3001;
keepalive 64;
}
-> 参考下面服务器中定义的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;
}
}
如果不出意外,您现在可以使用域名访问您的博客;
Nodejs 功能强大;
几天后,学习了Nodejs的http-proxy模块,用于创建代理服务器;反正都是折腾,所以决定不使用nginx,而是使用Noders的http-proxy;不是nginx不好用,只是个人选择偏好而已;相信前端的 Noder 一定会对自己的模块更加热情;
http.createServer() 创建一个常规的http服务器*敏*感*词*80端口,通过http-proxy模块proxy.createProxyServer()创建一个代理服务器,通过proxy.web()方法分发每个请求;
在根目录下新建proxy.js文件:
var proxy=require(‘http-proxy’).createProxyServer({});
proxy.on(function(err,req,res){
res.writeHead(500,{
‘Content-Type’:’text/plain’
});
});
var server=require(‘http’).createServer(function(req,res){
var host= req.headers.host;
switch(host){
case ‘www.famanoder.com’:
proxy.web(req,res,{target:’http://localhost:3000’});
break;
case 'famanoder.com':
proxy.web(req, res, { target: 'http://localhost:4030' });
break;
default:
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Welcome to my server!');
}
});
console.log("listening on port 80")
server.listen(80);
是不是也很好,看起来很酷,OK,下一步就是去app.js,使用proxy模块;
加一句:require('./proxy'); 就是这样,去浏览器看看是否也实现了反向代理。
至此,Nodejs反向代理的两种方式都已经实现了。这不是Demo,你的程序真的在运行;下一步是根据其他具体业务跟进进一步探索;
上周末出去散步的时候,看到一个大叔的背上印着一行字:“想当将军!” 那时,我在心里给了这位大叔一万个赞。我是一个平民。码农,路漫漫其修远兮,但——我们还年轻!
本文为慕课网原创作者,转载请注明【原作者及本文链接地址】。侵权必究,谢谢合作!