配置文件 nginx.conf
- 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
#这一行表示这个server块监听的端口是80,只要有请求访问了80端口,此server块就处理请求listen 80;# 表示这个server块代表的虚拟主机的名字server_name localhost; #监听的域名
- 一个 server 块可以配置多个 location 块。
正向代理和反向代理
正向代理详解
概念
正向代理类似一个跳板机,代理访问外部资源。
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了。
用途
- 访问原来无法访问的资源,如 google。
- 可以做缓存,加速访问资源。
- 对客户端访问授权,上网进行认证。
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。
反向代理详解
概念
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
作用:
- 保护了真实的 web 服务器,web 服务器对外不可见,外网只能看到反向代理服务器,而反向代理服务器上并没有真实数据,因此,保证了 web 服务器的资源安全。
- 反向代理为基础产生了动静资源分离以及负载均衡的方式,减轻 web 服务器的负担,加速了对网站访问速度。
- 节约了有限的 IP 地址资源,企业内所有的网站共享一个在 internet 中注册的IP地址,这些服务器分配私有地址,采用虚拟主机的方式对外提供服务。
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端,反向代理即是服务端代理, 代理服务端,客户端不知道实际提供服务的服务端。
常用命令
cd /usr/nginx/sbin/
1、启动nginx./nginx
2、关闭 nginx./nginx -s stop
3 、安全退出./nginx -s quit
4、重新加载nginx (nginx.conf)./nginx -s reload
5、查看版本号./nginx -v
6、查看nginx进程ps aux | grep nginx
负载均衡
简单来说就是使用分布式的场景,将原先的一台服务器做成一个集群,然后将请求分发到各个服务器上,但是,如何将请求每次转发到不同的服务器呢,Nginx就可以做到。原来我们都是直接访问服务器,现在我们可以使用Nginx 进行反向代理,然后我们访问Nginx,由Nginx将我们的请求分发到不同的服务器上,以实现负载均衡。
轮询
最基本的配置方法,它是 upstream 模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。
weigh
权重方式,在轮询策略的基础上指定轮询的几率。
注意:
- 权重越高分配到需要处理的请求越多。
- 此策略可以与 least_conn 和 ip_hash 结合使用。
- 此策略比较适合服务器的硬件配置差别比较大的情况。
ip_hash
指定负载均衡器按照基于客户端 IP 的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证 session 会话。这样每个访客都固定访问一个后端服务器,可以解决 session 不能跨服务器的问题。
least_conn
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。
fair(第三方)
fair 属于第三方的负载均衡策略,其实现需要安装第三方插件。fair 按照服务器端的响应时间来分配请求,响应时间短的优先分配。
url_hash(第三方)
url_hash 按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。
而使用 url_hash,可以使得同一个 url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路,实际上,何谓动?何谓静呢?拿我们 Java 来说 jsp、servlet 等就是动,因为他们离开我们的 web 服务器的支持就会无法正常工作。而 js、css 等文件就是静了。因为离开 web 服务器他一样能正常的工作。
动静分离简单的概括是:动态文件与静态文件的分离。
Nginx如何做动静分离
Nginx 根据客户端请求的 url 来判断请求的是否是静态资源,如果请求的 url 包含 jpg、png,则由 Nginx 处理。如果请求的 url 是 .php 或者 .jsp 等等,这个时候这个请求是动态的,将转发给 tomcat 处理。
总结来说,Nginx 是通过 url 来区分请求的类型,并转发给不同的服务端。
Nginx动静分离的好处
- api 接口服务化:动静分离之后,后端应用更为服务化,只需要通过提供 api 接口即可,可以为多个功能模块甚至是多个平台的功能使用,可以有效的节省后端人力,更便于功能维护。
- 前后端开发并行:前后端只需要关心接口协议即可,各自的开发相互不干扰,并行开发,并行自测,可以有效的提高开发时间,也可以有些的减少联调时间。
- 减轻后端服务器压力,提高静态资源访问速度:后端不用再将模板渲染为 html 返回给用户端,且静态服务器可以采用更为专业的技术提高静态资源的访问速度。