我是靠谱客的博主 怕黑水杯,这篇文章主要介绍浅谈Nginx模块ngx_http_core_module( 二 )???? 定义客户端请求的相关配置???? 对客户端进行限制的相关配置???? 文件操作优化的配置,现在分享给大家,希望可以做个参考。
浅谈Nginx模块ngx_http_core_module(二)
- ???? 定义客户端请求的相关配置
- 1️⃣ error_page 错误页404
- 2️⃣ try_files 检查文件是否存在
- 3️⃣ keepalive_timeout 设定长连接的超时时长
- 4️⃣ keepalive_requests 长连接允许请求的资源的最大数量
- 5️⃣ keepalive_disable 对哪种浏览器禁用长连接
- 6️⃣ send_timeout 设置用于向客户端发送响应的超时时间
- 7️⃣ client_body_buffer_size
- 8️⃣ client_body_temp_path
- ???? 对客户端进行限制的相关配置
- 1️⃣ limit_rate 限制响应给客户端的传输速率
- 2️⃣ limit_except
- ???? 文件操作优化的配置
- 1️⃣ aio 是否启用异步I/O功能
- 2️⃣ directio 是否同步写磁盘
- 3️⃣ open_file_cache 是否缓存打开过的⽂件信息
- 4️⃣ open_file_cache_errors
- 5️⃣ open_file_cache_min_uses
- 6️⃣ open_file_cache_valid
???? 定义客户端请求的相关配置
1️⃣ error_page 错误页404
复制代码
1
2
3error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
- 这将导致内部重定向到uri 客户端请求方法指定的内部重定向更改为“GET”(对于除“GET”和“HEAD” 之外的所有方法)
- 此外,可以使用
=response
语法将响应代码更改为另一个,例如:
复制代码
1
2error_page 404 =200 /empty.gif;
- 如果错误响应是由代理服务器或
FastCGI / uwsgi / SCGI / gRPC
服务器处理的,并且服务器可能返回不同的响应代码(例如200、302、401或404),则可以使用该代码进行响应返回:
复制代码
1
2error_page 404 = /404.php;
- 如果在内部重定向期间不需要更改URI和方法,则可以将错误处理传递到命名位置:
复制代码
1
2
3
4
5
6
7
8location / { error_page 404 = @fallback; } location @fallback { proxy_pass http://后端; / 如果uri处理导致错误,最后发生的错误的状态码将返回给客户端。
- 也可以使用URL重定向进行错误处理:
复制代码
1
2
3
4
5
6
7error_page 403 http://example.com/forbidden.html; error_page 404 = 301 http://example.com/notfound.html; / 在这种情况下,默认情况下,响应代码302返回给客户端。 / 它只能更改为重定向状态代码之一(301、302、303、307和308)。 / 当且仅当error_page 当前级别上未定义任何指令时,这些指令才从上一级继承 。
- 示例:当访问www.studylinux.com不存在的时候,返回指定的404错误文件,指定响应码为200
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17vim /apps/nginx/conf.d/pc.conf server { server_name www.studylinux.com; location / { root /data/nginx/pc; } error_page 404 = 200 /404.html; location /404.html { root /data/nginx/error_page; } } nginx -t nginx -s reload mkdir -p /data/nginx/error_page echo "SORRY,I AM DEAD!" > /data/nginx/error_page/404.html
- 修改hosts文件,测试效果
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13root@ubuntu1804-31:~# curl www.studylinux.com/xxx SORRY,I AM DEAD! root@ubuntu1804-31:~# curl -I www.studylinux.com/xxx HTTP/1.1 200 OK Server: nginx/1.16.1 Date: Sat, 04 Jan 2020 13:02:31 GMT Content-Type: text/html Content-Length: 17 Last-Modified: Sat, 04 Jan 2020 12:56:12 GMT Connection: keep-alive ETag: "5e108b6c-11" Accept-Ranges: bytes
2️⃣ try_files 检查文件是否存在
- 按指定顺序检查文件是否存在,并使用找到的第一个文件进行请求处理(结尾加斜线表⽰为⽂件夹);
- 该处理在当前上下文中执行。文件的路径是
file
根据root
和alias
指令从参数 构造的 。 - 可以通过在名称末尾指定斜杠来检查目录的存在,例如
“ $uri/”
。如果未找到任何文件,则会进行内部重定向到uri最后一个参数中指定的文件 - 最后⼀个参数是回退URI且必须存在,否则会出现内部500错误。
- 示例
复制代码
1
2
3
4
5
6
7location /images/ { try_files $uri /images/default.gif; } location = /images/default.gif { expires 30s; }
- 最后一个参数也可以指向一个命名的位置,如下面的例子所示。从0.7.51版本开始,最后一个参数也可以是 code:
复制代码
1
2
3
4location / { try_files $uri $uri/index.html $uri.html =404; }
- Drupal/FastCGI示例:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19location / { try_files $uri $uri/ @drupal; } location ~ .php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param QUERY_STRING $args; ... other fastcgi_param's } location @drupal { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; fastcgi_param SCRIPT_NAME /index.php; fastcgi_param QUERY_STRING q=$uri&$args; ... other fastcgi_param's }
- 上述例子中try_files
复制代码
1
2
3
4location / { try_files $uri $uri/ @drupal; }
- 该try_files指令由两段代码组成
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 第一部分 location / { error_page 404 = @drupal; log_not_found off; } # 第二部分 location ~ .php$ { try_files $uri @drupal; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... } # try_files 在将请求传递给FastCGI服务器之前检查PHP文件的存在
- Wordpress和Joomla的示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15location / { try_files $uri $uri/ @wordpress; } location ~ .php$ { try_files $uri @wordpress; fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name; ... other fastcgi_param's } location @wordpress { fastcgi_pass ...; fastcgi_param SCRIPT_FILENAME /path/to/index.php; ... other fastcgi_param's }
3️⃣ keepalive_timeout 设定长连接的超时时长
-
第一个参数设置保持连接的超时时长,0表示禁止长连接。默认为75s,推荐120s
-
可选的第二个参数在
Keep-Alive:timeout = time
响应头域中设置一个值。两个参数可能不同。 -
Mozilla和Konqueror可以识别
Keep-Alive:timeout = time
头域。MSIE在大约60秒内自行关闭保持连接。
4️⃣ keepalive_requests 长连接允许请求的资源的最大数量
在一次长连接上所允许请求的资源的最大数量。默认为100次
5️⃣ keepalive_disable 对哪种浏览器禁用长连接
6️⃣ send_timeout 设置用于向客户端发送响应的超时时间
- 设置用于向客户端发送响应的超时时间。
- 超时仅在两个连续的写入操作之间设置,而不是传输整个响应。
- 如果客户端在这段时间内没有收到任何内容,则连接被关闭
7️⃣ client_body_buffer_size
- 设置读取客户端请求体的缓冲区大小。
- 如果请求体大于缓冲区,则整个身体或仅将其部分写入 临时文件。
- 默认情况下,缓冲区大小等于两个内存页面。这是x86上的8K,其他32位平台和x86-64。其他64位平台通常为16K
- 超出此大小时,其将被暂存到磁盘上的由
client_body_temp_path
指令所定义的位置
8️⃣ client_body_temp_path
- 定义用于存储包含客户端请求正文的临时文件的目录。
- 在指定目录下最多可以使用三级子目录层次结构。例如,在以下配置中
复制代码
1
2client_body_temp_path / spool / nginx / client_temp 1 2;
- 设定存储客⼾端请求报⽂的body部分的临时存储路径及⼦⽬录结构和数量,⽬录名为16进制的数字,
使⽤hash之后的值从后往前截取1位、2位、2位作为⽂件名:
复制代码
1
2
3
4
5
6
7
8
9
10[root@s3 ~]# 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 10m; client_body_buffer_size 16k; client_body_temp_path /apps/nginx/temp 1 2 2; #reload Nginx会⾃动创建temp⽬录
???? 对客户端进行限制的相关配置
1️⃣ limit_rate 限制响应给客户端的传输速率
- 限制响应给客户端的传输速率,单位是bytes/second
- 默认值0表示无限制
2️⃣ limit_except
- 限制客户端使用除了指定的请求方法之外的其它方法,只能用在
location
上下文。 - Method:
复制代码
1
2
3
4
5
6GET, HEAD, POST, PUT, DELETE MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH
- 示例
复制代码
1
2
3
4
5
6limit_except GET HEAD POST { deny 192.168.111.200 allow 192.168.111.0/24; deny all; }
- 表示除了GET、HEAD、POST方法其他方法都限制,
- 主机范围为:禁止192.168.111.200、允许192.168.111.0/24、禁止所有。
- 即仅允许192.168.111.0网段访问,但是禁止192.168.111.200的地址访问
???? 文件操作优化的配置
1️⃣ aio 是否启用异步I/O功能
- 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
2️⃣ directio 是否同步写磁盘
- 操作完全和aio相反,aio是读取⽂件⽽directio是写⽂件到磁盘
- 启⽤直接I/O,默认为关闭,当⽂件⼤于等于给定⼤⼩时,例如
directio 4m
,同步(直接)写磁盘,⽽⾮写缓存。
3️⃣ open_file_cache 是否缓存打开过的⽂件信息
- nginx可以缓存以下三种信息:
(1) ⽂件元数据:⽂件的描述符、⽂件⼤⼩和最近⼀次的修改时间
(2) 打开的⽬录结构
(3) 没有找到的或者没有权限访问的⽂件的相关信息 max=N
:可缓存的缓存项上限数量;达到上限后会使⽤LRU(Least recently used,最近最少使⽤)算法实现
管理inactive=time
:缓存项的⾮活动时⻓,在此处指定的时⻓内未被命中的或命中的次数少于
open_file_cache_min_uses
指令所指定的次数的缓存项即为⾮活动项,将被删除
4️⃣ open_file_cache_errors
- 是否缓存查找时发⽣错误的⽂件⼀类的信息
- 默认值为off
5️⃣ open_file_cache_min_uses
- open_file_cache指令的inactive参数指定的时⻓内,⾄少被命中此处指定的次数⽅可被归类为活动项
- 默认值为1
6️⃣ open_file_cache_valid
- 缓存项有效性的检查验证频率,默认值为60s
- 示例
复制代码
1
2
3
4
5
6
7aio on; # 开启异步I/O directio 4m; # 开启同步磁盘文件大小>4M open_file_cache max=1000 inactive=20s; # 最⼤缓存1000个⽂件,⾮活动数据超时时⻓20s open_file_cache_valid 30s; # 每间隔30s检查⼀下缓存数据有效性 open_file_cache_min_uses 2; # 30秒内⾄少被命中访问2次才被标记为活动数据 open_file_cache_errors on; # 缓存错误信息
ngx_http_core_modules常用模块就写这些了
最后
以上就是怕黑水杯最近收集整理的关于浅谈Nginx模块ngx_http_core_module( 二 )???? 定义客户端请求的相关配置???? 对客户端进行限制的相关配置???? 文件操作优化的配置的全部内容,更多相关浅谈Nginx模块ngx_http_core_module(内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复