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

  • 1 nginx配置文件的结构
  • 2 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  localhostindex  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或客户端来主动关掉连接,到此,一个连接就完成了。

nginx配置文件及工作原理详解相关推荐

  1. sync.Map低层工作原理详解

    sync.Map低层工作原理详解 目录 为什么需要sync.Map?适合什么场景? sync.Map内部实现基本原理及结构体分析 sync.Map低层工作原理 1. 为什么需要sync.Map?适合什 ...

  2. ASP.NET页面与IIS底层交互和工作原理详解 (二)

    第三回: 引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler ...

  3. camera (13)---智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono

    智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono 由于双摄技术的快速发展,目前已经衍生出了几种不同的双摄硬件和算法配置解决方案.不同手机厂商可能有不同的双摄配置,比如华为荣耀P9 ...

  4. ASP.NET页面与IIS底层交互和工作原理详解(一)

    第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实 ...

  5. 有刷直流电机工作原理详解

    有刷直流电机工作原理详解 来源:网络整理• 2018-05-10 09:00 • 56380次阅读 有刷直流电机被广泛用于从玩具到按钮调节式汽车坐椅的应用中.有刷直流 (Brushed DC,BDC) ...

  6. 晶体三极管结构及其工作原理详解

    晶体三极管基本概述 晶体管是一种与其他电路元件结合使用时可产生电流增益.电压增益和信号功率增益的多结半导体器件.因此,晶体管称为有源器件,而二极管称为无源器件.晶体管的基本工作方式是在其两端施加电压时 ...

  7. FTP协议及工作原理详解

    FTP协议及工作原理详解 1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的 ...

  8. 卡尔曼滤波工作原理详解

    卡尔曼滤波工作原理详解 网上看到有不少的博客翻译 How a Kalman filter works, in pictures, 这篇文章中非常有趣的解释了卡尔曼滤波,. 但是目前很多翻译的文章中公式 ...

  9. 网络爬虫工作原理详解

    网络爬虫工作原理详解 一.通用网络爬虫运行原理 二.聚焦网络爬虫运行原理

最新文章

  1. 标注工具_语料标注工具(3)
  2. Android 7.0 init.rc的一点改变
  3. mysql主从复制 drbd_MySql主从复制简单案例实现
  4. python哲学翻译_Python
  5. 最新Jmeter版本常用技巧集锦
  6. 4. ubuntu php composer
  7. java分形树_java画分形树实例
  8. 平方方程应该都有整数解
  9. golang高级部分
  10. 安川伺服总线通讯方式_终于有人把常用的三种通讯方式:RS485、RS232、RS422讲明白了...
  11. 2021年上半年数据库系统工程师上午真题及答案解析
  12. Eclipse项目环境配置
  13. java打印表格_如何在java中使用printf()打印出表格?
  14. iOS系统日历多了莫名其妙的事项
  15. O(nlogn) 求LIS(Longest Increasing Subsequence)方法的总结
  16. TensorFlow2.0选择GPU或CPU训练
  17. Springboot集成Redis和Redis工具类
  18. 浏览器播放视频没声音
  19. Java小游戏——五子棋(简易版)
  20. 【创造者】创造的鉴赏力

热门文章

  1. php主要算法设计,四种排序算法设计(PHP)
  2. android 广告效果图,android 仿首页广告轮播效果
  3. python多继承顺序_Python多重继承方法解析顺序(MRO构建算法)
  4. 数据科学工具 Jupyter Notebook 教程(一)
  5. 《零基础免费学扩增子分析》视频课(含ppt及相应代码),无需转发,直接获取...
  6. NC:港大张彤团队-基于组学的耐药基因风险评估框架
  7. ISME:微生物网络构建与分析面临的挑战
  8. 求求你使用Tab键好吗
  9. 你想要的宏基因组-微生物组知识全在这(180801)
  10. R语言笔记8:两个重要函数——用来分解数据框的split和用来查看对象的str