如果其中一台服务器需要暂时从负载平衡循环中删除,则可以使用down参数对其进行标记,以保留客户端IP地址的当前哈希值。该服务器要处理的请求将自动发送到组中的下一个服务器:
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com down; } 4. Generic Hash(plugin)通用哈希 –将请求发送到的服务器是根据用户定义的键确定的,该键可以是文本字符串,变量或组合。例如,密钥可以是成对的源IP地址和端口,或者是本示例中的URI:
upstream backend { hash $request_uri consistent; server backend1.example.com; server backend2.example.com; }指令的可选参数hash启用ketama一致性哈希负载平衡。根据用户定义的哈希键值,请求在所有上游服务器上平均分配。如果将上游服务器添加到上游组中或从上游组中删除,则只有少数几个键会被重新映射,从而在负载平衡缓存服务器或其他累积状态的应用程序的情况下最大程度地减少缓存丢失。
5. Fair(plugin)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend { fair; server backend1.example.com; server backend2.example.com; } 6. weight默认情况下,NGINX使用Round Robin方法根据请求的权重在组中的服务器之间分配请求。weight参数设置服务器的权重;默认值为1。
upstream backend { server backend1.example.com weight=5; server backend2.example.com; server 192.0.0.1 backup; }在示例中,backend1.example.com具有weight 5;其他两台服务器的默认权重(1),但具有IP地址的192.0.0.1一台backup服务器被标记为备份服务器,除非其他两台服务器均不可用,否则不会接收请求。权重的这种配置,每6个请求,5个发送到backend1.example.com和1个backend2.example.com。
7. 动静分离 Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx(ngxin 本身就是个http服务器,可以直接使用nginx部署静态页面)处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:
1. 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案; 2. 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。 7.1 部署静态资源 7.1.1 root
准备静态资源,放入/usr/share/nginx/html/用于访问。
当前测试的静态资源是在gitee上找的纯前端项目:项目地址
在 default.conf配置文件中增加如下配置
用户直接访问/就会匹配到当前location,并直接访问/usr/share/nginx/html/hotel/目录下的文件,默认访问index.html页面。
访问 实际请求地址就为,路径为/usr/share/nginx/html/hotel/index.html
访问,访问路径为/usr/share/nginx/html/hotel/discount.html
server { listen 80; listen [::]:80; server_name ; location / { root /usr/share/nginx/html/hotel/; index index.html; } }
访问结果
7.1.2 alias如果想给请求地址添加个上下文标识,可以使用alias(起个别名)
在 default.conf配置文件中增加如下配置
server { listen 80; listen [::]:80; server_name ; location /ldx-hotel { alias /usr/share/nginx/html/hotel/; index index.html; } }
访问结果
但此时使用root方式就不行了,因为root方式会将location地址的匹配字符串拼接到访问目录地址中。错误日志如下
访问的真实路径变成了 /usr/share/nginx/html/hotel/ldx-hotel/index.html,将访问标识拼接上去了