
当master接收到重新加载的信号会怎么处理(./nginx -s reload)?,master会重新加载配置文件,然后启动新的进程,使用的新的worker进程来接受请求,并告诉老的worker进程他们可以退休了,老的worker进程将不会接受新的,老的worker进程处理完手中正在处理的请求就会退出。
worker进程是如何处理用户的请求呢?首先master会根据配置文件生成一个监听相应端口的socket,然后再faster出多个worker进程,这样每个worker就可以接受从socket过来的消息(其实这个时候应该是每一个worker都有一个socket,只是这些socket监听的地址是一样的)。当一个连接过来的时候,每一个worker都能接收到通知,但是只有一个worker能和这个连接建立关系,其他的worker都会连接失败,这就是所谓的惊群现象,为了解决这个问题,nginx提供一个共享锁accept_mutex,有了这个共享锁后,就会只有一个worker去接收这个连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。
nginx服务器采用的事件驱动机制不同,他不会为每个消费事件创建一个进程或线程,这样就不会产生由于进程间频繁切换占用cpu而产生的瓶颈,而且nginx不会让事件阻塞,即采用无阻塞事件驱动模型,这样就不会因为事件阻塞使进程睡眠而造成的资源浪费.
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况
与docker的集成的话,是直接写docker容器名,感觉跟docker集成度很高,或者说自己支持docker,实际上就是端口转发。
第一步,设置两个内部网络,nginx从80端口接收到信息,在内部进行转发了。
首先有这几个容器
django是标准的。
mysql的难点就是设置账号的问题,这个必须敲指令,这里我大概是直接写死了账号,但是这是在内部调用,只要没有root,就没有关系吧。
nginx的文件是需要自己挂载的,实际上,挂载完这个文件后就可以什么都不用管了。
启动,应该就可以运行了。
nginx的配置文件是在/etc/nginx/nginx.conf,不同的应用会有不同的conf,
镜像的话,有ssdjango,普通mysql镜像,和一个普通的nginx镜像。
错了,mysql直接设密码就可以。。。。
而ssdjango必须还要挂载。
注意的是,必须用compose,否则镜像会泛滥。
mysql必定是需要挂载的,即便现在不挂载,未来也要挂载的。
而且挂载只是用在compose上吧?
django是把web拷贝进去呢,还是挂载卷呢?
这个意义不大吧,拷贝进去吧。
因为现在的demo,是app2直接拷贝过来的,并不是很好。。。
2980

被折叠的 条评论
为什么被折叠?



