(转载) 原文链接: https://my.oschina.net/u/4007037/blog/3126459
摘要: 本文从 Nginx 的概念出发, 分别从反向代理的概念, 优势, 配置代码 3 个方面介绍了 Nginx 的特性之一反向代理.
分享者: 宜信支付结算八方数据团队高级技术经理 周恒
原文首发于支付结算技术团队公众号: 野指针 https://mp.weixin.qq.com/s/8ooKPZmvXs5x1a6eq_lr8A
一, Nginx 概念解读
对于新事物的理解, 最好的方式就是从概念入手, 本文作为《Nginx 专题》系列文章的第一篇, 先从 Nginx 的名称开始来分解这个神秘的引擎.
Nginx, 是 engine X 的缩写, 发音也是'engine x',2004 年由俄罗斯大神伊戈尔. 赛索耶夫开发, 提供了高性能而易用的 HTTP 反向代理功能. 后期还加入了 TCP 的反向代理支持.
最初 Nginx 是为了解决早年的 C10K 问题而生的. 什么是 C10K 呢? C 代表 Client 客户, 10K 代表 10000, 即一台服务器同时保持 1 万链接. 这在当时是一个非常棘手的问题.
通过 Google 搜索 Nginx 会得到以下解释:
Nginx 是异步框架的网页服务器, 也可以用作反向代理, 负载平衡器和 HTTP 缓存.
从这句话中, 我们可以得到下面几个关键:
异步框架
反向代理
负载均衡
HTTP 缓存
本专题文章将分别从这几个关键词来解读 Nginx 的强大之处. 本文先介绍 Nginx 特性之反向代理及其配置实现.
二, 反向代理
2.1 什么是反向代理
代理在生活中非常常见, 房屋中介是代理, 终端零售是代理, 选举代表是代理. 这些代理都可以帮助需求方减轻很多工作的复杂度, 提升效率和体验.
网络里的代理服务是什么样子, 我想各位读者也非常清楚, 这里再简单回顾一下: 假设我们想在公司上网看 B 站的视频, 而规范的公司出于安全和办公效率的考虑, 设置了网络策略, 不允许访问视频网站, 聪明的程序员不可能被这些事情所打败, 只要购买一台云服务, 搭建代理服务, 把浏览器设置上代理, 就可以轻松访问视频网站. 这就是常见的代理.
那么现在问题来了:"代理" 大家都懂, 这里为什么强调是反向代理呢? 难道还有正向代理? 答案是肯定的.
正向代理就是大家常见的代理, 以请求端也就是客户端的角度为正向, 用户发出请求经过的代理, 称为 "正向代理". 这时是用户主动选择使用代理.
反向代理: 先看图再解释.
主动权被反转, 原来是客户端选择代理, 现在是代理选择服务端节点. 由于控制权的反转, 这样的代理被称为 "反向代理".
2.2 反向代理的优点
1) 保护服务安全
隐藏服务节点的 IP;
将服务节点置于防火墙之后, 避免直接攻击业务节点服务器.
2) 服务节点更专注于业务, 同时提升性能
由于有反向代理的存在, 可以让反向代理服务器去实现比如 https,gzip 压缩等与业务无关的功能;
提供动静态分离, 将静态文件发往静态服务器或本地文件系统, 避免业务节点处理这些与业务无关的请求;
提供缓存机制, 将一些短时间内不会变化的动态内容, 在反向代理服务器这层增加缓存, 降低业务服务器的请求量;
由于控制权在代理服务这边, 完全可以根据服务节点的性能动态分配请求, 做到服务节点性能最佳.
正是由于 Ngxin 引入了反向代理的特性, 让请求和响应都要经过 Nginx, 因此给 Nginx 带来了非常多的可能. 比如负载均衡, HTTP 缓存等.
三, 反向代理的配置
Nginx 中关于反向代理的配置相当简单.
3.1 配置一个单节点的反向代理
- # simple reverse-proxy
- server {
- listen 80;
- server_name big.server.com;
- access_log logs/big.server.access.log main;
- # pass requests for dynamic content to Rails/turbogears/zope, et al
- location / {
- proxy_pass http://127.0.0.1:8080;
- }
- }
这里定义的规则是以 big.server.com 域名来请求 Nginx 的 80 端口, 会将请求代理到 127.0.0.1:8080 上.
3.2 配置一组反向代理的服务节点.
1) 配置一组反向代理并命名.
- upstream big_server_com {
- server 192.168.0.1:8000;
- server 192.168.0.1:8001;
- }
这里定义了 upstream, 这个 upstream 可以理解为上传流, 之所以叫上传是因为: 从服务器获取数据叫下载, 向服务器发送数据就叫上传, 这里是将数据请求发送到服务节点, 所以叫上传.
给这组服务节点命名为 big_server_com, 其中包括两个节点, 分别是: 192.168.0.1:8000 和 192.168.0.1:8001.
2) 配置规则: 让满足的请求能够反向代理到这组服务节点中.
- server {
- listen 80;
- server_name big.server.com;
- access_log logs/big.server.access.log main;
- location / {
- proxy_pass http://big_server_com;
- }
- }
这里定义的规则是以 big.server.com 域名来请求 Nginx 的 80 端口, 请求 url 是以 / 为后缀的所有请求, 都会转发到前面定义的名字为 big_server_com 的服务节点组.
四, 总结
本文从 Nginx 的概念出发, 分别从反向代理的概念, 优势, 配置代码 3 个方面介绍了 Nginx 的特性之一反向代理. 后续文章将继续介绍 Nginx 的另外三个特性: 负载均衡, HTTP 缓存, 异步框架, 敬请期待.
来源: http://www.bubuko.com/infodetail-3297711.html