一直觉得反向代理这个词专业,太牛了。以至于没敢去接触nginx,今天在家里闲的没事逛知乎看到一篇《反向代理为什么叫反向代理》的帖子。一边翻一边理解,不得不佩服知乎的各路大神,旁征博引,深入浅出,图文并茂,绘声绘影的传道解惑,逐渐明白了什么是反向代理。直到看到一个答主的答案:
凶手-》毛利-》柯南。
瞬间豁然开朗。
打个比方来说:
把服务器想象成饭店,没有Nginx的情况,就如同每一个厨师服务一桌顾客,从点菜开始到炒菜到上菜到收银,有n个厨师就只能服务n桌顾客。有了Nginx的话,Nginx就成了强大的服务员,把招呼,点菜、上菜和收银的活都做了,厨师只需要专心炒菜就行。这样饭店的效率就大大提高了。
技术一点的话:
请求如果直接发到同步处理的后端,那么从收到请求到把响应发出去这段时间,一个进程的资源就被占用了(比如Apache的prefork模式)。在慢连接的情况下,这个进程除了处理之外的大多数时间基本上都耗费在了无意义的等待上。Nginx在这方面的优势就在于它的异步非阻塞模型。这意味着Nginx可以通过基于事件的方式同时处理和维护多个请求,而后端就只需要去做逻辑计算,节约了等待时间去处理更多的请求。
Mac及linux环境使用nginx
了解什么是反向代理之后迫不及待的准备试一下nginx
1、brew install nginx(mac或linux安装nginx还有几个依赖需要安装,强烈推荐使用brew,可以自动安装依赖)
2、nginx -v 看下是否安装成功
3、sudo nginx 启动nginx
Window环境使用nginx
(window下可以使用npm安装,个人感觉直接去官网下载更加便捷)
项目在html里,配置文件在conf的 nginx.conf里。
双击nginx.exe就可以启动
就是这么简单 打开浏览器输入localhost:8080现在服务器就启动起来了
顺便提一下nginx常用的一些命令
nginx -s 指令
reload 重启 nginx -s reload
stop 关闭 nginx -s stop
...
关于反向代理的配置
/usr/local/etc/nginx/nginx.conf 这个是nginx的配置文件
server {
listen 8082;(端口号)
server_name localhost;(服务器域名地址)
location / {
root html; (项目目录)
index index.html index.htm;
}
#下面是反向代理部分(通过正则api后面的代理到proxy_pass地址,下面放例子)
location /api {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://localhost:8999;
}
}
例子
<script>
var xhr=new XMLHttpRequest()
xhr.open('get','/api/gp')
xhr.send()
xhr.onreadystatechange=function(){
console.log(xhr)
if(xhr.readyState==4){
console.log(JSON.parse(xhr.responseText))
}
}
</script>
js放到了8082端口上
localhost:8999/gp 这个是接口地址
通过proxy反向代理 把8999上面的东西拿到了8082上面然后进行请求,就形成了同源也就不存在跨域了。
nginx的入门相当简单
但这仅仅是最基础入门,一入代码深似海。
通过nginx来反向代理也是可以分分钟学会的
排版有点乱,有时间再来排版和更详细的介绍吧。