乐趣区

关于nginx:Nginx三

一、Nginx 动静拆散

  • 什么是动静拆散

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

  • 目标

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

  • 场景

    次要的应用场景是 Web 我的项目中应用。

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

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

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

  • 实例我的项目

    • 条件

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

      • 新建 Web 我的项目,动态资源未分离的状态,如图:

      • 运行 Nginx

        如图:

      • 我的项目运行后如图:
      • 动态资源拆分
        将我的项目中动态资源【wwwroot】拆分到其余文件夹中,新建一个 StaticResource 文件夹,
        如图:

  因我的项目中没有了动态资源文件,导致页面布局凌乱,如图:![在这里插入图片形容](https://img-blog.csdnimg.cn/b3e5aa153a2642a2ae237c185b8421c6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQEDnpZ7lhpw=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)


  所以须要在 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://img-blog.csdnimg.cn/2a15fbf4618545e89035c405a51df632.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQEDnpZ7lhpw=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)


  依照以上的 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

  • 生成证书的工具

    • 生成工具:https://slproweb.com/download…
    • 生成教程:https://jingyan.baidu.com/art…

四、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;}
    }
退出移动版