nginx配置文件及工作原理详解

nginx配置文件及工作原理详解

1 nginx配置文件的结构

1)以下是nginx配置文件默认的主要内容:

#user  nobody;    #配置用户或组,默认为nobody nobody
worker_processes  1;   #允许生成的进程数,默认为1,该数量就是worker进程的数量,一般设置为与cpu数量相等。也可以设置为auto,表示自动匹配cpu核数

#error_log  logs/error.log;   #指定日志路径和级别 ,级别依次为:debug、info、notice、warn、error、crit、alert、emerg
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;   #指定nginx进程运行文件存放地址


events {
    
    
    worker_connections  1024;   #允许的最大连接数
}


http {
    
    
    include       mime.types;  #文件扩展名与文件类型映射表
    default_type  application/octet-stream;  #默认文件类型

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 #这里是一些自定义格式,其中$remote_addr与$http_x_forwarded_for用于记录客户端ip地址;$remote_user用于记录客户端用户名;$time_local用于记录访问时间和时区;$request用来记录请求的url与http协议;$status记录请求状态;$body_bytes_sent记录发送给客户端文件主体内容大小;$http_referer记录从哪个链接访问的;$http_user_agent记录客户端浏览器相关信息
    #access_log  logs/access.log  main;

    sendfile        on;    ##允许传输文件的方式
    #tcp_nopush     on;

    #keepalive_timeout  0; 
    keepalive_timeout  65;  ##连接超时的时间

    #gzip  on;   ##压缩方式

    server {
    
    
        listen       80;
        server_name  localhost;    #监听地址

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
    
    
            root   html;
            index  index.html index.htm;   #设置默认页
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
    
    
            root   html;
        }
}
  • nginx配置文件中包含http模块,而http模块中又包含server模块,server模块中包含有location模块,其中:
    • events模块:与用户的网络连接相关
    • http模块:可以实现与http协议有关的公共配置,例如代理,缓存,日志,以及第三方模块的配置
    • server模块:提供http服务配置,一个http模块中可以配置多个server
    • location模块:主要用作地址定向,实现路径和服务器建立连接,一个server中可以包含多个location

2)在配置文件中多添加一个location,注意区分两个location
在这里插入图片描述

  • 第一个location后面的 / 代表我们从浏览器访问默认发布页面时后面的 /,也就是说当我们在浏览器中输入 http://192.168.149.201/ 去访问默认发布页面时,该url后面的 / 就等于location后面的 / ,也就是说他会默认访问到服务器上的 /usr/local/nginx/html/index.html 文件。
  • 而root指令表示的是当前location对应的文档根目录是哪里,那么 root html 就表示当前location的文档根目录是html目录,文档根目录是指 当有人访问 / 这个路径时,去服务器的哪个目录中寻找对应的资源,也就是说html就是当前location的资源目录,html目录指的是相对nginx安装目录的相对路径。
  • 第二个location后面是/demo,root指令后面是/opt表示用户访问时,输入的url是http://192.168.149.201/demo,但实际上的资源路径时 http://192.168.149.201/opt/demo/index.html
  • 注意:当配置文件中的index里的指令相同时(如上图的情况),此时可以将相同的部分提出来,写在serverl里,如下所示。不过需要注意的是,它对应的作用域会有所不同
 server {
    
    
        listen       80;
        server_name  localhost
        
        index  index.html index.htm;  ###
        
        location / {
    
    
            root   html;
        }
        
        location /demo {
    
    
            root /opt;        
         }   
}

3)root和alias的区别:

  • 我们除了用root将url和资源路径联系起来之外,还可以使用alias指令
location /demo {
    
    
	alias /opt;
	}
  • 上述配置表示当我们访问 /demo/index.html 时,其实就是在访问服务器的/opt/demo/index.html ,也就是说location的url与alias的路径完全对等;并且alias只能用于location块中

4)注意,为避免cpu在切换晋城市产生消耗,我们可以将worker进程和某个cpu进行绑定,这样可以使得worker更好的使用某个cpu上的缓存,并以此来减少cpu因切换worker进程从而导致的缓存失效。实现该方法需要使用 worker_cpu_affinity指令写入全局块中,它的表示方法是使用0和1表示,1表示使用哪一个cpu,0小时cpu个数,从右边开始算,例如4核的cpu,要使用其中第三个核,则 worker_cpu_affinity 0100

2 nginx工作原理

在这里插入图片描述
(注:图来自百度)

  • 当我们启动nginx后,它会启动两个进程,master和worker。其中worker进程是用于处理真正请求的,而master进程的主要作用是 用于管理worker进程,它会读取配置文件、判断配置文件语法等,它还负责接受信号,将信号分发给worker进程,监听worker进程工作状态,当worker进程非正常退出时,负责启动新的worker进程。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的 。一个请求,只可能在一个worker进程中处理
  • nginx处理请求的过程:
    • nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址;然后在nginx的master进程里面,先初始化好这个监控的socket,再进行listen;然后再fork出多个子进程出来, 子进程会竞争accept新的连接。
    • 此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后;某一个子进程会accept成功,然后Nginx创建对连接的封装,即ngx_connection_t结构体。接着,根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换。
    • 最后,nginx或客户端来主动关掉连接,到此,一个连接就完成了。

猜你喜欢

转载自blog.csdn.net/weixin_54719086/article/details/123372750