一起来学Nginx(三)

353 阅读3分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

工作后就会发现,当下的应用部署时都会使用到Nginx来提升响应性能,今天就和大家分享一下Nginx在工作中最常使用的功能点,也作为自己最近使用Nginx的总结。大家相互学习,共同进步!

  • 第一讲我们学习了Nginx是什么,为什么使用并如何安装Nginx。一起来学Nginx(一)
  • 第二讲我们认识了Nginx的配置文件,并熟悉默认配置具体含义。一起来学Nginx(二) 今天我们就一起学习一下Nginx在动静分离反向代理负载均衡三大应用场景中的实际配置。

Nginx动静分离

动静分离就是指Nginx作为静态资源服务器,将项目的静态文件布置在Nginx路径下,实现静态资源的快速响应和加载。Nginx作为静态资源服务器时的配置为:

server{
    listen 80;
    server_name localhost;
    location / {
        root /path/html;
        index index.html index.htm;
    }
    location ^~ /images/ {
        root /path/images;
    }
    location ~* \.(css|js)$ {
        root /path/style;
    }
}

location用于设置请求地址映射到实际的访问地址,使用方式有:

  • location /:表示通用匹配,所有请求都会匹配到
  • location /images/:表示正常字符串/image/路径匹配
  • location ~:表示使用正则匹配,区分大小写
  • location ~*:一个不区分大小写的正则匹配
  • location ^~ /images/:路径前缀匹配,匹配成功后返回
  • location = /:进行等号后字符串精准匹配,匹配成功后返回 从上到下,匹配的优先级依次增加,即当匹配到location = /是便不会进行其他匹配,而如果没有匹配到任何其他映射路径,就会匹配通用路径location /

Nginx反向代理

反向代理与正向代理相反,是指Nginx作为代理服务器接收客户端请求,并将请求转发至其他服务器中,最后接收服务器响应结果返回给客户端。在客户端看来,Nginx就是唯一的服务器资源,所有操作都是向Nginx请求并等待返回结果。

server{
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://127.0.0.1:8089;
    }
}

如上配置,当我们在访问本地路径http://locahost时,Nginx作为代理服务器就会将我们的请求转发至http://127.0.0.1:8089的服务中,实现请求的转发。这样我们可以通过Nginx服务器来请求与Nginx服务器处于同一局域网中但是不可以外网访问的主机。

Nginx负载均衡

高并发场景下需要部署多机来缓解服务端压力,就需要制定一种策略来分发请求到每个机器中,Nginx自身就提供了相关的负载均衡策略,能够根据规则分派请求。同时Nginx也有着很好的并发性能,能够支撑大量请求并进行分发。

upstream web_server{
    server 10.25.220.33:9091;
    server 10.25.220.33:9092;
    server 10.25.220.34:9093;
    server 10.25.220.35:9094;
}
server{
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://web_server;
    }
}

如上配置中,我们在两台机器的四个端口部署了同一个项目,根据配置内容,在我们向Nginx服务器请求时,Nginx会将我们的请求转发至四个服务中的一个。如果不作其他配置,Nginx默认采用轮询的方式依次将请求发送至每个服务中,除此之外,我们还可以设置根据权重的方式和ip_hash的方式来实现负载均衡。

根据设置权重实现负载均衡

upstream web_server{
    server 10.25.220.33:9091 weight=2;
    server 10.25.220.33:9092 weight=3;
    server 10.25.220.34:9093 weight=5 backup;
}
...

根据客户端IP地址取哈希实现负载均衡

upstream web_server{
    ip_hash;
    server 10.25.220.33:9091 ;
    server 10.25.220.34:9092 ;
    server 10.25.220.35:9093 ;
}
...