NGINX笔记

作者:刘宾, thomas_liub@hotmail.com
请尊重作者著作权,转载请注明出处,谢谢!


参考

架构

  • 1个master进程,多个worker(对应CPU内核个数)进程
  • master进程接收外部信号,控制worker
    • nginx -s reload
    • 根据配置文件创建listenfd
    • fork worker进程
  • worker进程采用异步非阻塞,epoll
    • 同时处理成千上万请求
    • aparche一般采用多线程同步操作,数千个线程带来内存资源占用,CPU切换开销
    • 在24G内存的机器上,处理的并发请求数达到过200万
  • connection是对TCP的封装
    • ngx_connection_t结构
    • worker_connectons, 每个worer最大连接个数
    • worker_processes * worker_connections * ngx_connection_t
    • 作为反向代理, worker_processes * worker_connections/2
    • worker会维护ngx_accept_disabled计数器,保证连接资源多的worker优先处理
  • 作为客户端请求其他server数据,upstream模块

request处理流程

Nginx模块

Core模块,ngx_core_module

main()
    |_ ngx_master_process_cycle()
        |_ ngx_start_worker_processes()
            |_ ngx_worker_process_cycle()
                |_ ngx_worker_process_init()
                |_ main loop
                    |_ ngx_process_events_and_timers()
                        |_ ngx_event_process_posted(ngx_posted_accept_events)
                        |_ ngx_event_process_posted(ngx_posted_events)
                    |_ ngx_reopen_files()
ngx_events_module:
    |_ ngx_event_process_init()
        |_ ngx_event_accept()
        |_ ngx_event_recvmsg()
ngx_http_module:
    |_ ngx_http_block()
        |_ ngx_http_init_phase_handlers()
        |_ ngx_http_optimize_servers()
            |_ ngx_http_init_listening()
                |_ ngx_http_add_listening()
                    |_ ngx_create_listening()
                    |_ ngx_http_init_connection()
                        |_ ngx_http_wait_request_handler()
                            |_ ngx_http_create_request()
                            |_ ngx_http_process_request_line()
                                |_ ngx_http_read_request_header()
                                |_ ngx_http_parse_request_line()
                                |_ ngx_http_process_request()
                                    |_ ngx_http_request_handler()
                                    |_ ngx_http_handler()
                                |_ ngx_http_process_request_headers()

Nginx配置文件

  • 简单配置项
error_page   500 502 503 504  /50x.html;
  • 复杂配置项
location / {
    root   /home/jizhao/nginx-book/build/html;
    index  index.html index.htm;
}
  • main
    nginx在运行时与具体业务功能(比如http服务或者email服务代理)无关的一些参数,比如工作进程数,运行的身份等。
  • http
    与提供http服务相关的一些配置参数。例如:是否使用keepalive啊,是否使用gzip进行压缩等。
  • server
    http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置。在提供mail服务的代理时,也可以建立若干server.每个server通过监听的地址来区分。
  • location
    http服务中,某些特定的URL对应的一系列配置项。
  • mail
    实现email相关的SMTP/IMAP/POP3代理时,共享的一些配置项(因为可能实现多个代理,工作在多个监听地址上)。

编译

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

推荐阅读更多精彩内容

  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,670评论 24 1,002
  • 本文系转载》》》》》》》》》》》》》》》》 编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在...
    demop阅读 8,042评论 0 7
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,867评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 能在冬天清晨起床出去晨跑的,都是条汉子。 说实话,我大概是从12年就开始折腾想跑步,但是一直都没行动力,早上起不来...
    cora的生活手册阅读 181评论 0 1