【读书笔记】深入理解Nginx模块开发与架构解析(二)

三. Nginx配置
1.运行中Nginx进程关系

一个master进程管理多个worker进程,一般,worker进程数与cpu核心数相等。worker进程负责处理请求,master进程负责监控管理worker进程。worker进程之间通过共享内存、原子操作等进程间通信机制实现负载均衡。


2.nginx服务的基本配置
nginx服务的配置安装用户的预期功能分为四类:
(1)用于调试、定位问题的配置项
        daemon on|off;        //守护进程运行
        master_process on;     //以master进程管理多个worker进程的方式运行
        error_log logs/error.log error;
        debug_points [stop|abort]  //执行到调试点发出设定信号
        debug_connection [IP|CIDR]  //对特定IP输出DEBUG日志
        worker_rlimit_core size;     //设置核心转储文件大小的限制
        working_directory path;     //指定coredump文件生成目录

(2)正常运行的必备配置项
        env VAR=VALUE                   //定义环境变量
        include /path/file                //保护其他配置文件
        pid path/file                        //master进程ID文件存放路径
        user username [groupname] //work进程运行的用户级用户组
        worker_rlimit_nofile limit         //work进程可打开的最大文件句柄数
        worker_rlimit_sigpending limit   //每个用户发往nginx的信号队列的大小

(3)优化性能的配置项
        worker_processes number //worker进程的个数
        work_cpu_affinity cpumask [cpumask...]  //绑定worker进程到指定的cpu内核
        ssl_engine device;             //SSL硬件加速
        timer_resolution t;            //设置系统调用gettimeofday的频率
        worker_priority nice;         //worker进程优先级设置
        
(4)事件类配置项
        accept_mutex [on|off]  //是否打开负载均衡锁
        lock_file path/file;        //打开accept锁时,用文件锁实现accept锁
        accept_mutex_delay Nms;    //获取accept锁失败后,间隔多长时间再次取锁
        multi_accept [on|off];    //批量建立新连接
        user [kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]//选择事物模型
        work_connections number   //每个worker的最大连接数

3.配置一个静态WEB服务器
所有的HTTP配置项都必须只属于http块、server块、location块、upstream块或者if块等。
(1)虚拟主机与请求的分发
当存在多个主机域名对应同一个IP地址,nginx.conf可以按照server_name通过server块来定义虚拟主机,每个server块就是一个虚拟主机。
listen address:port [default | default_server | [backlog=num | rcvbug=size | sndbuf=size | accept_filter=filter deferred | bind | piv6only=[on|off] | ssl ]]   //监听端口
server_name name[...]   //主机名称
server_names_hash_bucket_size  //散列表存储server name.设置每个散列桶的内存大小
server_names_hash_max_size      //
server_name_in_redirect   on|off   //重定向主机名称的处理
location [= |~ | ~* | ^~ | @ ] /uri/ {....}    //对URI进行匹配,成功后用location的配置来处理请求,其中=要求URI完全匹配,~匹配时大小写敏感,~*忽略大小写,^~表示匹配URI时只需要其前半部分与URI参数匹配即可。@表示只用于nginx服务器内部请求的重定向。/可以匹配所有请求
(2) 文件路径的定义
root  path;  //以root的方式定义配置项,保留匹配的URL
alias path;    //以alias的方式定义路径,丢弃匹配的url
index file;    //访问首页
error_page code [code ...]  [= | =answer-code ] uri| @named_location
example:  error_page 404  /404.html
                 error_page 502 503  /50x.html
                 error_page 403   http://www.example.com/forbindden.html

recursive_error_pages  [on|off]  //是否允许递归使用error_page
try_files path1 [path2] uri;         //

(3)内存及磁盘资源分布
client_body_in_file_only  on|clean|off;    //HTTP包体只存储到磁盘文件中
client_body_in_single_buffer on|off;       //http包体尽量写入到一个内存buffer
client_header_buffer_size size;                //存储http头部的内存buffer大小
larger_client_header_buffers number sieze ;     //存储超大http头部的内存buffer大小
client_body_buffer_size size;                  //nginx接受http包体的内存缓冲区大小
client_body_temp_path dir-path  [level1 [ level2 [ level3 ] ] ] //设置存放http包头的临时目录
connection_pool_size size;                    //为每个建立成功的TCP连接非配的内存池大小
request_pool_size size;                          //每个http请求建立的内存池大小

(4)网络连接的设置
client_header_timeout time 
client_body_timeout time;
send_timeout time;
reset_timeout_connection;
lingering_close  off | on | always;  //关闭用户连接的方式
lingering_time time ; 
lingering_timeout time;
keepalive_disable [msie6|safari|...]   //对某些浏览器禁用keepalive功能
keepalive_timeout time;
keepalive_requests n;
tcp_nodelay on|off;
tcp_nopush on|off;


4.设置反向代理
(1)负载均衡的基本配置
 upstream name {...}
 upstream backedn {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
}
server {
    location / {
        proxy_pass http://backend;
    }
}
server name [parameters]  // weight=number; max_fails=number; fail_timeout=time; down; backup;
ip_hash;  //根据用户请求Ip计算出一个key值,然后对upstream集群的服务器数量进行取模;
 
(2)反向代理基本配置

proxy_pass URL  //将请求反向代理到URL指定的服务器上,可以是ip+端口,或UNIX句柄,或upstream块,或https地址
proxy_method method;                 //GET/POST
proxy_hide_header  the_header;   //指定哪些http头不能转发
proxy_pass_header header;           //将默认禁止的header设置为发送
proxy_pass_request_body on|off;  //是否向上游发送HTTP包体部分
proxy_pass_request_headers  on|off;     //确定是否转发http头部
proxy_redirect   [default | off | redirect  replacement ];   //当上游服务器返回301或302,是否对url进行域名替换
proxy_next_stream [ error | timeout | invalid_header | http_500 | http_502| http_404 | off ]; //当一台机器请求发生错误,换一台继续




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx是一个高性能的Web服务器,同时也是一个反向代理服务器和电子邮件(IMAP/POP3)代理服务器。它最显著的特点是具有高并发处理能力和低内存占用。为了满足不同用户的需求,nginx提供了模块化的架构,可以通过开发模块来扩展其功能。 深入理解nginx模块开发,首先需要了解nginx架构nginx的主要部分包括master进程和worker进程。master进程负责管理worker进程,而worker进程负责处理实际的客户端请求。nginx模块系统允许开发者向master进程或worker进程添加自定义的功能。 在nginx模块开发中,主要涉及到以下几个方面的内容: 1. 配置文件解析nginx的配置文件是使用类似于C语言的语法进行解析的。模块开发者需要了解nginx的配置文件语法,并且能够解析和处理自定义的配置项。 2. HTTP请求处理:开发基于HTTP协议的模块时,需要能够处理和解析HTTP请求。模块可以拦截特定的URL,处理请求,并返回相应的响应。 3. 事件处理:nginx使用事件驱动的模型来处理并发请求。模块开发者需要了解事件驱动的机制,实现自己的事件处理逻辑,并与nginx的事件处理系统进行交互。 4. 内存管理:nginx以低内存占用著称,这是因为它使用了自己的内存管理机制。模块开发者需要了解nginx的内存管理方式,并遵循相应的规则。 5. 日志记录:nginx提供了灵活的日志记录功能。模块开发者可以通过定制日志记录方式,将特定的信息记录到指定的日志文件中。 总的来说,深入理解nginx模块开发架构解析需要对nginx的整体架构有深入了解,并具备一定的系统编程和网络编程经验。通过开发和调试模块,可以进一步理解nginx的原理和内部实现,掌握更多高性能Web服务器开发的知识和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值