Nginx 配置文件解读

一.配置文件解读

nginx配置文件主要分为四个部分

main{ #(全局设置)http{ #服务器配置upstream{} #(负载均衡服务器设置)server{ #(主机设置:主要用于指定主机和端口)location{} #(URL匹配的设置)}}
}

server继承自httplocation继承自serverupstream即不会继承其他设置也不会被继承。

在这里插入图片描述

1.1、main 全局配置

nginx在运行时与具体业务功能无关的一些参数,比如工作进程数,运行的身份等。

user liming;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log  /data/nginx/logs/error.log  crit;
pid        /data/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535;
  • user nginx: 指定nginx进程使用什么用户启动
  • worker_processes 4: 指定启动多少进程来处理请求,一般情况下设置成CPU的核数,如果开启了ssl和gzip应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。使用grep ^processor /proc/cpuinfo | wc -l查看CPU核数。
  • worker_cpu_affinity 0001 0010 0100 1000: 在高并发情况下,通过设置将CPU和具体的进程绑定来降低由于多核CPU切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。
  • error_log logs/error.log: error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
  • pid logs/nginx.pid: 指定进程pid文件的位置

我们可以使用ps -ef | grep nginx查看masterworker的进程,这里有一个master和四个worker:

在这里插入图片描述

1.2、events模块

events 模块主要是nginx 和用户交互网络连接优化的配置内容,我们主要看一下两个配置:

events{use epoll;worker_connections  65536;
}
  • use epoll:是使用事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。在操作系统不支持这些高效模型时才使用select。
  • worker_connections 65536:每一个worker进程能并发处理(发起)的最大连接数。
1.3、http服务器
http{include       mime.types;default_type  application/octet-stream;#charset  gb2312;sendfile        on;keepalive_timeout  60s;
}
  • include:是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。该文件也在conf目录中。
  • default_type:属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式。
  • charset gb2312: 指定客户端编码格式。
  • sendfile:实际上是 Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用 sendfile这个系统调用。sendfile是个比 read 和 write 更高性能的系统接口。 当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能。 但是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用。
  • Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。
1.4、虚拟主机配置详解

http服务上支持【若干虚拟主机】。每个虚拟主机对应一个server配置项,配置项里面包含该虚拟主机相关的配置。

server{listen 80 default;server_name www.liming.com;index index.html index.htm index.php;root /data/www;location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires      30d;}location ~ .*\.(js|css)?${expires      1h;}
}
  • listen 80: 监听端口,默认80,小于1024的要以root启动。可以为listen :80、listen 127.0.0.1:80等形式。
  • server_name www.liming.com: 用于设置虚拟主机服务名称,如:127.0.0.1 、 localhost 、域名[www.baidu.com | www.jd.com],也可以进行正则匹配。
  • root /data/www: 定义服务器的默认网站根目录位置。可以是linux的绝对路径(/xxx/xx),也可以是nginx安装目录的相对路径(html)。
  • index index.jsp index.html index.htm :定义路径下默认访问的文件名,一般跟着root放。
1.4.1、location 常见的配置项

location通常用来匹配uri,其基本语法如下:

location [=|~|~*|^~] /uri/ {}

(1)=表示匹配uri时必须做到完全匹配,如

location = /index {}

(2)~表示匹配URI时是字母大小写敏感的,可以使用正则表达式

(3)~*表示匹配URI时是忽略字母大小敏感的,可以使用正则表达式

(4)^~表示匹配uri时只需满足前缀匹配即可

# 所有 /./img/开头的uri会全部匹配
location ^~ /./img/ {}

(5)uri参数中是可以使用正则表达式的,如匹配以 .gif .jpg和.jpeg结尾的uri,如下:

location ~* \.(gif|jpg|jpeg)$ {}

(6)以下方式可以匹配所有的uri

location / {}

(7)@ 指定一个命名的location,一般用于内部重定义请求:

location @name {}

结果总结: 匹配的优先顺序,=> ^~(匹配固定字符串,忽略正则)>~*>/ ,工作中尽量将‘=’放在前面。

1.4.2、文件路径的定义

(1)以root方式设置资源路径

语法 root path ,默认 root html,可以在http、server、location模块中配置。

location ^~ /backend {root /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/backend/index/test.html这个文件。

(2)以alias方式设置资源路径

alias也是用来设置文件资源的,它和root不同点在于如何解读紧跟location后面的uri参数,可以在location中配置:

location ^~ /backend {alias /data/www/backend
}

如果url为 /backend/index/test.html则会返回/data/www/backend/index/test.html文件。

alias会将location后的url部分丢弃掉,而root不会

(3)访问首页

可以在http、server、location中配置。

index index.html index.htm index.php

nginx会依次访问index中定义的文件,知道访问成功为止。

(4)根据http返回码重定向页面

可以在http、server、location中配置。

error_page 404 /404.html
error_page 502 503 504 /50x.html

(5)try_files

try_files path1 path2 ... uri

该配置项可以配置在server、location模块。

try_files后边会跟若干路径,nginx会尝试按照顺序访问每一个path,如果可以有效的读取,就直接访问当下path资源,否则继续向下访问,如果都读取不到就重定向到uri参数上

try_files /a/b.html $uri $uri/index.html $uri.html @other;
location @other {proxy_pass http://backend
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CUDA学习笔记(十四) Constant Memory

转载至https://www.cnblogs.com/1024incn/tag/CUDA/ CONSTANT MEMORY constant Memory对于device来说只读但是对于host是可读可写。constant Memory和global Memory一样都位于DRAM,并且有一个独立的on-chip cache,比直接从constant Memory读取要快得多…

【C++笔记】C++继承

【C笔记】C继承 一、继承的概念二、继承的语法和权限三、父类和子类成员之间的关系3.1、子类赋值给父类(切片)3.2、同名成员 四、子类中的默认成员函数4.1、构造函数4.2、拷贝构造4.3、析构函数 五、C继承大坑之“菱形继承”5.1、什么是“菱形继承”5.2、解决方法 一、继承的概…

数据结构-- 并查集

0. 引入 并查集是来解决等价问题的数据结构。 离散数学中的二元关系。 等价关系需满足自反性、对称性、传递性。 a ∈ S , a R a a R b & b R a a R b ∩ b R c > a R c a \in S, aRa \\ aRb \& bRa \\ aRb \cap bRc >aRc a∈S,aRaaRb&bRaaRb∩bRc>a…

【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决

编译时出现的错误: mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:161: recipe for target ‘all’ failed mingw32-make: *** [all] Error 2解决方法: 根据贴吧老哥的解答,发现是mingw版本有问题导…

【JAVA学习笔记】43 - 枚举类

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/enum_ 〇、创建时自动填入版权 作者等信息 如何在每个文件创建的时候打入自己的信息以及版权呢 菜单栏-File-setting-Editor-File and Code Templaters -Includes-输入信…

自动化测试07Selenium01

目录 什么是自动化测试 Selenium介绍 Selenium是什么 Selenium特点 工作原理 SeleniumJava环境搭建 Selenium常用的API使用 定位元素findElement CSS选择语法 id选择器:#id 类选择 .class 标签选择器 标签名 后代选择器 父级选择器 自己选择器 xpath …

2.1 向量与线性方程组

一、行图像与列图像 线性代数的中心问题是求解线性方程组。线性的意思是这些方程的未知数是一次的,即每个未知数只会乘数字,而不会出现 x x x 与 y y y 相乘的项。下面是一个由两个未知数组成的方程组: 两个方程 两个未知数 { x − 2 y 1…

杂谈:DC对Verilog和SystemVerilog语言的支持

DC对Verilog和SystemVerilog语言的支持 设计语言用哪种?Design Compiler对二者的支持简单的fsm电路测试测试结果对比写在最后 设计语言用哪种? 直接抛出结论:先有电路,后为描述。设计端而言,没有语言的高低好坏&#…

妙手ERP功能更新丨Shopee全球产品支持使用定价模板修改价格、Ozon新增SKU模板 、Temu采集箱支持添加货源链接......

为了给卖家朋友带来更好的使用体验,更高效地运营跨境店铺,妙手ERP在近两周优化了以下多项功能。 01、平台授权模块 TikTok - 支持授权美国跨境店及ACCU店铺,TikTok平台各功能均可使用 02、产品模块优化 全平台 - 支持产品重量单位切换 Sho…

centos搭建elastic集群

1、环境可以在同一台集群上搭建elastic,也可以在三台机器上搭建,这次演示的是在同一台机器搭建机器。 2、下载elastic :https://www.elastic.co/cn/downloads/past-releases#elasticsearch 2、​​​​​​ tar -zxvf elasticsearch-xxx-版…

KNN(K近邻)水仙花的分类(含答案)

题目 以下采用K-NN算法来解决水仙花的分类问题,每个样本有两个特征,第一个为水仙花的花萼长度,第二个为水仙花 的花萼宽度,具体数据见表, 1)设置k3, 采用欧式距离,分析分类精度为多少…

vue如何使用冻结对象提升代码效率及其原理解析

先给大家伙整个实际工作中一定会碰到的问题 如下vue dome ,它的代码非常简单功能也1非常简单,就是一个按钮,点击后会显示有多少条数据 来看看源码, html部分就是一个按钮绑定了一个loadData事件,然后在p标签内展示了这个myData这个数据的长度 <template><div id&quo…

电解电容寿命与哪些因素有关?

电解电容在各类电源及电子产品中是不可替代的元器件&#xff0c;这些电子产品中由于应用环境的原因&#xff0c;使它成为最脆弱的一环&#xff0c;所以&#xff0c;电解电容的寿命也直接影响了电子产品的使用寿命。 一、电解电容失效模式与因素概述 铝电解电容器正极、负极引出…

proteus中仿真arduino的水位测试传感器

一、原理介绍 我们这里使用的水位传感器&#xff0c;只能说是一个小实验用途的水位传感器。我们首先上图 如上图所示&#xff0c;线没有连接&#xff0c;传感器由许5对裸露在外的铜线片作为传感部分&#xff0c;当浸入水中时这些铜线片会被水桥接。 这些被水连接起来的铜线&a…

最新Tuxera NTFS2023最新版Mac读写NTFS磁盘工具 更新详情介绍

Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下&#xff0c;MacOSX只能实现对NTFS的读取功能&#xff0c;Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2023完美兼容最新版本的MacOS 11 Big Sur&#xff0c;在M1芯片…

Redis内存回收机制-内存淘汰策略和过期策略

Redis是基于内存操作的非关系型数据库&#xff0c;在内存空间不足的时候&#xff0c;为了保证程序的运行和命中率&#xff0c;就会淘汰一部分数据。如何淘汰数据&#xff1f;这就是Redis的内存回收策略。 Redis中的内存回收策略主要有两个方面&#xff1a; Redis过期策略&#…

UE4 UltraDynamicSky 天气与水体交互

最上面的Lerp的A通道为之前的水面效果&#xff0c;B是做的冰面效果 用Dynamic_Landscape_Weather_Effects的BaseColor的R通道四舍五入作为Lerp的Alpha值 使用一张贴图&#xff0c;乘以RadialGradientExponential对材质边缘做弱化&#xff0c;RadialGradientExponential的Raid…

【目标检测】Co-DETR:ATSS+Faster RCNN+DETR协作的先进检测器(ICCV 2023)

论文&#xff1a;DETRs with Collaborative Hybrid Assignments Training 代码**&#xff1a;https://github.com/Sense-X/Co-DETR 文章目录 摘要一、简介二、本文方法2.1.概述2.2.协同混合分配训练2.3. 定制的正 Query 生成2.4. Co-DETR为何有效1、丰富编码器的监督2、通过减少…

集成学习方法之随机森林-入门

1、 什么是集成学习方法 集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型&#xff0c;各自独立地学习和作出预测。这些预测最后结合成组合预测&#xff0c;因此优于任何一个单分类的做出预测。 2、 什么是随机森林 在机器学习中&…

Axi接口的DDR3:参数,时序,握手机制

参考 AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事&#xff1f;_axi wrap-CSDN博客 还有官方手册&#xff0c;名字太长想起来再写。 Transaction/Burst/Transfer/Beat Transaction指一次传输事务&#xff0c;实际上包括了address phase, data phase与response ph…