我是靠谱客的博主 怕黑水杯,最近开发中收集的这篇文章主要介绍浅谈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

在这里插入图片描述

error_page 404 /404.html; 
error_page 500 502 503 504 /50x.html;
  • 这将导致内部重定向到uri 客户端请求方法指定的内部重定向更改为“GET”(对于除“GET”和“HEAD” 之外的所有方法)
  • 此外,可以使用=response语法将响应代码更改为另一个,例如:
error_page 404 =200 /empty.gif;
  • 如果错误响应是由代理服务器或FastCGI / uwsgi / SCGI / gRPC服务器处理的,并且服务器可能返回不同的响应代码(例如200、302、401或404),则可以使用该代码进行响应返回:
error_page 404 = /404.php;
  • 如果在内部重定向期间不需要更改URI和方法,则可以将错误处理传递到命名位置:
location / { 
    error_page 404 = @fallback; 
} 
location @fallback { 
    proxy_pass http://后端;

/ 如果uri处理导致错误,最后发生的错误的状态码将返回给客户端。
  • 也可以使用URL重定向进行错误处理:
error_page 403 http://example.com/forbidden.html;
error_page 404 = 301 http://example.com/notfound.html;

/ 在这种情况下,默认情况下,响应代码302返回给客户端。
/ 它只能更改为重定向状态代码之一(301302303307308)。
/ 当且仅当error_page 当前级别上未定义任何指令时,这些指令才从上一级继承 。
  • 示例:当访问www.studylinux.com不存在的时候,返回指定的404错误文件,指定响应码为200
vim /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文件,测试效果
root@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根据rootalias指令从参数 构造的 。
  • 可以通过在名称末尾指定斜杠来检查目录的存在,例如“ $uri/”。如果未找到任何文件,则会进行内部重定向到uri最后一个参数中指定的文件
  • 最后⼀个参数是回退URI且必须存在,否则会出现内部500错误。
  • 示例
location /images/ {
    try_files $uri /images/default.gif;
}
location = /images/default.gif {
    expires 30s;
}
  • 最后一个参数也可以指向一个命名的位置,如下面的例子所示。从0.7.51版本开始,最后一个参数也可以是 code:
location / {
    try_files $uri $uri/index.html $uri.html =404;
}
  • Drupal/FastCGI示例:
location / {
    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
location / {
    try_files $uri $uri/ @drupal;
}
  • 该try_files指令由两段代码组成
#  第一部分
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的示例
location / {
    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

在这里插入图片描述

  • 定义用于存储包含客户端请求正文的临时文件的目录。
  • 在指定目录下最多可以使用三级子目录层次结构。例如,在以下配置中
client_body_temp_path / spool / nginx / client_temp 1 2;
  • 设定存储客⼾端请求报⽂的body部分的临时存储路径及⼦⽬录结构和数量,⽬录名为16进制的数字,
    使⽤hash之后的值从后往前截取1位、2位、2位作为⽂件名:
[root@s3 ~]# md5sum /data/nginx/html/pc/index.html
95f6f65f498c74938064851b1bb 96 3d 4 /data/nginx/html/pc/index.html
1级⽬录占116进制,即2^4=16个⽬录 0-f
2级⽬录占216进制,即2^8=256个⽬录 00-ff
3级⽬录占216进制,即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:
GET, HEAD, POST, PUT, DELETE

MKCOL, COPY, MOVE, OPTIONS, PROPFIND,

PROPPATCH, LOCK, UNLOCK, PATCH
  • 示例
limit_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
  • 示例
aio                      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( 二 )???? 定义客户端请求的相关配置???? 对客户端进行限制的相关配置???? 文件操作优化的配置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部