nginx

1. Nginx的主要三个应用场景

    请求到达 --> nginx:静态资源服务、API服务、反向代理服务

    1. 静态资源服务:通过本地文件系统提供服务;

    2. 反向代理服务:缓存加速、负载均衡;

    3. API服务:OpenResty

2. OpenResty:一种整合Nginx和lua的框架,由Nginx核心和很多第三方模块组成;

    1. 默认集成了Lua开发环境,使得Nginx可以作为一个WebServer使用;

    2. 借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序;

    3. OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使得在Nginx上开发Web应用更方便、简单。

3. lua

    1. Lua 是一个小巧的脚本语言,作者是巴西人,目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能;

    2. Lua脚本可以很容易被C/C++代码调用,也可以反过来调用C/C++的函数,使得Lua在应用程序中可以被广泛应用;

    3. Lua不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML, ini等文件格式,并且更容易理解和维护;

    4. Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行;

    5. 一个完整的Lua解释器不过200KB,在目前所有脚本引擎中,Lua的速度是最快的,这一切都决定了Lua是作为嵌入式脚本的最佳选择。

4. Nginx的优点

    1. 轻量级,同样起web服务比apache占用更少内存及资源;

    2. Nginx 异步非阻塞的方式处理高并发请求,能保持低资源、低消耗、高性能;

    3. 高度模块化设计,编写模块相对简单,生态圈强大。

    4. 核心有点:高并发、高性能、高可扩展、高可靠性、热部署、BSD许可证。

5. Nginx为什么性能高、占用内存少?

    1. Nginx采用多进程模式,对每个worker进程来说,独立的进程不需要加锁,互不影响;

    2. 一个进程退出后,其他进程继续工作,服务不会中断,master进程则很快启动新的worker进程;

    3. worker进程异常退出肯定是程序有bug导致,但也只会影响当前worker上的请求,不会影响到其他进程的请求,降低风险;

    4. Nginx采用异步非阻塞的方式去处理请求,更加高效。

6. Nginx组成:

    1. 二进制可执行文件:由各模块源码编出的一个文件;

    2. 配置文件:控制Nginx的行为;

    3. 访问日志:记录每一条http请求信息;

    4. 错误日志:定位问题。

Nginx的编译安装(Linux)

1.下载nginx压缩包:wget http://nginx.org/download/nginx-1.15.9.tar.gz2.解压目录结构:1.auto目录:辅助编译等功能;2.conf目录中是示例配置文件;3.configure脚本:生成中间文件,执行编译前的必备动作;4.把contrib/vim下的文件移入~/.vim目录下,让vim识别nginx的配置文件节点;      cp -r contrib/vim/* ~/.vim  ---> vim conf/nginx.conf 打开配置文件 */5.html目录:50x.html和index.html(Nginx欢迎页),发生500错误会重定向到50x.html6.man目录:Linux对nginx的帮助文件;7.src目录:nginx的源代码;8.查看configure支持的参数:./configure --help      --prefix=path:使用默认参数,path表示nginx的安装目录2.编译安装1.开始编译准备:./configure --prefix=/home/develop/nginx2.生成 objs 目录,存放生成的中间文件,其中 ngx_modules.c 决定了哪些模块会被编译进nginx3.执行编译:make,编译完成后生成的中间文件和最终要运行的nginx二进制文件存放在 objs 目录中;4.如果是执行nginx版本升级,不能执行 make install 安装,而是把 objs 中的目标文件nginx 拷贝到安装目录中;5.C语言编译生成的中间文件存放在 objs/src 中;6.如果使用了动态模块,其编译生成的so文件也会存放在 objs 目录中;7.首次安装时,执行 make install8.安装目录nginx:sbin(二进制文件目录),conf(配置文件目录),logs(日志目录),html(50x.html和index.html)

Nginx部署

1. 通用语法1. 配置文件由指令与指令块构成;2. 每条指令以 ; 结尾,指令与参数间以空格符分割;3. 指令块以 {} 将多条指令组织在一起;4.include语句允许组合多个配置文件,以提升可维护性;5. 使用# 添加注释,提高可阅读性;6. 使用 $ 引用变量;7. 部分指令的参数支持正则表达式。2. 配置参数1. 时间单位:ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天)、w(周)、M(月)、y(年)2. 空间单位:不加任何单位表示bytes,k/K表示KB,m/M表示MB,g/G表示GB;3. http配置的指令块:http、server、location、upstream4. nginx命令行1. 启动nginx:进入nginx/sbin目录,执行 ./nginx2. 把nginx设置为全局命令:进入sbin目录,cp nginx /usr/sbin/    访问本机IP地址如http://192.168.181.128/,进入Nginx的欢迎页,则安装成功3. nginx -h:帮助4. nginx -c 配置文件路径:使用指定的配置文件5. nginx -g、-p:指定配置指令、指定运行目录6. nginx -t、-T:测试配置文件是否有语法错误;7. nginx -v、-V:nginx的版本信息、编译信息等;8. 发送信号 -s        nginx -s stop:立刻停止服务        nginx -s quit:优雅的停止服务        nginx -s reload:在nginx不停止的情况下重载配置文件        nginx -s reopen:重新开始记录日志文件5. 热部署(热升级)1. 备份当前正在运行的旧版本nginx/sbin下的二进制文件nginx:cp nginx nginx.old2. 在把新版本的二进制文件nginx拷贝到旧版本nginx/sbin目录下:cp -r objs/nginx /home/dev/nginx/sbin/ -f3. 通知nginx的master进程准备进行热部署:kill -USR2 master进程ID4. master进程会使用新版二进制文件nginx,启动一个新的master进程,同时把请求都平滑过渡给新的master进程;5. 旧的worker进程也不再监听80、443这样的端口了,新的请求都会交给新的worker进程6. 通知旧的master进程优雅的关闭其worker进程:kill -WINCH 旧master进程ID7. 旧的master进程不会自动退出,以便于做版本回退,让旧master进程拉起其worker进程。6. 日志切割1. 在nginx正常运行的情况下,备份日志2. 拷贝一份日志到其他文件,再执行 nginx -s reopen,nginx会重新生成一个日志文件;3. 往往会用一个 shell 脚本,每隔一段时间,自动执行一次日志备份和 reopen命令。7. GoAccess:图形化实时监控Nginx的Log日志的工具,基于websocket

Nginx的架构

Nginx是多进程结构,由一个Master进程、多个子进程构成,子进程又分为Worder进程和Cache进程

    1. 多进程结构保证了高可用性、高可靠性,进程间的独立性不会引发灾难性问题;

    2. 而多线程是共享内存空间的,一旦引发内存错误,会导致多线程所在的进程挂掉;

    3. Worker进程有多个,负责处理请求,Master进程负责监控Worker进程;

    4. Cache进程又分为Cache manager和Cache loader,各有一个进程;

    5. 进程间通信使用共享内存,协同工作.

nginx进程管理:信号

1. Master进程    1. 监控worker进程:CHLD,当子进程终止时,会向Master进程发送 CHLD 信号;    如果Worker进程意外终止,Master进程能通过 CHLD 信号重新拉起Worker进程;    2. 管理worker进程:通常不会直接向worker进程发送信号,而是通过向Master进程发送信号,管理Worker进程;    3. nginx命令发送的信号:        TERM、INT(立刻停止Nginx进程),QUIT(优雅地停止Nginx进程),        HUP(重载配置文件),USR1(重新打开日志文件,做日志文件地切割)    4. Linux命令kill发送的信号:USR2,WINCH(nginx还没有对应的nginx命令)2. Worker进程:TERM、INT,QUIT,USR1,WINCH    1. nginx命令:    reload:HUP,reopen:USR1,stop:TERM,quit:QUIT3. 热升级流程    1. 将旧nginx二进制文件备份,然后替换成新nginx二进制文件;    2. 向master进程发送USR2信号;    3. master进程修改pid文件名,加后缀.oldbin    4. master进程用新nginx二进制文件启动新master进程;    5. 向老master进程发送WINCH信号,关闭老worker进程;    6. 回滚:向老master进程发送HUP,向新master发送QUIT。4. 优雅的关闭Workder进程    1. 优雅的关闭主要针对http请求,因为诸如websocket连接,nginx无法判定是否处于通信状态;    2. Worker进程可以识别当前的进程没有http处理请求,尽可能不让用户接收到连接失败;    3. 关闭过程:        1. 设置定时器:worker_shutdown_timeout,加上标志位        2. 关闭监听句柄:不在接受新的请求连接        3. 关闭空闲连接        4. 在循环中等待全部连接关闭:如果定时时间到了,请求还没有处理完成,仍然强制关闭        5. 退出进程5. Nginx事件收集、分发器的驱动模型:epoll6. Nginx中最常用的容器:红黑树

https://www.jianshu.com/p/844664a1a9c5

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 大多数 Nginx 新手都会频繁遇到这样一个困惑,那就是当同一个location配置块使用了多个 Nginx 模块...
    SkTj阅读 7,542评论 0 12
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,854评论 0 3
  • 初识Nginx Nginx 特点 高并发,高性能epoll io 模型处理大并发请求32核64G服务器能支持100...
    DivenYang阅读 871评论 0 1
  • http://blog.csdn.net/gnail_oug/article/details/52754491 n...
    不排版阅读 3,217评论 1 1
  • 和我交谈几句后,TA便离开了,落寞的背影,处处透着虚弱与孤寂。 TA说TA被强暴了,看得出来,衣衫破裂,双目通红,...
    若青w阅读 154评论 0 0