Nginx【常见知识点速查】
文章更新时间:2020/04/10
一、简介
定义:Nginx是一个高性能的HTTP和反向代理web服务器
作用:
- 反向代理
- 正向代理
- 负载均衡
- HTTP静态资源服务器(动静分离)
二、正向代理与反向代理简介
正向代理
类似我们想要访问国外的Google服务器,但是由于访问限制,我们需要找一个代理去访问。换句话说,客户端明确知道要访问的服务器的地址,客户端把请求发送给代理,代理转发给服务器,服务器把响应传给代理,最后代理把响应传给客户端。我们可以看到客户端知道服务器是谁,但是服务器并不知道客户端是谁,这就是正向代理,隐藏了客户端的真实信息。
反向代理
类似我们访问淘宝,由于访问量巨大,淘宝会使用许多台服务器(就是分布式服务器)来支持,但是每个客户端的请求到底由哪一台服务器来响应,我们需要一个代理来决定。换句话说,客户端并不知道要把请求发送给哪一台服务器,但是知道发送给哪一个代理,然后代理依据规则(响应时间,负载均衡等)决定把请求转发给哪一台服务器。可以看到,客户端并不知道他访问的服务器是谁,这就是反向代理,隐藏了服务器的真实信息。
三、反向代理
概念: tomcat集群一般使用的都是内网IP,不适合直接被外部访问,Nginx起到一个反向代理的作用,对于客户端来说并不知道访问的是nginx代理还是具体的服务器。
作用: 隐藏真实的访问ip地址。外界访问的最多也就是公网的ip,但是具体tomcat在那个ip是不知道的,这样就能减少tomcat被攻击,提高了服务器的安全性。 (详细看这里)
常用于:保护内网服务器安全、前后端分离的项目实现跨域等场景
举个例子
比如现在比较流行前后端分离的项目,前端页面用的是vue,服务器端用的是spring boot整合的一些框架【根据项目大小也许选型不同】,那么一般我们会先启动服务器后端的代码,然后再单独启动vue工程,那么就会存在一个问题:
那么这个时候我们再去启动前端的vue工程:
那么vue页面在向后端服务发送请求的时候,就会存在一个资源跨域的问题,在本地开发我们可以使用webPack配置代理来实现跨域请求,那么在正式环境,也就是生产服务器上,我们应该利用nginx来替我们完成这一工作:
配置好了以后,重启nginx,通过域名访问页面,可以发现对服务端的请求已经正常发出,并被nginx进行解析转译,成功调用服务端并返回
到此,一个nginx实现反向代理的简单应用就介绍完啦~~~
四、正向代理
概念: 客户端明确知道需要访问的地址,但是服务端因ip限制或无法直接访问时,需要在访问过程中加入代理服务器来对客户端的请求进行转发,此时原始服务器是不知道客户端的信息的。
作用:
- 访问原来无法访问的资源,如Google、FaceBook等(我们用的vpn其实也是正向代理的一种应用)
- 可以做资源缓存,加速访问资源(如静态文件服务器用nginx来代理,实现动静分离)
- 对客户端访问授权,上网进行认证
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息(行为分析)
五、负载均衡
概念: 当服务器存在多台时,我们可以使用Nginx做负载均衡,降低服务器并发访问时的压力
负载方式:RR(默认)、权重、ip_hash、url_hash(需要第三方插件支持)、fair(需要第三方插件支持)。详细配置看这里
PS:ip_hash主要解决集群部署环境下的session共享问题(相同ip地址的客户端总会访问到同一个后端服务器,除非服务器宕机被负载到另外一台机器上)
六、HTTP静态资源服务器(动静分离)
概念:把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。
七、配置location(请求分发)
参考文章:
最新文章
- 电脑运行msi安装包提示the error code is 2503/2502如何解决
- 如何配置网络使得宿主机能够访问VM数据库?
- Linux 流程控制语句 if else、for、while、until
- 【整理】--C++三种参数传递方式
- Jpinyin笔记
- android之电话拨号器
- oracle数据库数据导出和导入
- 常用CSS技巧资料收集
- ONIX 实例
- Spring流程
- 17.1 Replication Configuration 复制:
- Mockito使用注意事项
- (NO.00004)iOS实现打砖块游戏(四):砖块类的实现
- iOS----------关于Cornerstone的偏好设置
- 【速读】——ResNeXt
- Scala - 快速学习09 - 函数式编程:一些操作
- os、os.path模块(文件/目录方法)
- Golang获得执行文件的当前路径
- 第四章 栈与队列(a)栈接口与实现
- ajax请求也可以用form表单向后台提交数据!!!!