Nginx配置文件详解
Nginx配置文件详解
- 1、Nginx配置文件
- 1.1主配置文件详解
- 1.2子配置文件
- 2、全局配置部分
- 2.1修改启动的工作进程数(worker process) 优化
- 2.2cpu与worker process绑定
- 2.3 PID 路径修改
- 2.4 修改工作进程的优先级
- 2.5调试工作进程打开的文件的个数
- 2.6关闭master-worker工作模式(仅测试用)
- 3、events部分
- 4、http设置(http部分)
- 4.1http部分详解
- 4.2mime
- 4.3 server 下的 root指令
- 4.4构建虚拟主机
- 4.4.1基于域名的虚拟主机
- 4.4.2基于端口
- 4.4.3基于ip地址
- 4.5路径别名alias
- 4.6 location模块
- 4.7基于四层的访问控制—access模块
- 4.8验证模块
- 4.8.1htpasswd命令
- 4.8.2 配置验证模块
- 4.9 关闭或修改版本信息
- 4.9.1关闭版本信息显示
- 4.9.2 修改nginx 版本信息
- 4.10 自定义 错误页面
- 4.11 日志位置存放
- 4.12 检测文件是否存在-----try_files指令
- 4.12.1 原理部分
- 4.12.2 配置实例
- 4.13 长连接相关-keepalive指令
- 4.13.1 原理
- 4.13.2 keepalive_timeout
- 4.13.3 keepalive_requests
- 4.14 作为下载服务器配置
- 4.15 用户上传资料
- 4.16 其他设置
1、Nginx配置文件
1.1主配置文件详解
主配置文件:nginx.conf
- 编译安装的主配置文件在自己自定义的文件夹下
- 编译安装的主文件配置在/etc/nginx/nginx.conf
//主配置文件格式main block:主配置段,即全局配置段,对http,mail都有效//配置Nginx服务器的事件模块相关参数
events {...
}
//http/https 协议相关配置段
http {...
} //默认配置文件不包括下面两个模块
//mail 协议相关配置段
mail {...
}
//stream 服务器相关配置段
stream {负载均衡...
}
vim /apps/nginx/conf/nginx.conf
//查看编译安装的nginx的配置文件
1.2子配置文件
子配置文件:
vim /apps/nginx/conf/nginx.conf.default
子配置文件一般在主配置文件的http部分。
http块中可以包含多个子配置文件,常见的子配置文件server块:用于配置HTTP服务器的具体行为,包括监听的端口、虚拟主机的配置、请求处理逻辑等。location块:用于指定不同URL请求的处理方式,例如静态文件的服务、反向代理等。upstream块:用于配置反向代理的目标服务器列表。include指令:用于引入其他的子配置文件,可以将一些通用的配置项单独放在一个文件中,然后通过include指令引入。
2、全局配置部分
2.1修改启动的工作进程数(worker process) 优化
通过使用 auto 参数,Nginx 可以根据系统的负载情况智能地分配工作进程,以提供更好的性能和资源利用率
- 修改主配置文件中的 work_process项
cd /apps/nginx/conf/
vim nginx.conf
- 重载
nginx -s reloadps axo pid,cmd,psr,ni|grep nginx
//查看工作进程的数量
2.2cpu与worker process绑定
在 Nginx 配置文件中,worker_cpu_affinity 指令用于控制 worker 进程与 CPU的亲和性(affinity)关系
未绑定之前,cpu乱跑
vim nginx.conf //进入配置文件修改以下内容
user nginx;
worker_processes auto;
worker_cpu_affinity 01 10;
#绑定到 第一 和 第二块cpu上
nginx -t //检查语法
#补充说明#
worker_cpu_affinity 00000001 00000010; 这意味着每个 worker 进程将绑定到对应的 CPU核心上,编号为 1 和 2。通过这种方式,可以手动调整 worker 进程与 CPU 核心之间的关系,以便更好地利用硬件资源
2.3 PID 路径修改
修改主配置文件
vim nginx.conf
2.4 修改工作进程的优先级
工作进程优先级,-20~20(19)
修改主配置文件
vim nginx.confuser nginx;
worker_processes 2;
worker_cpu_affinity auto;
error_log /var/log/nginx/error.log;
#添加优先级
worker_priority -20;
nginx -t //查看语法是否错误
nginx -s reload //语法无误后 重载
ps axo pid,cmd,psr,ni|grep nginx|sort -n
//查看工作进程的优先级
2.5调试工作进程打开的文件的个数
所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致,
先修改主配置文件
vim nginx.conf
添加
worker_rlimit_nofile 65536
再修改系统默认项
方式一:临时修改
ulimit -n 70000
#修改单个进程能打开的最大文件数为 70000
#仅应用于当前会话即不会永久修改限制
ulimit -a
#显示当前用户的所有资源限制信息
方式二:永久修改,修改pam认证模块
vim /etc/security/limits.conf
#在最后加入
* soft core unlimited
* hard core unlimited
* soft nproc 1000000
* hard nproc 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft memlock 32000
* hard memlock 32000
* soft msgqueue 8192000
* hard msgqueue 8192000`nproc`(最大进程数限制)的软限制和硬限制都设置为 1000000,当前用户在单个会话中可以创建的最大进程数为 1000000`nofile`(打开文件描述符限制)的软限制和硬限制都设置为 1000000,这意味着当前用户在单个会话中可以使用的最大文件描述符数将被限制为 1000000。软限制是软性限制,用户可以根据需要进行调整,而硬限制是硬性限制,一旦设定,用户无法超过该限制`memlock`(锁定内存限制)的软限制和硬限制都设置为 32000,这意味着当前用户在单个会话中可以锁定的最大内存量为 32000KB`msgqueue`(消息队列限制)的软限制和硬限制都设置为 8192000,这意味着当前用户在单个会话中可以使用的最大消息队列大小为 8192000字节
reboot #重启生效
ulimil -a //查看一次
2.6关闭master-worker工作模式(仅测试用)
master_process off|on;
#是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on
3、events部分
在Nginx的主配置文件中,events部分用于配置Nginx服务器的事件模块相关参数,控制Nginx服务器在处理连接请求时的行为。
常见的events配置参数:
- worker_connections:指定每个工作进程可以同时处理的最大连接数。
- multi_accept:指定是否一次接受多个连接。默认情况下,Nginx在每个循环中只接受一个连接,但设置multi_accept为"on"后可以同时接受多个连接。
- use:指定Nginx使用的事件模块。常见的事件模块有"epoll"、"kqueue"和"eventport"等。
events {worker_connections 65536; #设置单个工作进程的最大并发连接数use epoll;#使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。accept_mutex on; #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为onmulti_accept on; #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
}
4、http设置(http部分)
4.1http部分详解
- include:引入其他配置文件,通常用于加载 MIME 类型配置文件。
- default_type:指定默认的 MIME 类型。
- server:定义一个或多个虚拟主机。
- listen:指定该虚拟主机监听的端口。
- server_name:指定域名,用于匹配请求的主机头。
- root:指定虚拟主机的根目录。
- location:用于匹配不同的 URL,并定义相关配置规则
#基本格式
http {...... #各server的公共配置server { #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器...}server { ...server_name #虚拟主机名root #主目录alias #路径别名location [OPERATOR] URL { #指定URL的特性...if CONDITION {...}}}
}
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 / {root html;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
4.2mime
在Nginx中,“mime” 是一种配置指令,用于设置 MIME 类型与文件扩展名的映射关系。
vim /etc/nginx/mime.types
//查看当前Nginx服务器配置的MIME类型列表
4.3 server 下的 root指令
在Nginx配置中,"root"指令用于设置服务器块(server block)的根目录,即指明软件的根目录。
通常,"root"指令位于Nginx配置文件中的服务器块(server block)中。
server {listen 80;server_name example.com;root /var/www/html;location / {...}...
}
//指定了服务器块的根目录为"/var/www/html"
//访问该服务器的网站时,Nginx会在"/var/www/html"文件夹中查找并提供相应的静态文件
4.4构建虚拟主机
4.4.1基于域名的虚拟主机
vim /apps/nginx/conf/nginx.conf
//进入主配置文件//添加子配置文件,此文件位置要写在http中
include /apps/nginx/conf.d/*.conf;
cd /data
mkdir -p html/{pc,mobile}
//在/data/html 下创建两个文件夹 mobile pc
root@localhost html]# cd mobile
[root@localhost mobile]#
[root@localhost mobile]# echo mws > index.html
[root@localhost mobile]#
[root@localhost mobile]# cat index.html
mws
[root@localhost mobile]# cd ../pc
[root@localhost pc]#
[root@localhost pc]# echo fsj > index.html
[root@localhost pc]#
[root@localhost pc]# cat index.html
fsj
vim /apps/nginx/conf.d
//进入子配置文件
建立两个域名文件
vim pc.conf
server {listen 80;server_name www.fsj.com;root /data/nginx/html/pc/;
}vim m.conf
server {listen 80;server_name www.mws.com;root /data/nginx/html/mobile/;
}
PC2
4.4.2基于端口
操作和上面一样,只需要设置不通的端口号就行
vim /apps/ngins/conf.d/m.conf
//进入子配置文件
server{listen 192.168.91.100:8080;server_name www.mws.com;root /data/nginx/html/mobile;
}
vim /apps/ngins/conf.d/pc.conf
//进入子配置文件
server{listen 192.168.91.100:80;server_name www.fsj.com;root /data/nginx/html/pc;
}
[root@localhost conf.d]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]# nginx -s reload
PC2
4.4.3基于ip地址
- 设置一个新的网卡,并配置ip地址
server{listen 192.168.91.100:server_name www.m.com;root /data/nginx/html/m;}server{listen 192.168.91.150server_name www.pc.com;root /data/nginx/html/pc;
}
[root@localhost conf.d]# nginx -t //查看配置文件是否出错
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]# nginx -s reload
//重新加载
pc2
vim /etc/hosts
将下面的内容加入里面
192.168.190.200 www.mws.com
192.168.190.150 www.fsj.com
curl 192.168.192.200
显示mws
curl 192.168.192.150
显示fsj
4.5路径别名alias
在 Nginx 中,alias 用于创建一个路径别名的指令。 别名可以用于将文件或目录从一个位置映射到另一个位置,提供更灵活的访问控制。
服务端
//编辑子配置文件vim pc.conf,使用alias
server {listen 80;server_name www.fsj.com;location /test{alias /data/html/pc/index.html;#相当于替换,访问/test/就是访问/data/html/pc/index.html;}
}
[root@localhost conf.d]#
[root@localhost conf.d]#
[root@localhost conf.d]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@localhost conf.d]#
[root@localhost conf.d]# nginx -s reload
[root@localhost conf.d]#
PC2
curl 192.168.190.200/test
4.6 location模块
在Nginx中,location 是一个用于匹配请求 URL 路径的指令。它在 Nginx 配置文件中使用,在不同的 location
块中定义不同的行为或处理规则。
//官方帮助文档
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
#语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }= #用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~ #用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~ #用于标准uri前,表示包含正则表达式,并且区分大小写
~* #用于标准uri前,表示包含正则表达式,并且不区分大写
不带符号 #匹配起始于此uri的所有的uri\ #用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号#匹配优先级从高到低:
=, ^~, ~/~*, 不带符号
例子
location = / {[ configuration A ]
}
location / {[ configuration B ]
}
location /documents/ {[ configuration C ]
}
location ^~ /images/ {[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {[ configuration E ]
}访问路径是 /
访问路径是 /index.html
访问路径是 /documents/document.html
访问路径是 /images/1.gif
访问路径是 /documents/1.jpg
4.7基于四层的访问控制—access模块
Nginx的access模块允许用户定义基于IP地址、请求方法、URI等条件的访问规则,以控制客户端对NGINX服务器上特定资源的访问。
(1)IP地址访问控制:允许或拒绝特定IP地址或IP地址范围的访问。
拒绝特定IP地址的访问
location / {deny 192.168.2.102;
}
允许特定IP地址段的访问location / {allow 192.168.2.0/24;deny all;
}
(2)请求方法访问控制:允许或拒绝特定HTTP请求方法(如GET、POST等)的访问。
仅允许GET请求
if ($request_method != GET) {return 403;
}
(3)URI访问控制:允许或拒绝特定URI或URI模式的访问。
拒绝特定URI的访问location /admin {deny all;
}
允许特定URI模式的访问location ~ ^/api/ {allow all;
}
(4)条件组合访问控制:根据多个条件的组合来实施访问控制策略。
仅允许特定IP地址段的GET请求访问特定URI模式
#举个例子
location ~ ^/api/ {if ($request_method != GET) {return 403;}allow 192.168.1.0/24;deny all;
}
4.8验证模块
4.8.1htpasswd命令
安装
yum install httpd-tools -y
常用命令//第一次生成文件
htpasswd -c 文件路径 姓名 交互式生成密码
htpasswd -bc 文件路径 姓名 密码 直接将密码跟在-c 代表新建用户名和密码对应的文件
-b 将密码跟在用户名后
//非第一次生成文件
htpasswd 文件路径 姓名 交互式生成密码
htpasswd -b 文件路径 姓名 密码 直接将密码跟在后面
4.8.2 配置验证模块
#编辑配置文件
vim computer.confserver {listen 80;server_name www.byyd.com;location / {root /data/nginx/html/pc;}location /admin{root /data/nginx/html/pc;auth_basic "admin site";#提示信息,不是所有浏览器都有用auth_basic_user_file /apps/nginx/conf.d/.httpuser;#密码文件存放位置}
}
使用 Basic 认证(基本认证)对用户进行身份验证
htpasswd -bc /apps/nginx/conf.d/.httpuser fsj 123456
#创建一个.htpasswd文件,并添加一个使用Basic认证的用户名和密码
cat /apps/nginx/conf.d/.httpuser
打开虚拟机内置浏览器
访问 192.168.192.200/admin
4.9 关闭或修改版本信息
4.9.1关闭版本信息显示
cd /apps/nginx/conf/
vim nginx.conf
在http中添加
Server_tokens off;
保存退出后
nginx -s reload #应用修改curl -I http://192.168.2.100/
#将请求发送到IP地址为192.168.91.100的服务器上的根路径,并返回服务器的响应头信息
#响应头信息包括服务器类型、内容类型、响应日期和连接状态等。
4.9.2 修改nginx 版本信息
cd /test11 #源码包所在路径
vim ./nginx-1.18.0/src/core/nginx.h
将#define NGINX VERSION ”1.18.0“修改为”xxx“
vim ./nginx-1.18.0/src/http/ngx_http_header_filter_module.c
#修改模块的源代码文件
//修改内前
static u_char ngx_http_server_string[] = "Server: nginx" CRLF//修改后
static u_char ngx_http_server_string[] = "Server: xxx" CRLF
##然后重新编译安装 ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
make -j2 && make install
4.10 自定义 错误页面
我们 可以改变 默认的错误页面,同时也可以用指定的响应状态码进行响应, 可用位置:http, server, location, if
in location
格式
error_page code ... [=[response]] uri;
页面错误代码
error_page 固定写法
code 响应码
= 可以将响应码转换
uri 访问连接
实际操作
www.pc.com/xxxxxxxx 404
www.pc.com/40x.html
server {listen 80;server_name www.kgc.com;root /data/nginx/html/pc;error_page 404 /40x.html;#当出现404 错误 就去 root /data/nginx/html/pc/error/ 这个文件夹找40x.html 这个文件location = /40x.html {root /data/nginx/html/pc/error/;}location / {root /data/nginx/html/pc;}location /admin{auth_basic "admin site";auth_basic_user_file /apps/nginx/conf.d/.httpuser;}
}
[root@localhost nginx]#mkdir /data/nginx/html/pc/error/
#建立目录
[root@localhost nginx]#cd /data/nginx/html/pc/error/
#切换目录
[root@localhost nginx]#vim 40x.html
#新建页面,此处页面名字需要和 配置文件中的一致自定义 错误码
server {listen 80;server_name www.kgc.com;root /data/nginx/html/pc;error_page 404 =302 /40x.html;#把错误码 404 指定成302 注意此处的 40x.html 需要真实存在建立的页面必须一致location = /40x.html {root /data/nginx/html/pc/error/;}location / {root /data/nginx/html/pc;}location /admin{auth_basic "admin site";auth_basic_user_file /apps/nginx/conf.d/.httpuser;}
}#出了错 直接跳转到显示主站点
server {listen 80;server_name www.kgc.com;root /data/nginx/html/pc;error_page 404 =302 /index.html;#把错误码 404 指定成302 并跳到主页面:/index.html
4.11 日志位置存放
通过修改日志的路径,可以实现日志分离,即不同网站的日志单独存放。
mkdir /data/logs #新建存放日志的目录
#编辑子配置文件,指定日志存放位置
vim /apps/nginx/conf.d/mobile.confserver{listen 80;server_name www.mobile.com;root /data/nginx/m/;error_log /data/logs/m_error.log;access_log /data/logs/m_access.log;
}vim /apps/nginx/conf.d/computer.confserver{listen 80;server_name www.computer.com;root /data/nginx/pc;error_log /data/logs/pc_error.log;access_log /data/logs/pc_access.log;
}
nginx -t
nginx -s reload #语法检查无误后重载
4.12 检测文件是否存在-----try_files指令
Nginx 的 try_files 指令用于指定在资源文件不存在时如何处理请求。
默认开启,可用于server和location部分
4.12.1 原理部分
基本语法
#方式一
try_files file ... uri;file 表示要尝试的文件路径,
uri 则表示当文件不存在时转发请求的路径。#举个例子
location / {try_files $uri $uri/ /index.html /fallback.html;
}#释义
尝试找到与请求的 URI 对应的文件。
如果文件不存在,则尝试在 URI 后面加上斜杠 (/) 后再查找一个文件。
如果仍然找不到文件,则尝试访问 /index.html。
如果连 /index.html 也不存在,则将请求转发给 /fallback.html。
#方式二
try_files file ... =code;=code 表示文件不存在时 返回的状态码
#只会返回指定的 HTTP 响应码,而不会转发请求到指定的 uri#举个例子
location / {try_files $uri $uri/ =404;
}#释义
尝试找到与请求的 URI 对应的文件。
如果文件不存在,则尝试在 URI 后面加上斜杠 (/) 后再查找一个文件。
如果仍然找不到文件,则返回 404 响应码。
4.12.2 配置实例
服务端
#新建寻找失败跳转页面
mkdir /data/nginx/html/pc/about
echo "default page" >>
/data/nginx/html/pc/about/default.html#修改配置文件
vim /apps/nginx/conf.d/computer.conf
server{
listen 80;
server_name www.byydc.com;
root /data/nginx/pc;
location / {
root /data/nginx/html/pc;
try_files $uri $uri.html $uri/index.html
/about/default.html;}
}#重新加载
nginx -t
nginx -s reload、#建立测试文件
cd /data/nginx/html/pc/;touch test
echo "find it" >> test
客户端
curl www.byydc.com/test #查找一个存在的文件来测试
4.13 长连接相关-keepalive指令
4.13.1 原理
HTTP Keep-Alive 功能用于实现长连接,允许客户端和服务器之间的 TCP
连接在发送完一个请求后保持打开状态,以便在同一连接上发送多个请求和响应。可以加在全局或者 server 。
keepalive 配置指令仅对 HTTP/1.0 和 HTTP/1.1 版本的连接有效。
对于 HTTP/2 连接,keepalive 功能是默认启用的,并且无需额外配置。
4.13.2 keepalive_timeout
keepalive_timeout timeout [header_timeout];
#设定保持连接超时时长
keepalive_timeout 用于定义长连接超时时间。
当一个客户端与服务器之间的连接完成一个请求后的等待时间。 如果在这个时间内没有收到新的请求,服务器会关闭连接。
这个时间是以秒为单位的,默认值是 75 秒。
4.13.3 keepalive_requests
keepalive_requests number;
#在一次长连接上所允许请求的资源的最大数量
keepalive_requests 用于设置一个连接上可以处理的最大请求数量。
当达到指定数量后,服务器会关闭该连接并且客户端需要重新建立新连接。
默认情况下,keepalive_requests 的值是 100。
如果将 keepalive_requests 设置为 0,则表示在完成每个请求后立即关闭连接,禁用了 Keep-Alive 功能。
4.14 作为下载服务器配置
ngx_http_autoindex_module 模块处理以斜杠字符 “/” 结尾的请求,并生成目录列表,可以做为下载服务
配置使用
官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
[root@localhost nginx-1.18.0]#./configure --help |grep auto
#自带--without-http_autoindex_module disable ngx_http_autoindex_moduleautoindex 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
#变量提供 限制 变量优先级高
例子实现
[root@centos8 ~]# mkdir /opt/download
#注意:download不需要index.html文件
location /download {autoindex on;#开启下载服务器autoindex_exact_size on;#开启确切大小不建议开启autoindex_localtime on;#使用当地时间limit_rate 1024k;#所有人限速1024k,默认单位是字节数set $limit_rate 2M;#谁先生效alias /opt/download;}直接访问页面
location /download {autoindex on;
}location /download {autoindex on;autoindex_exact_size on;autoindex_localtime on;limit_rate 1024k;alias /opt/download;}
4.15 用户上传资料
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位作为目录名上传文件大于限制 错误代码413
4.16 其他设置
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网段主机使用
相关文章:

Nginx配置文件详解
Nginx配置文件详解 1、Nginx配置文件1.1主配置文件详解1.2子配置文件 2、全局配置部分2.1修改启动的工作进程数(worker process) 优化2.2cpu与worker process绑定2.3 PID 路径修改2.4 修改工作进程的优先级2.5调试工作进程打开的文件的个数2.6关闭master-worker工作…...
【0217】stats collector(统计信息收集器)进程启动原理(1)
文章目录 1. 启动 stats collector进程1.1 stats collector进程启动过程1.1.1 检查套接字 pgStatSock 是否存在1.1.2 重新启动失败的stats collector频率1.1.3 fork() 三种返回值处理1.2 detach所有共享内存段1.3 detach 共享内存段1.4 stats collecotr进程启动的主体相关阅读:…...

【应用层】网络基础 -- HTTPS协议
HTTPS 协议原理加密为什么要加密常见的加密方式对称加密非对称加密 数据摘要&&数据指纹 HTTPS 的工作过程探究方案1-只使用对称加密方案2-只使用非对称加密方案3-双方都使用非对称加密方案4-非对称加密对称加密中间人攻击-针对上面的场景 CA认证理解数据签名方案5-非对…...

实验篇—— 基因家族Motif 分析
实验篇—— 基因家族Motif 分析 文章目录 前言一、名词解释二、实操1. MEME工具箱2. Motif Discovery(基序发现)1. 结果网页2. 在TBtools中(额外) 2. Motif Enrichment(基序富集分析)3. Motif Search&#…...
Linux拓展之阻止或禁用普通用户登录
禁止指定用户登录 chsh -s /sbin/nologin 指定用户名示例 chsh -s /sbin/nologin testuser恢复指定用户登录 chsh -s /bin/bash 指定用户名示例 chsh -s /bin/bash testuser参考 https://blog.csdn.net/cnds123321/article/details/125232580 https://www.cnblogs.com/cai…...

Linux系统USB摄像头测试程序(四)_视频旋转及缩放
下面的程序实现了视频的旋转及缩放,窗口中点击鼠标左键视频向左旋转,点击鼠标右键视频向右旋转并且视频缩小了二分之一。程序中首先把yvyv422转换成了RGB24,然后利用opencv进行了旋转和缩放,其后用sdl2进行了渲染。使用了ffmpeg、…...

大模型+学习机,是概念游戏还是双向奔赴?
众所周知,2023年上半年大模型概念炙手可热。各大科技公司纷纷卷入,或宣称布局相关领域,或率先官宣自研大模型。而随着资本市场对大模型概念的热情有所消退,属于这片战场的新一轮角逐慢慢聚焦在了技术的落地应用上。 8月15日&#…...
linux怎么查看用户属于哪个组
查看当前用户所属组 shell> groups root查看指定用户所属组 shell> groups testuser testuser : testusershell> id testuser uid1000(testuser) gid1000(testuser) groups1000(testuser)查看组文件 shell> cat /etc/group...

邂逅JavaScript
前言:前端三大核心 前端开发最主要需要掌握的是三个知识点:HTML、CSS、JavaScript 一、认识编程语言 1.计算机语言 前面我们已经学习了HTML和CSS很多相关的知识: 在之前我们提到过, HTML是一种标记语言, CSS也是一种样式语言; 他们本身都是属于计算…...
Android 中 Fragment判空
1. 判断 Fragment 是否已经被添加到 Activity 中,可以通过 Fragment 的 isAdded() 方法来判断。 2. 判断 Fragment 的 View 是否已经被创建,可以通过 Fragment 的 getView() 方法来判断。 3. 判断 Fragment 是否已经被销毁,可以通过 Fragme…...
软考高级系统架构设计师系列论文八十八:财务数据仓库系统的设计与实现
软考高级系统架构设计师系列论文八十八:财务数据仓库系统的设计与实现 一、摘要二、正文三、总结一、摘要 近年来,数据仓库技术在信息系统的建设中得到了广泛应用,有效地为决策提供了支持。2020年6月,本人所在单位组织开发了财务管理决策系统,该系统主要是使高层领导掌握企…...

fastdeploy部署多线程/进程paddle ocr(python flask框架 )
部署参考:https://github.com/PaddlePaddle/FastDeploy/blob/develop/tutorials/multi_thread/python/pipeline/README_CN.md 安装 cpu: pip install fastdeploy-python gpu :pip install fastdeploy-gpu-python #下载部署示例代码 git cl…...

【图论】拓扑排序
一.定义 拓扑排序是一种对有向无环图(DAG)进行排序的算法,使得图中的每个顶点在排序中都位于其依赖的顶点之后。它通常用于表示一些任务之间的依赖关系,例如在一个项目中,某些任务必须在其他任务之前完成。 拓扑排序的…...

自动化备份方案
背景说明 网上有很多教程,写的都是从零搭建一个什么什么,基本上都是从无到有的教程,但是,很少有文章提及搭建好之后如何备份,这次通过请教GitHub Copilot Chat,生成几个备份脚本,以备后用。 注…...

win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问
问题 windows安全中心服务被禁用 winr 输入services.msc 找到windows安全中心服务查看是否被禁用,改为启动,不可以改动看第三条 打开设置,找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gped…...

github实用指令(实验室打工人入门必备)
博主进入实验室啦,作为一只手残党决定在这里分享一些常用的github使用情景和操作指南来解救其他手残党。 内容随着情景增加实时更新。如果只有没几个内容说明场景不多(相信对手残党而言是再好不过的消息) 情景一:…...

6. 激活层
6.1 非线性激活 ① inplace为原地替换,若为True,则变量的值被替换。若为False,则会创建一个新变量,将函数处理后的值赋值给新变量,原始变量的值没有修改。 import torch from torch import nn from torch.nn import …...

AIGC ChatGPT 制作地图可视化分析
地图可视化分析是一种将数据通过地图的形式进行展示的方法,可以让人们更加直观、快速、准确的理解和分析数据。以下是地图可视化分析的一些主要好处: 加强数据理解:地图可视化可以将抽象的数字转化为直观的图形,帮助我们更好地理解复杂的数据集。 揭示地理模式:地理位置是…...

2023-08-24 LeetCode每日一题(统计参与通信的服务器)
2023-08-24每日一题 一、题目编号 1267. 统计参与通信的服务器二、题目链接 点击跳转到题目位置 三、题目描述 这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台…...
前端实习day35
今天是下早班的一天,下完班直接赶车回广州了,吐槽一下深圳站管理得真得差,候车厅小,人巨多,而且进站口的标识也很少,绕了好久才找到!下次再也不去了。 今天是改bug的一天,但是有半天…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...

《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...