Nginx初识

kill -HUP pid 重启nginx

./nginx -s reload/stop 重启/停止nginx

select/poll/epoll/kqueue

在24G内存的机器上,处理的并发请求数达到过200万

ulimit -n 一个进程所能够打开的fd的最大数


基本的web服务器,事件通常有三种类型,网络事件、信号、定时器

ginx通过设置worker_connectons来设置每个进程支持的最大连接数
对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections *
worker_processes,而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections *
worker_processes/2。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会
占用两个连接

Nginx模块:
1、event module: 搭建了独立于操作系统的事件处理机制的框架,提供了具体事件的处理。
包括ngx_events_module, ngx_event_core_module和ngx_epoll_module等。Nginx具体
使用何种事件处理模块,依赖于具体的操作系统和编译选项

2、phase handler: 此类型的模块被称为handler模块。主要负责处理客户端请求并产生待响应
内容,比如ngx_http_static_module模块,负责客户端的静态页面请求处理并将对应的磁盘
文件准备为响应内容输出

3、output filter: filter模块,主要负责对输出的内容进行处理,可以对输出进行修改。
例如,可实现对输出的所有HTML页面增加预定义footbar一类的工作,或者对输出的图片的URL
进行替换之类的工作

4、upstream: upstream模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从
后端服务器上读取响应,返回客户端。upstream模块是一种特殊的handler,只不过响应内容
不是真正由自己产生的,而是从后端服务器上读取的

5、load-balance: 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择服务器出来
作为某个请求的转发服务器


Nginx的请求处理
Nginx使用一个多进程模型来对外提供服务,其中一个master进程,多个worker进程,
master进程负责管理Nginx本身和其它worker进程。 所有实际上的业务处理逻辑都
在worker进程。worker进程中又一个函数,执行无限循环,不断处理收到的来自客户端
的请求,并进行处理,直到整个Nginx服务被停止。

worker进程中,ngx_worker_process_cycle函数就是这个无限循环的处理函数,一个
请求的简单处理流程如下

1、操作系统提供的机制(epoll, kqueue等)产生相关的事件
2、接收和处理这些事件,如是接受到数据,则产生更高层的request对象
3、处理request的header和body
4、产生响应,并发送回客户端
5、完成request的处理
6、重新初始化定时器及其他事件


Nginx指令上下文

1、main: Nginx在运行时与具体业务功能无关的一些参数,比如工作进程数,运行的身份等
2、http: 与提供http服务相关的一些配置参数,例如是否使用keepalive,gzip压缩等
3、server: http服务上支持若干虚拟主机,每个虚拟主机一个对应的server配置项,配置
项里面包含该虚拟主机相关的配置。在提供mail服务的代理,也可以建立若干的server,
每个server通过监听的地址来区分
4、location: http服务中,某些特定的URL对应的一系列配置项
5、mail: 实现email相关的SMTP/IMAP/POP3代理,共享的一些配置项


Nginx简单配置示例

user nobody;
worker_processes 1;
error_log logs/error.log info;

events {
  worker_connections 1024;
}

http {
  server {
    listen 80;
    server_name www.linuxidc.com;
    access_log logs/linuxidc.access.log main;
    location / {
      index index.html;
      root /var/www/linuxidc.com/htdocs;
    }
  }
  server {
    listen 80;
    server_name www.Androidj.com;
    access_log logs/androidj.access.log main;
    location / {
      index index.html;
      root /var/www/androidj.com/htdocs;
    }
  }
}

mail {
  auth_http 127.0.0.1:80/auth.php;
  pop3_capabilities "TOP" "USER";
  imap_capabilities "IMAP4rev1" "UIDPLUS";

  server {
    listen 110;
    protocol pop3;
    proxy on;
  }
  server {
    listen 25;
    protocol smtp;
    proxy on;
    smtp_auth login plain;
    xclient off;
  }
}

 

posted @ 2019-01-28 16:36  秋水秋色  阅读(105)  评论(0编辑  收藏  举报