ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Nginx(三)

2022-03-31 14:01:45  阅读:206  来源: 互联网

标签:静态 server Nginx html location localhost proxy


一、Nginx动静分离

  • 什么是动静分离

    就是将动态的资源与静态的资源文件进行分离,如图:
    在这里插入图片描述

  • 目的

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

  • 场景

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

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

在这里插入图片描述

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

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

  • 实例项目

    • 条件

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

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

      在这里插入图片描述

      • 运行Nginx

        如图:在这里插入图片描述

      • 项目运行后如图:在这里插入图片描述

      • 静态资源拆分

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

        在这里插入图片描述

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

        在这里插入图片描述

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

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

        整体配置如下:

        #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;
        	}  
        }
        
        

        运行结果如图:

        在这里插入图片描述

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

        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 动态数据 配置文件如下

          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 静态资源 配置文件如下

          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 合并资源配置文件如下

          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;
      }
    }
    

标签:静态,server,Nginx,html,location,localhost,proxy
来源: https://www.cnblogs.com/netsd/p/16081507.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有