IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> nginx配置文件及工作原理详解 -> 正文阅读

[系统运维]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或客户端来主动关掉连接,到此,一个连接就完成了。
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:36:33  更:2022-03-11 22:36:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:25:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码