Nginx学习总结

Nginx

基本概念

Nginx是一个高性能的http和反向代理的服务器,占用内存少,并发能力强,主要应用有反向代理,负载均衡,动静分离等等

正向代理:局域网中的用户想要访问外部Internet,可以走代理服务器,这就是正向代理。正向代理客户端需要配置,即我们在浏览器中设置使用代理服务器

反向代理:客户端不需要配置,对代理无感知,在客户端眼里代理服务器和目标服务器是一个服务器(但暴露的是代理服务器的地址),客户端将请求发送给代理服务器,由代理服务器实现转发

负载均衡:将请求分发到不同的服务器中,以减少每个服务器并发的压力

动静分离:动态页面和静态页面由不同服务器解析

配置文件

第一部分 :全局块。从配置文件开始到events块之间的内容,会设置一些影响nginx服务器整体运行的指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的Worker process数,进程PID存放路径,日志存放路径和类型,以及配置文件的引入等

第二部分:events块。主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接受多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等

比如上图就表明每个work process支持的最大连接数是1024

第三部分:http块。

http全局块:包括文件引入,MIME-TYPE定义,日志自定义,连接超时时间,单链请求上限

server块:指定了我们请求转发的规则

反向代理

server {
        listen       80;
        server_name  localhost;  #即nginx对外暴露的地址

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / { 
            proxy_pass http://127.0.0.1:8080;  #proxy_pass指定了访问/这个location时 会转发到这个地址
        }
        location ~/edu/ {
            proxy_pass http://127.0.0.1:8081; #访问路径中含有edu时,会转发到这个地址
        }

location中字符:
=:要求严格匹配
~:匹配正则表达式,不区分大小写
~*:匹配正则表达式,区分大小写
^~:匹配与给定url最像的location

负载均衡

http{
        #通过upstream将多个server分组了
        upstream myserver{
      
         server 127.0.0.1:8080 weight=1;
         server 127.0.0.1:8081 weight=1;
        }
        server{
        
         }

}


server {
        listen       80;
        server_name  localhost;  #即nginx对外暴露的地址
        location / { 
            proxy_pass http://myserver;   #proxy_pass指定了访问/这个location时 会转发到myserver这个分组中
        }


nginx中常用的分配方式:
1.轮询(默认):每个请求按时间顺序分配到不同的服务器中,如果服务器挂掉则剔除
2.weight:weight代表权重,默认为1,权重越高则分配的客户越多
3.ip_hash:每个用户按ip的哈希值分配,每个用户总是能访问同一个服务器

upstream myserver{
         ip_hash;
         server 127.0.0.1:8080 ;
         server 127.0.0.1:8081 ;
        }

4.fair:按后端服务器响应时间分配,优先分配相应时间短的服务器

upstream myserver{
        
         server 127.0.0.1:8080 ;
         server 127.0.0.1:8081 ;
         fair;
        }

动静分离

location /image/ { 
            root  /data/;   
        }

root表明了转发的路径为 root+path
比如我们访问 http://localhost:80/image/1.jpg 则转发给http://localhost:80/data/image/1.jpg

nginx原理

Nginx的进程有Master进程和Worker进程。
Master负责分配请求任务,Worker负责执行具体的任务。
一个Master对应多个Worker,当一个任务出现的时候,Master下的多个空闲的Worker参与争抢任务。
真是因为一个Master下有多个Worker,才能保证Nginx可以不重启直接重新加载配置文件,当执行nginx -s reload的时候,空闲的Worker会重启,工作的Worker还是按照原来的配置运行,当它处理完之后,它也会按照新的配置进行重启,所以Nginx才能不停机更新。
Worker的数量应该与CPU数量相等,这样才能把Nginx的服务发挥到极致。
一个请求会占用2个(如果资源由nginx存储)或者4个Worker的连接数(还需要访问tomcat服务器)。
2个:客户端→Worker和Worker→客户端
4个:如果有动态资源,Worker和Tomcat之间还有一对连接数
静态资源的最大并发数:worker_connection * worker_process / 2。
如果是作为反向代理,最大并发数:worker_connection * worker_process / 4。

posted @ 2021-05-08 00:21  刚刚好。  阅读(92)  评论(0)    收藏  举报