我是靠谱客的博主 怕黑水杯,最近开发中收集的这篇文章主要介绍浅谈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返回给客户端。
/ 它只能更改为重定向状态代码之一(301、302、303、307和308)。
/ 当且仅当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
根据root
和alias
指令从参数 构造的 。 - 可以通过在名称末尾指定斜杠来检查目录的存在,例如
“ $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级⽬录占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:
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( 二 )???? 定义客户端请求的相关配置???? 对客户端进行限制的相关配置???? 文件操作优化的配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复