博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx初识
阅读量:4631 次
发布时间:2019-06-09

本文共 2464 字,大约阅读时间需要 8 分钟。

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;  }}

 

转载于:https://www.cnblogs.com/codechange/p/10330779.html

你可能感兴趣的文章
WIn7下Ubuntu 14.04 安装
查看>>
学习日记
查看>>
json操作2
查看>>
BOS项目 第2天(BaseDao、BaseAction、用户登录、自定义strust登录拦截器)
查看>>
zoj 3554 A Miser Boss
查看>>
HDU-1004 Let the Balloon Rise STL map
查看>>
javascript tab切换类LixTabs最新版
查看>>
Java 从现在到次日零时还剩余多少秒
查看>>
CCF-碰撞的小球
查看>>
Linux内核初期内存管理---memblock(转)
查看>>
黑客第一课
查看>>
Centos7 安装 telnet 服务
查看>>
Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)...
查看>>
3.1、final、finally、 finalize
查看>>
国家气象局提供的天气预报接口
查看>>
MongoDB 删除数据库
查看>>
前端基础之JQuery
查看>>
hdu 3664 1~n排列(ai>i ) 为k个数
查看>>
AppStore SDK
查看>>
java多线程
查看>>