Nginx专题(1):Nginx之反向代理及配置

2020 年 2 月 06 日

Nginx专题(1):Nginx之反向代理及配置

一、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 站的视频,而规范的公司出于安全和办公效率的考虑,设置了网络策略,不允许访问视频网站,聪明的程序员不可能被这些事情所打败,只要购买一台云服务,搭建代理服务,把浏览器设置上代理,就可以轻松访问视频网站。这就是常见的代理。


1573007506690086761.png


那么现在问题来了:“代理”大家都懂,这里为什么强调是反向代理呢?难道还有正向代理?答案是肯定的。


正向代理就是大家常见的代理,以请求端也就是客户端的角度为正向,用户发出请求经过的代理,称为“正向代理”。这时是用户主动选择使用代理。


反向代理:先看图再解释。


1573007514500040177.png


主动权被反转,原来是客户端选择代理,现在是代理选择服务端节点。由于控制权的反转,这样的代理被称为“反向代理”。


2.2 反向代理的优点


1)保护服务安全


  • 隐藏服务节点的IP;

  • 将服务节点置于防火墙之后,避免直接攻击业务节点服务器。


2)服务节点更专注于业务,同时提升性能


  • 由于有反向代理的存在,可以让反向代理服务器去实现比如https、gzip压缩等与业务无关的功能;

  • 提供动静态分离,将静态文件发往静态服务器或本地文件系统,避免业务节点处理这些与业务无关的请求;

  • 提供缓存机制,将一些短时间内不会变化的动态内容,在反向代理服务器这层增加缓存,降低业务服务器的请求量;

  • 由于控制权在代理服务这边,完全可以根据服务节点的性能动态分配请求,做到服务节点性能最佳。


正是由于 Ngxin 引入了反向代理的特性,让请求和响应都要经过 Nginx,因此给 Nginx 带来了非常多的可能。比如负载均衡、HTTP 缓存等。


1573007524870008807.png


三、反向代理的配置


Nginx 中关于反向代理的配置相当简单。


3.1 配置一个单节点的反向代理


# simple reverse-proxyserver {     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://college.creditease.cn/detail/321


2020 年 2 月 06 日 21:31102

评论

发布
暂无评论
发现更多内容

国产数据库的经济民族

郭华

数据库 商业

物理实现(Physical Implementation)

老壳有点爽

芯片 集成电路 IC 物理设计 PI

芯片行业的主要生意模式

老壳有点爽

芯片 集成电路 IC

芯片行业基本生态:设计生产封装的行业分工

老壳有点爽

芯片 集成电路 IC

sed语言学习技巧(1)

老壳有点爽

vim 编程语言 sed 脚本语言

Golang领域模型-六边形架构

奔奔奔跑

golang 领域驱动设计 微服务拆分 架构设计

看门狗 | 分布式锁架构设计方案-01

高翔龙

redis 分布式锁 RedLock WatchDog

中国大陆芯片行业发展概况

老壳有点爽

芯片 集成电路 IC

数字后端工程师发展六阶段

老壳有点爽

芯片 集成电路 IC 数字电路工程师

2020深圳站-GIAC全球互联网架构大会PPT分享

高翔龙

架构 分布式系统 服务治理 大型网站演变 全链路压测

成都信息工程大学的区块链工程成全国首个区块链工程本科专业

CECBC区块链专委会

区块链技术 区块链工程

集成电路设计概括

老壳有点爽

芯片 集成电路 IC

数字电路后端设计流程

老壳有点爽

设计 flow 集成电路 IC

半导体行业个人理解

老壳有点爽

芯片 半导体 集成电路 IC

模拟电路设计工程师发展九段

老壳有点爽

集成电路 IC 芯片设计 模拟电路

sed 语言学习技巧(2)

老壳有点爽

vim sed 脚本语言

IC设计流程及工具

老壳有点爽

芯片 集成电路 IC IC设计流程及工具

MySQL备份与恢复场景示例

Simon

MySQL

MySQL DDL详情揭露

Simon

MySQL

最初芯片国产化是怎么来的?

老壳有点爽

芯片 集成电路 国产化 替代

魅力非凡的半导体电路行业

老壳有点爽

芯片 集成电路 IC 芯片营销

PySpark RDD 基础运算和操作总结

是老郭啊

spark pyspark RDD

Python 核心技术与实践 input&output

Bonaparte

Linux指令简述&vim引入(1)

老壳有点爽

vim Linux 脚本

Vim小技巧(2)

老壳有点爽

vim Linux 脚本语言

看门狗 | 分布式锁架构设计方案-02

高翔龙

redis 分布式锁 Jedis RedLock

区块链之物流产业上链解决痛点

CECBC区块链专委会

区块链 供应链

集成电路工艺基础介绍

老壳有点爽

芯片 集成电路 IC 工艺 制程

Verilog 的debug技巧(1)

老壳有点爽

芯片 集成电路 IC Verilog 电路

强势入局,区块链专利将成为银行下一个战场?

CECBC区块链专委会

区块链 金融 银行

世界集成电路发展概况

老壳有点爽

芯片 集成电路 IC 芯片营销

Nginx专题(1):Nginx之反向代理及配置-InfoQ