nginx 配置文件详细介绍

一,   nginx 配置文件架构

上一篇  已对 main 全局配置做了详细介绍   本章对剩下的配置文件部分做介绍 

二,event  设置

(一)event 相关的配置文件为

配置工作模式以及连接数

(二)具体表现

1,单个worker最大并发连接数

 worker_connections 65536; #设置单个工作进程的最大并发连接数

注意:要和配置文件中全局配置的    worker_rlimit_nofile 数量;  (所有worker最大并发连接数) 配合

2,   使用epoll事件驱动      

 use epoll;

默认使用epoll事件驱动          Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置                  

3, 惊群

 accept_mutex on;

 #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on

4,一个worker 可以同时接待多个请求

 multi_accept on; 

 #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on

三,   http设置

(一)http 

http 是一个大的语句块,包含若干个小的语句块(比如server语句块)

(二) http 协议配置说明

http {include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录default_type application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
#日志配置部分#log_format main '$remote_addr - $remote_user [$time_local] "$request" '#                 '$status $body_bytes_sent "$http_referer" '#                 '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;
#自定义优化参数sendfile       on;    零拷贝技术#tcp_nopush     on; #在开启了sendfile的情况下,合并请求后统一发送给客户端。#tcp_nodelay   off; #在开启了keepalived模式下的连接是否启用TCP_NODELAY选项,当为off时,延迟0.2s发送,默认On时,不延迟发送,立即发送用户响应报文。#keepalive_timeout 0;keepalive_timeout  65 65; #设置会话保持时间,第二个值为响应首部:keepAlived:timeout=65,可以和第一个值不同#gzip on; #开启文件压缩server {listen       80; #设置监听地址和端口server_name localhost; #设置server name,可以以空格隔开写多个并支持正则表达式,如:*.kgc.com www.kgc.* ~^www\d+\.kgc\.com$ default_server #charset koi8-r; #设置编码格式,默认是俄语格式,建议改为utf-8#access_log logs/host.access.log main;location /fxj  {           www.ky31.com/fsj     /apps/nginx/html   root   /data;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;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ { #以http的方式转发php请求到指定web服务器#   proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ { #以fastcgi的方式转发php请求到php处理#   root           html;#   fastcgi_pass   127.0.0.1:9000;#   fastcgi_index index.php;#   fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;#   include       fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht { #拒绝web形式访问指定文件,如很多的网站都是通过.htaccess文件
来改变自己的重定向等功能。#   deny all;#}location ~ /passwd.html {deny all;}}# another virtual host using mix of IP-, name-, and port-based configuration##server { #自定义虚拟server
3.3.1 MIME
范例: 识别php文件为text/html#   listen       8000;#   listen       somename:8080;#   server_name somename alias another.alias;#   location / { #       root   html;#       index index.html index.htm; #指定默认网页文件,此指令由
ngx_http_index_module模块提供#   }#}# HTTPS server##server { #https服务器配置#   listen       443 ssl;#   server_name localhost;#   ssl_certificate     cert.pem;#   ssl_certificate_key cert.key;#   ssl_session_cache   shared:SSL:1m;#   ssl_session_timeout 5m;#   ssl_ciphers HIGH:!aNULL:!MD5;#   ssl_prefer_server_ciphers on;#   location / {#       root   html;#       index index.html index.htm;#   }#}

1, mime

此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上

 

2,  server块构建虚拟主机

2.1  子配置文件规则

子配置文件委身在http 模块 写其他的模块内容是用的

子配置文件里的内容 和http 模块下面的内容冲突时 以子配置文件为 读配置文件由上而下 所以建议子配置文件放这个模块的最后

2.2 如何写子配置文件

检查一下

2.3  做虚拟主机

两个容易犯错的地方!

注意 子配置文件的位置!在  /apps/nginx/conf.d/

注意关闭防火墙  否则报错    curl: (7) Failed connect to www.m.com:80; 没有到主机的路由

1,在/apps/nginx/conf.d/   各自新建shouji.conf    diannao.conf

2, 分别  给两个访问目录加内容

index.html   是站点文件  因为配置文件写了客户机访问时 默认去这里看

3, 服务机  检查

4, 客户机配置 域名 vim    /etc/hosts

5, 客户机分别访问   看到不同的东西

3,root location

3.1   root location 意义

root    指明根目录的位置

location    追踪url   根据用户访问的地址不同,去往不同的页面

3.2   location 下面再写root

把 局部的根  站点文件写入     111

原理:

直接curl   访问原来的根   (没匹配到location  下面的根)

curl  /shouji/   匹配到location    取下面的根

curl  ip 地址时    子配置文件有两个diannao.conf   和  shouji.conf   按字母排序   先匹配到diannao.conf   所以显示  diannao

4,     alias 别名

server {listen 80;server_name www.kgc.com;location /nwes {root /data/nginx/html/pc/;#相当于追加  将 文件夹news追加到/data/nginx/html/pc/news}location /study{alias /mnt/nginx/sports/;#相当于替换 你访问 study  就是访问/mnt/nginx/sports}
}

(三)  location 去匹配

1, 介绍

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,按一定的优化级找出一个最佳匹配,而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。

2,语法规则

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

=#用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~#用于标准url前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~    #用于标准url前,表示包含正则表达式,并且区分大小写
~*#用于标准url前,表示包含正则表达式,并且不区分大写
不带符号  #匹配起始于此uri的所有的uri

匹配优先级从高到低:
=,           ^~,             ~/~*,         不带符号

3, 例题

4 ,location     一个bug

4.1  区分大小写问题

~*  是不区分大小写的

 #匹配 已A后面一个或没有字符,已.jpg结尾的图片     ?表示1个或0个

然后在 新根  下面放一张图片   改名   a.jpg    

重新加载配置文件

浏览器输入  192.168.217.66/a.jpg      看不到

因为 软件不区分大小写 但是linux的文件系统xfs还是会区分大小写

输入  A.jpg   才能看到图片

5,  location 匹配顺序

5.1  实验1

location 不是由上而下的 是看优先级读    

根据 location  匹配规则   应该按照优先级    匹配/data/index.html   的内容

5.2  实验2

根据优先级 先看到static1 再看到3 再看到2

6,location 作用

因为nginx 不擅长处理动态资源

需要动静分离

静态资源去找nginx 

动态资源 去另外一个服务器

四 , access 模块 四层控制

access 模块   控制ip

(一)如何查看模块是否默认安装

去到源码包

安装nginx时   有些模块默认安装   有些模块是手动安装

without 是默认安装     with  是手动安装

(二) 控制ip

配置文件修改
server {
   listen 80;
   server_name www.kgc.com;
   allow 192.168.91.0/24;
   deny 192.168.91.101;
   location / {
        root /data/nginx/html/pc;
 }
}

匹配了之后就不往下匹配了
所以范围小的往上

写一个子配置文件

可以发现 黑名单客户机访问不了

其他  客户机正常匹配到 opt

五, 验证模块 需要输入用户名和密码

(一)语法

在配置文件加    

 auth_basic    "admin site";
        #提示信息,不是所有浏览器都有用

注意这一行一定要有  开启这个模块 并显示提示信息

auth_basic_user_file/apps/nginx/conf.d/.httpuser;
        #密码文件存放位置    且这个文件 需要用特定的命令生成(htpasswd )

(二)htpasswd

此命令来自于 httpd-tools 包,如果没有安装 一下即可

1,  htpasswd 选项

-c  代表新建用户名和密码对应的文件

htpasswd -c  文件路径 姓名             交互式生成密码

-b  将密码跟在用户名后

htpasswd -c 文件路径 姓名 密码           直接将密码跟在后面 

2, htpasswd 示例

再新增一个   小红用户  直接跟密码

注意: 这两个账户是nginx的虚拟账号

(三)验证模块  示例

注意! 提示信息不是所有浏览器都能看到

           且 此处匹配的是  /mnt/html/admin


六  ,网页的状态页

(一)语法

(二)stub_status 示例

用客户端访问   可以看到网页的状态

(三) 网页状态页具体解释

Active connections#当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
accepts#统计总值,Nginx自启动后已经接受的客户端请求的总数
handled#统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests#统计总值,Nginx自启动后客户端发来的总的请求数。
Reading#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
Writing#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
 
Waiting#当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)

(四)提取网页状态页的 Reading Writing Waiting

目的:提取这三个数字

当直接提取  会有很多垃圾信息

把多余的信息  导给垃圾箱

(五) 加密 网页状态页

1,为什么要加密 网页状态页

网页状态页比较机密   所以需要加密。

两个方法可以配合使用

1,用验证模块  要求输入账号密码才能访问  这个网页

2,设置白名单 默认都不能进  只允许自己进

2,加密 网页状态页  并提取Reading Writing Waiting

此时直接用 curl 文字版浏览器会出现401 报错

401报错; 请求  要求用户的身份验证

需要按照url 格式补完用户和密码  再去提取

七,自定义错误页面

我们 可以改变 默认的错误页面,同时也可以用指定的响应状态码进行响应, 可用位置:http, server, location, if in location

(一)格式

(二)示例

#当出现404 错误  就去  /data/error/ 这个文件夹找40x.html  这个文件

给这个 40.xhtml  加内容(你可以把html 理解为一种文件格式 类似txt  index只是名字

客户机 输入没有的地址  不会出现404

八 , 自定义状态码

(一)改404 的意义

但是有些流氓浏览器   会劫持你的网站,当出现404时,没等到你把客户机引导到  自定义的页面,就被劫持了。

所以需要改状态码

(二)步骤

很简单  加上404=302 即可

客户机:  状态码变为302 这样不用担心被劫持了

九, 检测文件是否存在

try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。

(一)语法

注意  :比如客户机访问/abc   依次去试 

主页面的abc文件夹          主页面的 abc.html 文件   主页面下 abc/index.html 文件

最后有个   主页面下 about/default.html 拖底

(二)  示例

注意!!!  不要手贱! 

 try_files $uri $uri.html $uri/index.html /about/default.html            中间不要多打空格!

 在拖底文件夹 里写入tuodi

客户机验证:

 

我们再来检验   try_files会按顺序检查   

在 /data 下建abc.html

客户机再次验证: 匹配的是这里的内容

十  , 长连接

http 基于 tcp 协议 先要 三次握手然后 再传输数据

一次三次握手 下载多个资源

一次三次握手下载一个资源

(一)语法

默认开启 在主配置文件

(二)示例

keepalive_requests 3;#最大下载三个资源就会断开
keepalive_timeout 60 65;
(只能有一个空格 )
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60 #浏览器收到的服务器返回的报文
#如果设置为0表示关闭会话保持功能
keepalive_disable none | browser ...;

对哪种浏览器禁用长连接

十一 ,  作为下载服务器配置

(一)介绍

ngx_http_autoindex_module 模块处理以斜杠字符 "/" 结尾的请求,并生成目录列表,可以做为下载服务

(二)语法

(三) 示例

配置文件添加  locatoin  /download

往   /download/   文件夹加入内容

客户机访问

(四)用户上传资料

上传需要借助开发小的程序, 并且程序 5M 和 nginx 10M 都会限制。 两者取最小

十二 ,   其他设置

directio size | off;
#操作完全和aio相反,aio是读取文件而directio是写文件到磁盘,启用直接I/O,默认为关闭,当文件大于等于给定大小时,例如:directio 4m;同步(直接)写磁盘,而非写缓存。直接 写入 磁盘     还是等待一定数据量写入磁盘

open_file_cache off;  #是否缓存打开过的文件信息
open_file_cache max=N [inactive=time];
#nginx可以缓存以下三种信息:
(1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间
(2) 打开的目录结构
(3) 没有找到的或者没有权限访问的文件的相关信息 
max=N:#可缓存的缓存项上限数量;达到上限后会使用LRU(Least recently used,最近最少使用)算法实现管理
inactive=time:#缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses    
#指令所指定的次数的缓存项即为非活动项,将被删除 
open_file_cache_valid time; 
#缓存项有效性的检查验证频率,默认值为60s 
open_file_cache_errors on | off; 
#是否缓存查找时发生错误的文件一类的信息,默认值为off
open_file_cache_min_uses number; 
#open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项,默认值为1范例:
open_file_cache max=10000 inactive=60s; 
#最大缓存10000个文件,非活动数据超时时长60s
open_file_cache_valid   60s;  
#每间隔60s检查一下缓存数据有效性
open_file_cache_min_uses 5; 
#60秒内至少被命中访问5次才被标记为活动数据
open_file_cache_errors   on;
#缓存错误信息limit_except method ... { ... },仅用于location
#限制客户端使用除了指定的请求方法之外的其它方法 
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, 
PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {allow 192.168.91.101;deny all;
}
#除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用

十三,写配置文件时一直有交换提示

有交换提示 把隐藏文件删了

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

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

相关文章

c语言经典测试题3

1.题1 int a 248, b 4; int const *c 21; const int *d &a; int *const e &b; int const * const f &a; 请问下列表达式哪些会被编译器禁止? A: *c 32; B: *d 43 C: e&a D: f0x321f 我们来分析一下:const用来修饰变量是想其…

鸿蒙自定义侧滑菜单布局(DrawerLayout)

前言 为了实现安卓中的侧滑菜单布局效果,通过查找鸿蒙的布局控件,发现SideBarContainer控件有点像,但是使用中发现并不是很符合我们的UI交互效果,因此我在鸿蒙中通过自定义布局的方式实现,本文主要介绍该自定义控件如…

kubernetes负载均衡部署

目录 1.新master节点的搭建 对master02进行初始化配置(192.168.88.31) 将master01的配置移植到master02 修改master02配置文件 2.负载均衡的部署 两台负载均衡器配置nginx 部署keepalived服务 所有node节点操作 总结 实验准备: k8s…

Vue3的computed计算属性和watch监视(四)

一、computed计算属性 <template><div class"person">姓:<input type"text" v-model"first_name"><br>名:<input type"text" v-model"last_name"><br><button click"changeFu…

Linux:Jenkins用户权限和管理

1.下载插件 由于Jenkins的默认权限管理并不是很精细所以我们安装一个插件进行权限的一个管理 插件名称为&#xff1a;Role-based Authorization Strategy 安装完插件我们再去配置一下 进入全局安全配置 选择这个Role-Based Strategy策略然后保存 2.创建角色 我们这里主要使…

【C++私房菜】面向对象中的多重继承以及菱形继承

文章目录 一、多重继承1、多重继承概念2、派生类构造函数和析构函数 二、菱形继承和虚继承2、虚继承后的构造函数和析构函数 三、has-a 与 is-a 一、多重继承 1、多重继承概念 **多重继承&#xff08;multiple inheritance&#xff09;**是指从多个直接基类中产生派生类的能力…

MybatisPlus--03--IService、ServiceImpl

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. IService接口1.1 IService、ServiceImpl 接口的使用第一步&#xff1a;实现basemapper接口第二步&#xff1a;编写service类第三步&#xff1a;编写serviceImpl第…

开发Chrome插件,background.js中log打印未出现在控制台

不同于内容脚本&#xff08;通常命名content.js&#xff09;&#xff0c;在后台脚本&#xff08;通常命名background.js或service-worker.js&#xff09;中console.log并不会在控制台中直接显示。 要查看后台脚本上下文的正确控制台&#xff0c;执行如下步骤&#xff1a; 访问…

蓝桥杯备赛系列——倒计时50天!

蓝桥杯备赛系列 倒计时50天&#xff01; 前缀和和差分 知识点 **前缀和数组&#xff1a;**假设原数组用a[i]表示&#xff0c;前缀和数组用sum[i]表示&#xff0c;那么sum[i]表示的是原数组前i项之和&#xff0c;注意一般用前缀和数组时&#xff0c;原数组a[i]的有效下标是从…

【Python笔记-设计模式】工厂模式

一、说明 (一) 解决问题 提供了一种方式&#xff0c;在不指定具体类将要创建的情况下&#xff0c;将类的实例化操作延迟到子类中完成。可以实现客户端代码与具体类实现之间的解耦&#xff0c;使得系统更加灵活、可扩展和可维护。 (二) 使用场景 希望复用现有对象来节省系统…

Maven depoly:Skipping artifact deployment

问题描述&#xff1a; 使用IDEA执行mvn depoly将本地开发的模块发布到Maven私服时&#xff0c;一直提示&#xff1a;Skipping artifact deployment&#xff0c;自动跳过了depoly部署阶段。 问题分析 Maven构建生命周期中的每一个阶段都是由对应的maven插件执行具体工作的。既然…

使用IDEA创建spring boot web项目并测试运行

文章目录 准备工作构建项目1、通过Maven Archetype构建一个webapp项目2、添加 Spring Boot 所需依赖3、创建配置文件4、创建启动类5、创建web api 接口6、测试web api接口 准备工作 idea下载地址&#xff1a; https://www.jetbrains.com/idea/download/?sectionwindows java下…

关于torch.cuda.is_available() 返回False 详细说明及解决

一 cuda 环境检测失败 cuda 环境检测代码&#xff1a; import torchprint(torch.__version__) print(torch.cuda.is_available()) print(torch.version.cuda) cuda 环境检测代码执行结果如下图&#xff1a; 关键代码print(torch.cuda.is_available()) 返回 False 通常表示当…

java.lang.IllegalStateException: Promise already completed.

spark submit 提交作业的时候提示Promise already complete 完整日志如下 File "/data5/hadoop/yarn/local/usercache/processuser/appcache/application_1706192609294_136972/container_e41_1706192609294_136972_02_000001/py4j-0.10.6-src.zip/py4j/protocol.py"…

Draw.io绘制UML图教程

一、draw.io介绍 1、draw.io简介 draw.io 是一款强大的免费在线图表绘制工具&#xff0c;支持创建流程图、组织结构图、时序图等多种图表类型。它提供丰富的形状库、强大的文本编辑和样式设置功能&#xff0c;使用户能够轻松创建专业级图表。draw.io 具有用户友好的界面&…

LeetCode 热题 100 | 二叉树(终)

目录 1 二叉树小结 1.1 模式一 1.2 模式二 2 236. 二叉树的最近公共祖先 3 124. 二叉树中的最大路径和 菜鸟做题&#xff08;返校版&#xff09;&#xff0c;语言是 C 1 二叉树小结 菜鸟碎碎念 通过对二叉树的练习&#xff0c;我对 “递归” 有了一些肤浅的理解。…

【激光SLAM】基于滤波的激光SLAM方法(Grid-based)

Filter-based SLAM 贝叶斯滤波数学概念贝叶斯滤波特性贝叶斯滤波的推导 粒子滤波&#xff08;Particle filter&#xff09;特性流程状态传播权重评估重采样算法流程存在的问题 FastSLAM的原理及优化FastSLAM介绍算法流程FastSLAM优化存在的问题及优化进一步优化proposal分布最终…

RabbitMQ学习整理————基于RabbitMQ实现RPC

基于RabbitMQ实现RPC 前言什么是RPCRabbitMQ如何实现RPCRPC简单示例通过Spring AMQP实现RPC 前言 这边参考了RabbitMQ的官网&#xff0c;想整理一篇关于RabbitMQ实现RPC调用的博客&#xff0c;打算把两种实现RPC调用的都整理一下&#xff0c;一个是使用官方提供的一个Java cli…

思维模型整合

思维模型整合 4P--- 4C思考模型能力圈模型 4P— 4C思考模型 在竞争激烈的今天&#xff0c;每个赛道都有众多可以为客户提供相同价值的对手&#xff0c;而赛道中的佼佼者之所以能打败大部分人&#xff0c;可能并不是他们能比别人更能讨好大众&#xff0c;而是因为在这个赛道它有…

Jmeter学习系列之六:阶梯加压线程组Stepping Thread Group详解

性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间。 在jmeter中,有这样一个插件,可以帮我们实现这个功能,这个插件就是:Stepping Thread Group 1、下载配置方法 1.1.下载配置 插件下载地址:…