Nginx 基础详解
Posted 雪狐晨光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 基础详解相关的知识,希望对你有一定的参考价值。
春生夏长,秋收冬藏
目录
参考文档 常见服务器产品
nginx简介
Apache\\Microsoft IIS\\Tomcat\\Lighttpd\\Nginx等。
Nginx服务器功能丰富,既可以作为HTTP服务器,也可以作为代理&反向代理或者邮件服务器;能够快速响应静态页面;支持fastcgi、ssl、virtual host、url rewrite、http basic auth、Gzip等大量功能;并且支持第三方功能模块扩展。
正向代理其实就是用户主动使用代理,这个代理对用户来说是透明的,对用户来说,这个代理属于正向。反向代理是与正向代理相反,这个代理是用户不知道的,都是在服务器端自己做的处理,这个代理对用户来说,是反向的。
客户端代理->正向代理(隐藏用户)
服务端代理->反向代理(隐藏服务)
Nginx配置
worker_processes 1; // 全局
events // events
worker_connections 1024;
http // http
include mime.types; // http全局
default_type application/octet-stream;
sendfile on;keepalive_timeout 65;
server // server
listen 80; // server全局
server_name test1.aa.com;access_log "/home/work/orp/log/webserver/access_log_wap" main; // format 自定义服务日志的格式字符串 off为取消访问日志 log_format main string 定义服务日志格式
location / // location
root html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
server // server
listen 80; // server全局
server_name test2.aa.com;location / // location
root html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
1. 全局块
主要是设置一些影响nginx服务的整体运行的指令,通常配置nginx服务器的用户(组)、允许生成的work process数目、nginx进程PID存放路径,日志存放路径和类型以及配置文件的引入。
worker_processes 1; // nginx进程最多可以产生的worker process数目
user nobody; // 配置运行nginx的用户 nobody表示所有用户可以启动
error_log /home/work/log/error_log notice; // errorlog存放路径
pid /home/work/var/nginx.pid; // 配置nginx进程pid存放路径
include file; // file是要引入的配置文件,它支持相对路径。注:新引用进来的文件要求运行nginx进程的用户对其具有写权限,并且符合nginx配置文件的相关语法和结构
2. events块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。
events
use epoll; // 事件驱动模型的选择 method包括select/poll/kqueue/epoll/rtsig/eventport
worker_connections 8192; // 配置单个worker process的最大链接数目,默认512
3. http块
http块是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
http 块也可以包括http全局块、server 块。
include mime.types; // 引用mime.types文件包括浏览器可以识别的mime类型
default_type application/octet-stream; // 用于处理前端请求的mime类型
sendfile on;keepalive_timeout 65;
4. server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。后面会详细介绍虚拟主机的概念。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
listen 80; // 端口监听
server_name test1.aa.com; // 基于名称的虚拟主机配置access_log "/home/work/orp/log/webserver/access_log_wap" main; // format 自定义服务日志的格式字符串 off为取消访问日志 log_format main string 定义服务日志格式
location / // location
root html;
index index.html index.htm;
5. location块
一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
location / // location
root html; // 配置请求的根目录
index index.html index.htm; // 设置默认首页
location的语法结构:location [ = | ~ ~* | ^~] uri (...)。
uri变量是带匹配的请求字符串,可以是包含正则表达式和不包含正则表达式。据此我们可以划分为标准URI和正则URI。
- “=”: 用于标准URI前,要求请求字符串与uri严格匹配。如果已经匹配成功,就停止向下搜索并且立即处理此请求。
- “~”:用于表示URI包含正则表达式,并且区分大小写。
- “~*”:用于表示URI包含正则表达式,并且不区分大小写。
- “^~”:用于标准URI前,要求Nginx找到标识URI和请求字符串匹配度最高的location后,立即处理此location请求,而不继续使用location块中的正则uri和请求字符串匹配。
配置请求的根目录可以在location中通过指明root配置,还可以通过alias指令改变location接收到的URI请求路径。
Nginx架构
1. Web请求处理机制
一般情况完成并行处理请求的工作有三种方式可以选择:多进程、多线程和异步。关于异步,需要再次描述一下同步、异步
阻塞和非阻塞的概念。
同步和异步是描述通信模式的概念。同步机制是发送方发送请求后,需要等待接收到接收方发回的响应后才接着发送下一个请求;异步极致是和同步相反,在异步机制中,发送方发送一个请求后,不等待接收方响应这个请求,就继续发送下个请求。
阻塞和非阻塞时用来描述进程处理调用的方式,在网络通信中主要是指socket的阻塞和非阻塞,而socket的实质也就是IO操作。socket阻塞调用的方式时,调用结果返回之前,当前线程从运行状态刮起,一直等到结果返回,才进入就绪状态,获取CPU继续执行;非阻塞方式正好相反,在非阻塞方式中如果调用结果不能够马上返回,当前线程不会改起,合适立即返回进行下一个调用。
nginx服务器显著优势时能够同时处理大量并发请求。它是结合多进程机制和异步机制提供服务,异步机制是异步非阻塞的方式。nginx启动后开启多个worker process勇于接收和处理客户端请求。
2. 事件处理机制
事件驱动模型是Nginx服务器保障完整功能和良好性能的重要机制之一。事件驱动处理库,又被称为多路IO复用方法。事件驱动概念:在持续的事物管理过程中,由当前时间节点上出现的事件引起的调用可用资源执行相关任务,解决问题,防止事物堆积的一种策略。 一般由:事件收集器、事件发送器和事件处理器组成。
参考: nginx事件驱动模型_onlymayao的博客-CSDN博客_nginx 事件驱动模型
nginx中常用的事件驱动模型有:select、poll、epoll
实时信号事件驱动模型:rtsig
基于平台的事件驱动模型有:kqueue、dev/poll、eventport
3. 设计架构
Nginx 服务器使用 master/worker 多进程模式。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处理网络请求与响应。
master进程
主要用来管理worker进程,具体包括如下4个主要功能:
- 接收来自外界的信号。
- 向各worker进程发送信号。
- 监控woker进程的运行状态。
- 当woker进程退出后(异常情况下),会自动重新启动新的woker进程。
woker进程
主要用来处理基本的网络事件
- 多个worker进程之间是对等且相互独立的,他们同等竞争来自客户端的请求。
- 一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
- worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。同时,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。
进程启动
进程交互
master-worker:主进程生成工作进程后,将新生成的工作进程加入到工作进程表中,并建立一个单向管道且传递给工作进程。
worker-worker:由于工作进程是相互隔离的,因此一个进程要知道另一个进程的信息,只能通过工作进程,为了达到工作进程交互的目的,主进程在生成工作进程后,在工作进程表中遍历,将该新进程的ID以及针对该进程创建的管道句柄传递给工作表中的其他工作进程,为工作进程之间的交互做准备。每个工作进程捕获通道中的可读事件,根据指令采取响应措施。
例:#向Nginx主进程发送USR1信号,重新打开日志文件 kill -USR1 `cat $PID`
以上是关于Nginx 基础详解的主要内容,如果未能解决你的问题,请参考以下文章