Nginx(三)

一、Nginx动静分离

  • 什么是动静分离

    就是将动态的资源与静态的资源文件进行分离,如图:


    在这里插入图片描述
  • 目的

    解决由于静态资源和动态资源竞争CPU导致的性能问题。

  • 场景

    主要的使用场景是 Web项目中使用。

    比如:查询某个商品列表的页面,如图:

在这里插入图片描述

商品列表页面初始化的时候,会加载Js和Css文件和数据库中的商品数据。

前提:并发量比较大,动态资源将cpu和内存等资源耗尽,导致静态资源无法访问,所以将项目中的静态资源进行拆分。

  • 实例项目

    • 条件

      1. Net5环境的 mvc项目
      2. Nginx
    • 实例

      • 新建Web项目,静态资源未分离的状态,如图:
      在这里插入图片描述
- 运行Nginx

  如图:[图片上传失败...(image-5533a7-1647258041984)]

- 项目运行后如图:![在这里插入图片描述](https://upload-images.jianshu.io/upload_images/26842682-66cbac234e715b9e?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 静态资源拆分

  将项目中静态资源【wwwroot】拆分到其他文件夹中,新建一个StaticResource文件夹,如图:

  [图片上传失败...(image-8efdf0-1647258041984)]


  因项目中没有了静态资源文件,导致页面布局混乱,如图:

  ![在这里插入图片描述](https://upload-images.jianshu.io/upload_images/26842682-ba5bb096a4d7cb4d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


  所以需要在Nginx服务器中配置静态文件,配置代码如下:

  ```yaml
  #配置静态资源
         location ~ \.(ico|js|css|png|jpg|mp4)$ {
              root 静态资源路径;
         }
         # ~  代表优先匹配静态资源
  ```

  整体配置如下:

  ```yaml
  #user  nobody;
  worker_processes  1;
  
  #error_log  logs/error.log;
  #error_log  logs/error.log  notice;
  #error_log  logs/error.log  info;
  
  #pid        logs/nginx.pid;
  
  
  events {
      worker_connections  1024;
  }
  
  
  http {
      include       mime.types;
      default_type  application/octet-stream;
    
      server {
          listen       80;
          server_name  localhost; 
           
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          } 
           #代理  动态数据
           location / { 
             proxy_pass  http://Demo.Application;
         }
         #代理  静态资源
         location ~ \.(ico|js|css|png|jpg|mp4)$ {
              root D:/StaticResource/wwwroot;
         }
          
      } 
      #负载均衡(分流配置)
    upstream Demo.Application{
        least_conn;
        server localhost:5000;
        server localhost:5001;
    }  
  }
  
  ```

  运行结果如图:

  ![在这里插入图片描述](https://upload-images.jianshu.io/upload_images/26842682-4a8bc3b082ed0974?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


  按照以上的nginx配置,动态数据与静态资源还是共享CPU资源的 ,那么依然没有解决当并发量过大,动态资源将cpu和内存等资源耗尽,导致静态资源无法访问的问题,所以我们要将动态数据和静态资源放在不同的虚拟主机中,配置代码如下:

  ```yml
  worker_processes  1; 
  
  events {
      worker_connections  1024;
  } 
  
  http {
      include       mime.types;
      default_type  application/octet-stream;
      #加载动态数据
      server {
          listen       801;
          server_name  localhost; 
           
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          } 
           #代理
           location / { 
             proxy_pass  http://Demo.Application;
         } 
      }  
    
    #用来合并 动态数据和静态资源
    server {
          listen       80;
          server_name  localhost; 
           
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          } 
        
          #代理 动态数据
           location / { 
             proxy_pass  http://localhost:801;
         } 
         #代理  静态资源
         location ~ \.(ico|js|css|png|jpg|mp4)$ {
              proxy_pass http://localhost:802;
         } 
      }   
    
    #加载静态资源
    server {
          listen       802;
          server_name  localhost; 
           
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   html;
          } 
        
          #代理  静态资源
         location ~ \.(ico|js|css|png|jpg|mp4)$ {
              root D:/StaticResource/wwwroot;
         } 
      }   
    
      #负载均衡(分流配置)
    upstream Demo.Application{ 
        server localhost:5001;
    } 
  }
  
  ```

  按照以上的建立两个不同的虚拟机,但是还在一个Nginx当中,还是会存在资源竞争的问题,所以要将动态数据和静态资源放在不同的Nginx当中,【推荐使用这种方式】实现如下:

  - Nginx 1   动态数据  配置文件如下

    ```yml
    worker_processes  1;
     
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        #加载动态数据
        server {
            listen       801;
            server_name  localhost; 
             
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            } 
             #代理
             location / { 
                 proxy_pass  http://Demo.Application;
             } 
        }   
        #负载均衡(分流配置)
        upstream Demo.Application{ 
            server localhost:5001;
        } 
    }
    
    ```

  - Nginx2  静态资源 配置文件如下

    ```yml
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;  
        
        #加载静态资源
        server {
            listen       802;
            server_name  localhost; 
             
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            } 
            
            #代理  静态资源
             location ~ \.(ico|js|css|png|jpg|mp4)$ {
                  root D:/StaticResource/wwwroot;
             } 
        }   
    }
    
    ```

  - Nginx3 合并资源配置文件如下

    ```yml
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream; 
        
        #用来合并 动态数据和静态资源
        server {
            listen       80;
            server_name  localhost; 
             
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            } 
            
            #代理 动态数据
             location / { 
                 proxy_pass  http://localhost:801;
             } 
             #代理  静态资源
             location ~ \.(ico|js|css|png|jpg|mp4)$ {
                  proxy_pass http://localhost:802;
             } 
        }       
    }
    ```

二、Nginx代理缓存

  • 条件

    1. 定义缓存

      proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m;
      
    2. 存储缓存

              #代理 动态数据
               location / { 
                    proxy_cache mycache;  
                  proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_cache_methods GET HEAD;
                    proxy_cache_revalidate on;
                    proxy_cache_valid 200 302 10m;
                    proxy_cache_valid 404 1m;
                    proxy_cache_valid any 1m;
                    proxy_cache_min_uses 1;
                    proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
                      proxy_pass  http://localhost:801;
              }
      
      
    3. 建缓存文件夹

      nginx-1.20.0\cache\nginx

  • 运行 结果如下

    如图:


    在这里插入图片描述

    在这里插入图片描述
  • 缺陷

    1. 如果把数据库的数据改了,则页面不会发生变化,缓存时间过期后,则会发生变化。

      解决方案:使用Redis来解决。

三、Nginx http转htts

四、Nginx include

  • 使用命令

    include  配置文件名称.conf
    #备注
       在nginx配置文件下创建配置文件  
    

五、Nginx Stream 反向代理

  • 四层反向代理 mysql数据库

    配置如下:

    stream {
      server {
        listen 13306;
      proxy_connect_timeout 1s;
      proxy_timeout 3s;
      proxy_pass localhost:3306;
      }
      upstream mysql {
        server localhost:3306;
      }
    }
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容