nginx学习总结

nginx学习

1、代理的概念

  • 1、正向代理
    我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,以一个例子说明:如果从网络的方向来讲,有三个概念,客户端、服务器、中间代理,对应于现实生活中的贷款者、银行、存款者,也就是说存款者并不知道是哪位贷款者借走了他的钱,而是通过银行代理了请求。
  • 2、反相代理
    反向代理隐藏了真实的服务端,银行也包含反相代理,也就是说贷款者也不知道他借的钱是谁的。另一个例子就是我们打110,我们只管打出110号码就行,最终会得到服务,而我们打出110之后并不知道具体会是哪位警官去接电话,110报警中心肯定会有很多的接听员,我们只知道会有服务,并不清楚到底会是哪位给我们服务。
    两者的区别在于代理的对象不一样: 正向代理是为客户端代理,反向代理是为服务端代理。

2、nginx介绍

Nginx是一款高性能的Web服务器软件,主要用于提供网上信息浏览服务,为高并发网站的应用场景而设计,可以在Linux、macOS和Windows等操作系统中运行,它的优点包括性能高、稳定性好、结构模块化、配置简单以及资源消耗非常低等。拥有HTTPS访问、gzip压缩、虚拟主机和URL重写等功能,不但可以搭配FastCGI程序处理动态请求,还可以用于代理、反向代理、负载均衡和缓存服务器等功能。

3、nginx的功能

  • 1、负载均衡
    负载均衡(load balance)就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。(负载均衡的功能好像银行似乎也有这个功能,银行的功能很强大吗!)
    目前负载均衡有4种典型的配置方式,分别为轮询、权重、ip_hash和利用第三方模块的方式。

    //默认轮询配置方式:
    upstream myapp {
        server 192.168.20.1:8080; # 应用服务器1
        server 192.168.20.2:8080; # 应用服务器2
    }
    server {
        listen 80;
        location / {
            proxy_pass http://myapp;
        }
    }
    
    
    //ip_hash方式
    upstream myapp {
        ip_hash; # 根据客户端IP地址Hash值将请求分配给固定的一个服务器处理
        server 192.168.20.1:8080;
        server 192.168.20.2:8080; 
      } 
      server {
        listen 80;
        location / {
          proxy_pass http://myapp;
        } 
      }
    
    //权重方式
    upstream myapp { 
        server 192.168.20.1:8080 weight=3; # 该服务器处理3/4请求
        server 192.168.20.2:8080; # weight默认为1,该服务器处理1/4请求
      } 
      server {
        listen 80;
        location / {
          proxy_pass http://myapp;
        } 
      }
    
配置方式 说明
轮询 均衡负载默认的配置方式,每个请求按照时间顺序逐一分配到不同的后端服务器进行处理,如果服务器有宕机会自动剔除
权重 利用weight指定轮训的权重比率,与访问率成正比,用于后端服务器使用不均的情况下
ip_hash 每个请求按照冯文的的ip的hash结果分配,这样可以使同一ip的访客固定访问同一个后端服务器,可以解决session共享的问题
第三方模块 第三方模块采用fair时,按照每台服务器的响应时间来分配请求,相应时间短的优先分配,若第三方模块采用URL_hsah时,按照url的hash值来分配请求。
  • 2、Web缓存方式
    利用反向代理服务器对访问频率较多的内容进行缓存,有利于节省后端服务器的资源。Nginx提供了两种Web缓存方式:永久性缓存和临时性缓存。
    永久性缓存:将内容源服务器响应的内容缓存到本地,若不手动删除,该缓存文件会一直生效。
    临时性缓存:采用md5算法将请求连接进行哈希后,根据具体配置生成缓存文件目录,保存响应的数据。
    Web缓存服务器位于内容源Web服务器和客户端之间,当客户端用户访问一个URL时,Web缓存服务器就会请求相应的内容源Web服务器,并将响应的信息缓存至内存或磁盘;然后,当下一个请求到来时,如果访问的是相同URL,Web缓存服务器会直接将已缓存的内容输出给客户端,而不用再次向内容源Web服务器发送请求。

  • 2、静态HTTP服务器
    首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。配置:

     server {
        listen 80; # 端口号
        location /doc/{ #映射地址
            root /usr/; # 静态文件路径为/usr/doc/
         autoindex on;
        } 
    } 
    
  • 3、反向代理
    客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
    配置:

    server {
        listen 80;
        location / {
            proxy_pass http://192.168.20.1:8080; # 应用服务器HTTP地址
     }
    }
    
  • 4、虚拟主机
    有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
    例如将www.aaa.comwww.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。

      server {
        listen 80 default_server;
        server_name _;
        return 444; # 过滤其他域名的请求,返回444状态码
      }
      server {
        listen 80; 
        server_name www.aaa.com; # www.aaa.com域名
        location / {
          proxy_pass http://localhost:8080; # 对应端口号8080
        }
      }
      server {
        listen 80; 
        server_name www.bbb.com; # www.bbb.com域名
        location / { 
          proxy_pass http://localhost:8081; # 对应端口号8081
        }
      }
    

    在服务器8080和8081分别开了一个应用,客户端通过不同的域名访问,根据server_name可以反向代理到对应的应用服务器。

    虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的,有兴趣的同学可以研究一下HTTP协议。

    另外,server_name配置还可以过滤有人恶意将某些域名指向你的主机服务器。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容