NGINX笔记

作者:刘宾, [email protected]
请尊重作者著作权,转载请注明出处,谢谢!


参考

架构

NGINX笔记_第1张图片
  • 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笔记_第2张图片

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

你可能感兴趣的:(NGINX笔记)