正向代理和反向代理
-
正向代理
正向代理类似一个跳板机,代理访问外部资源。
1.png
例如:Opera浏览器都是把请求发送到自己的代理服务器,然后代理服务器去请求真正的地址并处理数据压缩返回,提高速度;正向代理实际上访问就是外部地址
-
反向代理
实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。代理服务器连接同一个网络(大部分是内网服务没有公网ip)的服务器提供统一入口出口。
2.png
-
负载均衡原理
负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机和某台服务器闲置的情况。那么负载均衡的前提就是要2台以上服务器才能实现。
4.png -
负载均衡配置
5.png
代理缓存
9.png所谓鲁棒性就是健壮性
-
缓存文件放在哪
10.png -
指定哪些请求被缓存
11.png -
缓存有效期
12.png -
指定请求不走缓存
13.png
Lua扩展Nginx
- ngx_lua模块
Nginx需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者望而生畏。
ngx_lua模块
通过将lua解释器集成进Nginx,可以采用lua脚本实现业务逻辑。
该模块具备以下特性:
- 高并发、非阻塞的处理各种请求
- Lua内建协程,这样就可以很好的将异步回调转换成顺序调用的形式
- 每个协程都有一个独立的全局环境(变量空间),继承于全局共享的、只读的"common data"
得益于Lua协程的支持,ngx_lua的处理一万个并发请求时只需要很少的内存。根据测试,ngx_lua处理每个请求只需要2kb的内存,如果使用LuaJIT则会更少。
-
协程
1.png
Nginx的每个Worker进程都是epoll或kqueue这样的事件模型之上,封装成协程,每个请求都有一个协程进行处理。这正好与Lua内建协程的模型时一致的,所以即使ngx_lua需要执行Lua,相对于C有一定的开销,但依然能保证高并发能力
-
Nginx进程模型
2.png -
HTTP请求处理
3.png
-
ngx_lua指令
5.png
-
OpenResty
7.png -
ngx_lua实例
8.png
Nginx实践
-
Nginx监听端口
9.png
-
Nginx虚拟主机
11.png
之前修改了host文件解析yes.163.com到本地的127.0.0.1:80;同时访问yes.163.com其实被location /会通过proxy_pass解析到http://origin.163.com。会去upstream解析真的地址,如果有多个则默认轮询返回对应地址。同时8080在最下面然后了字符串。最终就会返回最后一行return的字符串
-
Nginx配置location
13.png
注意:location是有顺序的,如果一个请求有可能被多个location匹配,实际上这个请求会被第一个location处理。最后,location/{}会处理所有的请求
14.png
-
Nginx常规配置
15.png
Nginx高性能配置
17.png 18.png 19.png 20.png 21.png-
Nginx事件模型
22.png -
Nginx配置实例
23.png
网友评论