Linux-核心配置拓展

检测文件是否存在

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

语法格式

Syntax: try_files file ... uri;
try_files file ... =code;
Default: —
Context: server, location

 

location / {
   root /data/nginx/html/pc;
   index index.html;
   try_files $uri  $uri.html $uri/index.html /about/default.html;
    #try_files $uri $uri/index.html $uri.html =489;
}
[root@centos8 ~]# echo "default page" >> /data/nginx/html/pc/about/default.html
#重启nginx并测试,当访问到http:
//www.magedu.org/about/xx.html等不存在的uri会显示 default.html,如果是自定义的状态码则会显示在返回数据的状态码中 #注释default.html行,启用上面489响应码的那一行,在其生效后再观察结果
location
/ { root /data/nginx/html/pc; index index.html; #try_files $uri $uri.html $uri/index.html /about/default.html; try_files $uri $uri/index.html $uri.html =489; } [root@centos8 ~]# curl -I http://www.magedu.org/about/xx.html

HTTP/1.1 489 #489就是自定义的状态返回码 Server: nginx Date: Thu, 21 Feb 2019 00:11:40 GMT Content-Length: 0 Connection: keep-alive Keep-Alive: timeout=65

长连接配置

keepalive_timeout timeout [header_timeout];  #设定保持连接超时时长,0表示禁止长连接,默认为75s,通常配置在http字段作为站点全局配置
keepalive_requests number; #在一次长连接上所允许请求的资源的最大数量,默认为100次,建议适当调大,比如:
500

 

keepalive_requests 3;
keepalive_timeout  65 60;
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,第二个数字60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时
时间。
Keep-Alive:timeout=60  #浏览器收到的服务器返回的报文
#如果设置为0表示关闭会话保持功能,将如下显示:
Connection:close  #浏览器收到的服务器返回的报文
#使用命令测试: [root@centos8
~]# telnet www.magedu.org 80 Trying 10.0.0.8... Connected to www.magedu.org. Escape character is '^]'. GET / HTTP/1.1 HOST: www.magedu.org #Response Headers(响应头信息): HTTP/1.1 200 OK Server: nginx/1.18.0 Date: Thu, 24 Sep 2020 04:35:35 GMT Content-Type: text/html Content-Length: 7 Last-Modified: Wed, 23 Sep 2020 14:39:21 GMT Connection: keep-alive Keep-Alive: timeout=60 ETag: "5c8a6b3a-7" Accept-Ranges: bytes #页面内容 pc web

 

作为下载服务器配置

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

 

autoindex on | off;#自动文件索引功能,默为off
autoindex_exact_size on | off;  #计算文件确切大小(单位bytes),off 显示大概大小(单位K、M),默认on
autoindex_localtime on | off ; #显示本机时间而非GMT(格林威治)时间,默认off
autoindex_format html | xml | json | jsonp; #显示索引的页面文件风格,默认html
limit_rate rate; #限制响应客户端传输速率(除GET和HEAD以外的所有方法),单位B/s,即
bytes/second,默认值0,表示无限制,此指令由ngx_http_core_module提供
set $limit_rate 4k; #也可以通变量限速,单位B/s,同时设置,此项优级高.Rate limit can also
be set in the $limit_rate variable, however, since version 1.17.0, this method is
not recommended:

 

#注意:download不需要index.html文件
[root@centos8 ~]# mkdir -p /data/nginx/html/pc/download
[root@centos8 ~]# vim /apps/nginx/conf/conf.d/pc.conf
 location /download {
   autoindex on;    #自动索引功能
   autoindex_exact_size   on; #计算文件确切大小(单位bytes),此为默认值,off只显示大概大
小(单位kb、mb、gb)  
   autoindex_localtime   on; #on表示显示本机时间而非GMT(格林威治)时间,默为为off显示GMT
时间
   limit_rate 1024k;   #限速,默认不限速
 root /data/nginx/html/pc;
 }
  
[root@centos8 ~]# cp /root/anaconda-ks.cfg /data/nginx/html/pc/download/
#重启Nginx并访问测试下载页面

 

作为上传服务器

以下指令控制上传数据

client_max_body_size 1m; #设置允许客户端上传单个文件的最大值,默认值为1m,上传文件超过此值会
出413错误
client_body_buffer_size size; #用于接收每个客户端请求报文的body部分的缓冲区大小;默认
16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
client_body_temp_path path [level1 [level2 [level3]]];
#设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量,目录名为16进制的数字,使用
hash之后的值从后往前截取1位、2位、2位作为目录名
[root@centos8 ~]# md5sum /data/nginx/html/pc/index.html
95f6f65f498c74938064851b1bb 96 3d 4 /data/nginx/html/pc/index.html
1级目录占1位16进制,即2^4=16个目录  0-f
2级目录占2位16进制,即2^8=256个目录 00-ff
3级目录占2位16进制,即2^8=256个目录 00-ff
#配置示例:
client_max_body_size 100m; #如果太大,上传时会出现下图的413错误,注意:如果php上传,还需要修
改php.ini的相关配置
client_body_buffer_size 1024k;
client_body_temp_path   /apps/nginx/client_body_temp/ 1 2 2; #上传时,Nginx会自动创
建相关目录


#上传超过nginx指定client_max_body_size值会出413错误
[root@wang-liyun-pc ~]# tail /apps/nginx/logs/nginx.access.log
125.41.184.117 - - [27/Sep/2020:00:09:00 +0800] "POST /wp-admin/async-upload.php
HTTP/1.1" 413 578 "http://www.wangxiaochun.com/wp-admin/post-new.php"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/85.0.4183.121 Safari/537.36 Edg/85.0.564.63" "-"


#上传文件后,会自动生成相关目录
[root@wang-liyun-pc ~]# tree /apps/nginx/client_body_temp/
/apps/nginx/client_body_temp/
├── 5
│ └── 00
│ └── 00
└── 6
└── 00
└── 00

 

 

其他配置

keepalive_disable none | browser ...;  
#对哪种浏览器禁用长连接

limit_except method ... { ... },仅用于location
#禁止客户端使用除了指定的请求方法之外的其它方法,如果使用会出现403错误
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND,
PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {
 allow 192.168.0.0/24;
 allow 10.0.0.1;
 deny all;
}
#除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用
[root@centos8 ~]# mkdir /data/nginx/html/pc/upload
[root@centos8 ~]# echo "upload" > /data/nginx/html/pc/upload/index.html
[root@centos8 ~]# vim /apps/nginx/conf/conf.d/pc.conf
location /upload {
       root /data/nginx/html/pc;
       index index.html;
       limit_except GET {
           allow  10.0.0.6;
           deny all;
       }
}
  
#重启Nginx并进行测试上传文件
[root@centos8 ~]# systemctl restart nginx
[root@centos8 ~]#
[root@centos6 ~]# curl -XPUT /etc/issue http://www.magedu.org/about
curl: (3) <url> malformed
<html>
<head><title>405 Not Allowed</title></head> #Nginx已经允许,但是程序未支持上传功能
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>
[root@centos8 ~]# curl -XPUT /etc/issue http://www.magedu.org/upload
curl: (3) <url> malformed
<html>
<head><title>403 Forbidden</title></head> #Nginx拒绝上传
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>


aio on | off  #是否启用asynchronous file I/O(AIO)功能,需要编译开启 --with-file-aio
#linux 2.6以上内核提供以下几个系统调用来支持aio:
1、SYS_io_setup:建立aio 的context
2、SYS_io_submit: 提交I/O操作请求
3、SYS_io_getevents:获取已完成的I/O事件
4、SYS_io_cancel:取消I/O操作请求
5、SYS_io_destroy:毁销aio的context


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; #缓存错误信息

 

posted @ 2022-06-04 14:34  goodbay说拜拜  阅读(35)  评论(0编辑  收藏  举报