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://xiahunao.cn/news/2804152.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

过年放鞭炮

解法&#xff1a; 取巧 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int t, n;cin >> t;while (t--) {cin >> n;vec…

素数筛法详解:埃氏筛和欧拉筛

主要讲解怎么判断一个数字是否是素数&#xff1a; 埃式筛 学习埃氏筛之前&#xff0c;我们先看一下暴力筛法&#xff0c;即对每个数都用试除法判断其是不是质数&#xff1a; 暴力筛法&#xff1a; # include <stdio.h>int main() {int st[N]; // 初始化为0&#xff0…

GitLab代码库提交量统计工具

1.说明 统计公司所有项目的提交情况&#xff0c;可指定分支和时间段&#xff0c;返回每个人的提交新增数、删除数和总数。 2.API 文档地址&#xff1a;http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例&#xff1a; [{"id": 1, //项目ID"http…

Microsoft 365自定义安装软件

如图&#xff0c;在安装类型的步骤的时候&#xff0c;可以勾选自己想要的软件&#xff08;而非一股脑儿的安装一大堆自己不需要的&#xff09;。

搜索引擎是如何工作的?

搜索引擎是如何工作的&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 搜索引擎是如何工作的&#xff1f; 搜索引擎在互联网时代扮演着至关重要的角色&#xff0c;它们不仅极大地影响了人们获取信息的方式&#xff0c;还…

RSA加密原理

2024.2.23 密钥对的生成过程 1、随机找两个质数 P 和 Q &#xff0c;P 与 Q 越大&#xff0c;越安全 本例取 P 67 &#xff0c;Q 71 计算他们的乘积 N P * Q 4757 转化为二进为 1001010010101&#xff0c;该加密算法即为 13 位&#xff0c;实际使用中的算法是往往是 …

基于RK3399 Android11适配OV13850 MIPI摄像头

目录 1、原理图分析2、编写和配置设备树3、调试方法4、遇到的问题与解决5、补丁 1、原理图分析 从上图可看出&#xff0c;我们需要关心的&#xff0c;①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤…

kali xrdp

Kali Linux 使用远程桌面连接——xrdp&xfce_kali xfce桌面-CSDN博客 Ubuntu/Debian/Kali xrdp远程桌面黑屏/空屏/无画面解决办法 - 知乎 (zhihu.com) sudo apt-get install xrdp -y sudo apt-get install xfce4 -ysudo systemctl enable xrdp --now systemctl status xrd…

RabbitMQ监控方法以及核心指标

RabbitMQ监控方法以及核心指标 1. 监控指标采集2. 使用rabbimq插件采集指标2.1 3.8.0之前版本&#xff0c;使用外部插件暴露2.2 3.8.0之后版本&#xff0c;使用内置插件暴露 3. 使用rabbitmq_exporter采集指标3.1 部署rabbitmq_exporter3.2 prometheus采集rabbitmq_exporter的暴…

【知识分享】自动化测试首选接口自动化?

在分层测试的“金字塔”模型中&#xff0c;接口测试属于第二层服务集成测试范畴。 相比UI自动化测试而言&#xff0c;接口自动化测试收益更大&#xff0c;且容易实现&#xff0c;维护成本低&#xff0c;有着更高的投入产出比。因此&#xff0c;项目开展自动化测试的首选一般为接…

OpenHarmony—UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动三方支付UIAbility&#xff09;。 本章节将从如下场…

MFC 多文档程序的基本编程

下载了一个openGL mfc的多文档程序,以此来学习mfc多文档模式的编程; 1 基本编程 它每次新建一个文档,会在窗口绘制一个三角形、一个矩形;如果没有了图形刷新一下; 先看一下为什么每次打开新文档会绘制图形; 生成工程之后主要有5个类,比单文档程序多了一个子框架类; 可…

主流开发语言和开发环境:探索编程世界的基础

在当今这个快速发展的技术时代&#xff0c;软件开发已经成为推动创新的重要力量。无论是构建下一代应用、开发先进的算法还是创建复杂的系统&#xff0c;选择合适的编程语言和开发环境都是至关重要的。在本文中&#xff0c;我们将探讨当前流行的几种主流开发语言以及它们常用的…

从零学习Linux操作系统第二十六部分 shell的基础知识

一、脚本存在的意义及幻数的作用 什么是shell &#xff1a;保护内核 脚本中命令的解释器 shell脚本的意义 1.记录命令执行的过程和执行逻辑&#xff0c;以便以后重复执行 2.脚本可以批量处理主机 3.脚本可以定时处理主机 如何创建shell脚本 #!/bin/bash ##幻数 幻数是最优…

C# CAD2016 cass10宗地Xdata数据写入

一、 查看cass10写入信息 C# Cad2016二次开发获取XData信息&#xff08;二&#xff09; 一共有81条数据 XData value: QHDM XData value: 121321 XData value: SOUTH XData value: 300000 XData value: 141121JC10720 XData value: 权利人 XData value: 0702 XData value: YB…

jenkins配置ssh的时候测试连接出现Algorithm negotiation fail

背景&#xff1a;当jenkins升级后&#xff0c;同时ssh插件也升级&#xff0c;测试ssh连接的时候 出现的问题&#xff1a; com.jcraft.jsch.JSchAlgoNegoFailException: Algorithm negotiation fail: algorithmName"server_host_key" jschProposal"ecdsa-sha2-n…

pikachu靶场-SQL-Inject

介绍&#xff1a; 在owasp发布的top10排行榜里&#xff0c;注入漏洞一直是危害排名第一的漏洞&#xff0c;其中注入漏洞里面首当其冲的就是数据库注入漏洞。一个严重的SQL注入漏洞&#xff0c;可能会直接导致一家公司破产&#xff01; SQL注入漏洞主要形成的原因是在数据交互中…

Android中Transition过渡动画的简单使用

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、布局xml文件代码如下&#xff1a; <?xml version"1.0" encoding&quo…

C#与VisionPro联合开发——INI存储和CSV存储

1、INI存储 INI 文件是一种简单的文本文件格式&#xff0c;通常用于在 Windows 环境中存储配置数据。INI 文件格式由一系列节&#xff08;section&#xff09;和键值对&#xff08;key-value pairs&#xff09;组成&#xff0c;用于表示应用程序的配置信息。一个典型的 INI 文…

德州红马来酰亚胺,Texas Red-Mal,标记反应反应迅速、选择性高

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;德州红马来酰亚胺&#xff0c;Texas Red maleimide &#xff0c;Texas Red Mal&#xff0c;Texas Red-maleimide &#xff0c;Texas Red-Mal 一、基本信息 【产品简介】&#xff1a;Texas Red maleimide is a fluor…