Nginx原理

目录

一、Master&Worker

二、配置文件


一、Master&Worker

首先我们需要Nginx中是有两个进程,一个是Master,一个是Worker;字面意思来看master就是主,也就是Nginx的管理员,而Worker就是实际的工作者。master接收到信号,传达给worker,由worker去工作;而一个Nginx中可以有许多个worker。

[root@localhost ~]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx 
[root@localhost sbin]# ps -ef | grep nginx 
root       3353   2456  0 22:33 ?        00:00:00 nginx: master process ./nginx
nobody     3355   3353  0 22:33 ?        00:00:00 nginx: worker process
root       3368   3045  0 22:33 pts/0    00:00:00 grep --color=auto nginx

具体worker如何工作呢?如下图所示 ;首先Client发出请求,请求到达Nginx后由master检测到,master在下发信号给worker,但是一个Nginx中不止一个worker,当worker收到消息后会争抢这个请求,争抢到后再做具体的事情。(Nginx不支持JAVA,所以如果需要使用JAVA,则需要配合使用Tomcat)

优势:

  • 可以使用热部署(./nginx -s  reload),利用Nginx进行热部署操作。因为一般在实际项目中,一个Nginx服务器中可能会有多个服务在运行,显然不可能停止Nginx。当其中有一个worker已经有任务时,使用重新加载Nginx命令,这样这个有任务的worker不会进行重置,其他没有任务的Nginx将会进行重新加载,当下次有新的任务时其余worker进行争抢。
  • 一个Nginx下有多个worker,多个worker之间都是独立的进程,每个worker都互不影响,当一个worker挂掉之后还可以有其他worker进行争抢,实现请求过程,不会造成服务终端,这就大大提升了可靠性。

多少个worker合适?

Nginx redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 CPU 的性能发挥到极致。所以 worker 数和服务器的 CPU 数相等是最为适宜的 。设少了会浪费CPU,设多了会造成 CPU 频繁切换上下文带来的损耗。

设置worker数量:

worker_processes 4
#work 绑定 cpu(4 work 绑定 4cpu)。
worker_cpu_affinity 0001 0010 0100 1000

#work 绑定 cpu (4 work 绑定 8cpu 中的 4 个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000

连接数worker_connection

这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes

客户端发送一个请求,占用了 woker 的几个连接数?答案是2 或者 4 个。如果是静态资源,客户端发出请求,而Nginx服务器就可以直接进行回复,所以这是两个连接数;当客户端访问动态资源时,Nginx服务器需要和后方的Tomcat、数据库等其他后端服务器产生交互,这就需要额外的两个连接数。

所以普通的静态访问最大并发数是:worker_connections * worker_processes /2,而如果是 HTTP 作为 Reverse proxy 来说,最大并发数量应该是 worker_connections * worker_processes/4。

 

二、配置文件

[root@localhost conf]# grep -Ev "^$|#" nginx.conf
worker_processes  1;                           //worker的数量
events {
    worker_connections  1024;                  //每个worker的最大连接数
}
http {
    include       mime.types;                  //http模块为实现服务配合模块,可以包含多个server模块
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.73.128;
        location /www/ {
            root   /data/;
            index  index.html index.htm;
        }
        location /image/ {
            root   /data/;
	    autoindex on;
}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值