--读《谁说前端不须要懂-Nginx反向代理与负载均衡》有感html
读了上文发现内容虽然仍是挺好的,但看完,为啥要懂nginx呀,负载均衡和前端哪里有什么半毛钱关系了,没说清楚呀。前端
固然这个面向前端作个科普文让你们多知道一项只是仍是不错的,文章拉到最后面看了下做者的使用场景举例提及个 host 给让产品走查。 这不就是起个webserver 容器么,和反向代理么?node
这篇内容很热,结合最近聊天群里老是有人问起,我想前端还有不少人想知道这方面知识的,因此在这里也科普下,经常使用的代理方式有哪些。webpack
本文广受朋友喜好,说明对不少朋友仍是有帮助的,另外很多网友对本文的标题意见很大,本文的标题针对引文标题来讲,主旨为的是强调有更合适的方法作更正确的事情,并不阻止你们学习更多知识nginx
熟悉 nodejs 的朋友应该知道有个很是好和强大的工具模块 http-server 这是一枚小火箭能帮助你直冲云霄,使用方式以下:git
首先须要安装 nodejs (对于nodejs 合格的前端应该都安装上了吧?这里就不复述了)。github
安装全局模块web
npm install http-server -g
复制代码
而后到你须要运行展现的 html 资源目录执行npm
http-server -P http://www.your-backend.com/api
复制代码
http://www.your-backend.com/api 是你后端反向代理的接口地址,你须要修改为你本身的。编程
而后你就可使用 http://localhost:8080 进行访问了(若是 8080 端口不被占用掉的话,若占用了你能够 -p 指定其余端口 ),是否是超级 easy? 更多参数能够查询官方文档 http-server。
此工具的亮点在于零配置,随时随地启动 给小伙伴走查、移动端调试不是三秒搞定么,难道必定须要那么麻烦去写个nginx 配置?
webpack 对于前端来讲是个强大的工具, 除了可以帮助你打包和启动调试服务器外, 代理的功能也值得你了解下。 惯例上官网资料文档地址
最简方式:
module.exports = {
//...
devServer: {
proxy: {
'/api': 'http://localhost:3000'
}
}
};
复制代码
上述配置将自动把 /api 这一地址的访问转请求到 http://localhost:3000 从而起到了代理的做用。
若是你的规则须要去掉 api 前缀,你可使用重写地址的方式。
module.exports = {
//...
devServer: {
proxy: {
'/api': {
target: 'http://localhost:3000',
pathRewrite: {'^/api' : ''}
}
}
}
};
复制代码
你可能还遇到 https 的安全问题触发未验证的证书错误, 则你能够简单的加上 secure: false 来处理
module.exports = {
//...
devServer: {
proxy: {
'/api': {
target: 'https://other-server.example.com',
secure: false
}
}
}
};
复制代码
有时你不想代理全部的请求。能够基于一个函数的返回值绕过代理。 在函数中你能够访问请求体、响应体和代理选项。必须返回 false 或路径,来跳过代理请求。 例如:对于浏览器请求,你想要提供一个 HTML 页面,可是对于 API 请求则保持代理。你能够这样作:
proxy: {
"/api": {
target: "http://localhost:3000",
bypass: function(req, res, proxyOptions) {
if (req.headers.accept.indexOf("html") !== -1) {
console.log("Skipping proxy for browser request.");
return "/index.html";
}
}
}
}
复制代码
多个路径的代理
proxy: [{
context: ["/auth", "/api"],
target: "http://localhost:3000",
}]
复制代码
总之 webpack 提供了多种灵活的方式, 相信大多时候都能知足到你到要求。
此方式最合适项目已经使 webpack 工程项目,随项目启动自动开启
node-http-proxy 提供了一个能够编程模式的代理环境,若是你有很特殊的需求如session、cookie 已绑定的域处理成其余的域什么,或是内容还要转换处理等,你能够用这个方式来处理复杂的 hacker.
如增长特殊请求头;
var http = require('http'),
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
proxy.on('proxyReq', function(proxyReq, req, res, options) {
proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');
});
var server = http.createServer(function(req, res) {
// You can define here your custom logic to handle the request
// and then proxy the request.
proxy.web(req, res, {
target: 'http://127.0.0.1:5060'
});
});
console.log("listening on port 5050")
server.listen(5050);
复制代码
angular 的 proxy 写法形式和 webpack 基本同样, 你须要一份以下的配置文件 proxy.conf.json 个人开源项目 typerx采用的就是这种方式
{
"/api": {
"target": "http://localhost:5400/",
"secure": false
},
"/user": {
"target": "http://localhost:5400/",
"secure": false
},
"/uploads": {
"target": "http://localhost:5400/",
"secure": false
}
}
复制代码
配置完成以后使用 proxy-config 参数指定 proxy.conf.json 便可调用代理配置
ng serve --proxy-config proxy.conf.json
复制代码
其余更多方式 , 若是你看完更多方式是否是以为和 webpack 是同样的呢,实际上他就是 webpack 哈?
此方式是工程化后的正确使用姿式
open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/your/path/
复制代码
你能够继续了解他 谁说前端不须要懂-Nginx反向代理与负载均衡