Nginx 基础详解

Posted 雪狐晨光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 基础详解相关的知识,希望对你有一定的参考价值。

春生夏长,秋收冬藏

目录

Nginx简介

Nginx配置

1. 全局块

2. events块

3. http块

4. server块

5. location块

Nginx架构

1. Web请求处理机制

2. 事件处理机制

3. 设计架构

master进程

woker进程

进程启动

进程交互



参考文档 常见服务器产品


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 基础详解的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 配置详解

nginx配置文件详解

nginx配置详解

Nginx配置文件(nginx.conf)配置详解

Nginx配置文件(nginx.conf)配置详解

Nginx 配置文件 nginx.conf 详解