03Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置

Nginx具体应用

部署静态资源

Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源

  • 静态资源: 在服务端真实存在并且能够直接展示的一些html页面、css文件、js文件、图片、视频等资源文件
  • 将静态资源部署到Nginx非常简单,只需要将静态资源文件放到到Nginx安装目录下的html目录中就可以正常访问
properties 复制代码
http {                                        
    include       mime.types;                    
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
    server {
        # 监听80端口
        listen       80;       
        # 服务器的IP地址(域名)
        server_name  localhost; 
        # 处理80端口的location块,用来匹配客户端请求的url,匹配到后去根目录找对应的文件
        location / {
        	# 指定静态资源的根目录,默认当前目录是配置文件所在的conf目录,html目录和conf目录同级
            root   html;
            # 指定默认访问的首页(可以指定多个,中间用空格隔开,以";"结尾),默认当前目录是我们指定的根目录
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

正向/反向代理

正向代理: 为了从目标服务器取得内容, 客户端向代理服务器发送一个请求并指定目标服务器的地址,然后代理将请求转发给目标服务器并将获得的内容返回给客户端

  • 正向代理是给客户端设置代理服务器,客户端知道代理服务器的存在, 通过代理服务器转发请求最终访问到目标服务器
  • 正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径即通过代理访问无法访问的资源

反向代理: 用户直接访问反向代理服务器就可以获得目标服务器的资源(用户不需要指定目标服务器的地址), 反向代理服务器负责将请求转发给目标服务器

  • 反向代理服务器也是位于用户与目标服务器之间,但却是给服务端设置代理服务器(用户不知道它的存在),用户以为自己访问的就是目标服务器

正向代理和反向代理的区别

  • 正向代理隐藏的是用户: 原始服务器接收的是代理服务器的请求,用户知道可以通过代理服务器访问无法访问的资源(帮助客户端访问目标服务器)
  • 反向代理隐藏的是服务器: 用户以为自己访问的是目标服务器,其实自己访问的资源是通过反向代理服务器转发的(帮助目标服务器统一处理请求)

负载均衡

随着业务流量越来越大并且业务逻辑也越来越复杂, 单台服务器的性能及单点故障问题就凸显出来了, 因此需要多台服务器组成应用集群进行性能的水平扩展

  • 应用集群: 将同一应用部署到多台机器上组成应用集群,集群接收负载均衡器分发的请求进行业务处理并返回响应数据
  • 负载均衡器: 将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理,既保证服务的可用性又保证响应足够快
  • 注意: Nginx是在服务端实现负载均衡,在SpringCloud的客户端我们也可以实现负载均衡

负载均衡的规则

名称 说明
轮询(默认方式) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器挂掉能自动剔除
weight 权重方式(权重默认为 1,权重越高请求分发机率越高)
ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器(IP地址固定),可以解决session的问题
least_conn 依据最少连接方式,分发给处理连接少的服务器
url_hash 依据url分配方式,一个固定的url对应的服务器也是固定的
fair 按后端服务器的响应时间来分配请求,响应时间短的服务器优先分配请求
properties 复制代码
# 不指定默认采用轮询的方式实现负载均衡
upstream myserver{
        server 192.168.77.130:8080;
        server 192.168.77.130:8081;
}
# 采用权重的方式实现负载均衡
upstream myserver{
          server 192.168.77.130:8080 weight=10;
          server 192.168.77.130:8081 weight=5;
}
# 访问ip的hash结果实现负载均衡
upstream myserver{
            ip_hash;
            server 192.168.77.130:8080;
            server 192.168.77.130:8081;
 }
# 按后端服务器的响应时间实现负载均衡
upstream myserver{
             server 192.168.77.130:8080;
             server 192.168.77.130:8081;
             fair;
}

需求: 浏览器地址栏输入地址http://192.168.17.129/edu/a.html,根据负载均衡效果将请求平均分配到两台tomcat服务器的`8080和8081`端口中

  • 在服务器的两台tomcat里面webapps目录中创建web项目edu,在edu文件夹中创建页面a.html

第一步: 在http块中添加upstream指令定义一组服务器,新增一个server块采用负载均衡的规则将请求转发到集群中的某一台服务器

第二步: 访问http://192.168.77.130/edu/a.html发现结果在8080和8081两个服务之间切换

properties 复制代码
http {                                        
    include       mime.types;                    
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
    # upstream指令可以定义一组服务器
    upstream targetServer{
    	# 默认使用轮询的方式实现负载均衡
        server 192.168.17.129:8080;
        server 192.168.17.129:8081;
    }
    server {
    	# 监听的端口
        listen       80;
        # nginx服务的地址
        server_name  localhost;
        location / {
        	# 添加定义的服务地址,使用定义好的targetServer
            proxy_pass http://targetServe 
        }
    }
}

动静分离

Nginx动静分离不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是把动态请求跟静态请求分开

动静分离从目前实现角度来讲大致分为两种

  • 第一种方案也是目前主流推崇的方案就是把静态文件独立成单独的域名然后放在独立的服务器上,如使用Nginx服务器处理静态页面,Tomcat服务器处理动态页面
  • 第二种方案就是把动态跟静态文件混合在一起发布,通过nginx来分开动态请求和静态请求,具体就是通过location指定不同的后缀名实现不同的请求转发

对于不经常变动的资源可以使用Expires参数给一个资源(请求)设定一个过期时间,这样浏览器每次访问的时候可以走缓存的数据,减少浏览器与服务器之前的请求

  • 用户在第一次访问服务器后浏览器中会将请求对应的资源进行缓存,下次访问的时候如果缓存的资源没有过期且服务端对应的资源也没有更新就直接走缓存
  • 满足则返回浏览器缓存的数据并返回状态码304,不满足则需要从服务器重新下载数据并返回状态码200

第一步: 在liunx系统中/data目录下准备静态资源,如www/a.htmlimage/1.png

第二步: 在nginx的配置文件的location块配置要访问的静态资源路径

  • autoindex on: 在访问静态资源目录时,能够显示目录里面的内容
  • expire: 设置缓存过期时间
properties 复制代码
server {
    	# 监听的端口
        listen       80;
        # nginx的服务地址
        server_name  192.168.77.129;
        # http://192.168.77.129/www/a.html
        location /www/ {
        	root   /data/;
        	index  index.html index.htm;
        # http://192.168.77.129/image/
        location /image/ {
            root   /data/;
            # 显示image目录的内容
            autoindex on;
        }
}     

反向代理一台服务器

需求: 打开浏览器在浏览器地址栏输入地址www.123.com跳转到liunx系统中tomcat的主页面中

第一步: 在windows系统的host文件进行域名和ip对应关系的配置

properties 复制代码
192.168.17.129 www.123.com

第二步: 在nginx.conf配置文件中添加proxy_pass属性进行请求转发的配置(反向代理配置)

properties 复制代码
http {                                        
    include       mime.types;                    
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
    # 在http块中新增一个server块,用来将请求转发
    server {
        # 监听80端口
        listen       80;
        server_name  192.168.17.129;
        location / {
            # 反向代理配置,将请求转发到目标服务器
            proxy_pass http://127.0.0.1:8080; 
        }
    }
}

反向代理多台服务器

使用nginx反向代理(nginx监听端口为9001),根据访问的路径跳转到不同端口的服务中,注意放行8080/8081/9001对外访问的端口

第一步: 准备两个文件夹安装两个tomcat服务器,修改服务器的conf/erver.xml配置文件,修改它们的端口号防止冲突

xml 复制代码
<Server port ="8015" shutdown="SHYTDOWN" >
<Connector port="8080" protocol="HTTP/1.1">
<Connector port="8019" protocol="AJP/1.3">

第二步: 在两个Tomcat的webapps目录下分布创建web项目edu和vod并存放对应的测试文件a.html

html 复制代码
<!--edu/a.html-->
<h1>8080<h1>
<!--vod/a.html-->
<h1>8081<h1>

第三步: 在http块中添加一个新的server块并添加两个location块

properties 复制代码
http {                                        
    include       mime.types;                    
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
    # 在http块中新增一个server块,用来将请求转发
    server {
        # 监听9001端口
        listen       9001;
        server_name  192.168.17.129;
        location ~ /edu/ {
            # 反向代理配置,将请求转发到目标服务器
            proxy_pass http://127.0.0.1:8080; 
        }
        location ~ /vod/ {
            # 反向代理配置,将请求转发到目标服务器
            proxy_pass http://127.0.0.1:8081; 
        }
    }
}

配置高可用

相关推荐
高木木的博客9 小时前
数字架构智能化测试平台(1)--总纲
人工智能·python·nginx·架构
徐子元竟然被占了!!10 小时前
Nginx
运维·nginx
图图玩ai11 小时前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
CXH72812 小时前
nginx——https
运维·nginx·https
Lentou14 小时前
nginx反向代理
运维·nginx
遇见火星14 小时前
linux设置开启启动服务
linux·运维·服务器·nginx
咸鱼翻身小阿橙15 小时前
QT P4
数据库·qt·nginx
o丁二黄o17 小时前
若依部署Nginx和Tomcat
运维·nginx·tomcat
一个public的class18 小时前
前后端 + Nginx + Gateway + K8s 全链路架构图解
前端·后端·nginx·kubernetes·gateway
源远流长jerry18 小时前
LVS 负载均衡完全指南:从入门到精通
运维·负载均衡·lvs