nginx基础模块配置详解

目录

一、Nginx相关配置

1、nginx配置文件

2、nginx模块

二、nginx全局配置

1、关闭版本或修改版本

1.1 关闭版本

1.2 修改版本

2、修改nginx启动的子进程数

3、cpu与worker进程绑定

4、PID路径

5、nginx进程的优先级

6、调试worker进程打开文件的个数

7、nginx服务运行方式(前台或者后台)

8、仅有master进程没有worker进程

三、event模块配置

四、httpd模块配置

1、MIME

2、server模块用法

2.1 设置root用法

2.2 server块搭建虚拟主机过程

2.3 设置alias别名用法

2.4 location模块匹配

2.4.1 location模块基本语法

2.4.2 匹配优先级

​2.4.3 access模块

2.4.4 验证模块(需要输入用户名和密码)

 2.5 自定义错误页面

2.5.1 访问到404直接跳转至主页面

2.5.2 精确跳转的页面

2.5.3 指定状态码,防止被劫持

 2.6 日志位置存放

2.6.1 分离不同网站的日志

2.6.2 自定义错误日志位置

2.7 检测文件是否存在

2.8 持久连接

2.9 作为下载服务器配置

2.10 用户上传资料至服务器

2.11 其他设置


一、Nginx相关配置

1、nginx配置文件

nginx 官方配置的帮助文档:nginx documentationicon-default.png?t=N7T8http://nginx.org/en/docs/ 

一般配置文件由指令和指令块构成:
①每条指令以分号(;)结尾,指令与值之间以空格符号分隔
②指令已{ }达括号将多条指令组织在一起且可以嵌套指令块
③include语句允许组合多个配置文件以提升可维护性
④#号注释
⑤$使用变量
⑥部分支持正则
⑦自定义变量:由用户使用set命令定义,格式: set variable_name value

nginx配置文件:

主配置文件:nginx.conf 

子配置文件: include conf.d/*.conf 

main block:主配置段,即全局配置段,对http,mail都有效
#事件驱动相关的配置   同步
event {...
}   
#http/https 协议相关配置段
http {...
}          
#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {...
}    
#stream 服务器相关配置段
stream {负载均衡...
}

2、nginx模块

  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能
  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置等
  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持
  • Stream服务模块: 实现反向代理功能,包括TCP协议代理 反向
  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

①核心模块:core module
②标准模块:
 HTTP 模块: ngx_http_*
 HTTP Core modules   #默认功能
 HTTP Optional modules #需编译时指定
 Mail 模块: ngx_mail_*
 Stream 模块 ngx_stream_*
③第三方模块

nginx常用模块:

ngx_http_core_module         核心模块
ngx_http_access_module       访问控制模块
ngx_http_auth_basic_module   身份验证模块
ngx_http_gzip_module         压缩模块
ngx_http_log_module          日志模块
ngx_http_proxy_module        代理模块
ngx_http_rewrite_module      重写模块
ngx_http_stub_status_module  状态页
ngx_http_upstream_module     反向代理模块

二、nginx全局配置

前提:需要编译安装的nginx,还要关闭防火墙和核心防护,以及开启nginx服务

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#systemctl start nginx

1、关闭版本或修改版本

1.1 关闭版本

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
server_tokens off;
[root@localhost ~]#nginx -s reload

nginx服务器配置: 

客户端检测: 

服务器配置之前,客户端检测:

 服务器配置之后,客户端检测:

1.2 修改版本

nginx服务器配置:

①修改/data/nginx-1.18.0/src/core/nginx.h文件

#nginx服务器配置
[root@localhost ~]#systemctl stop nginx
[root@localhost ~]#cd /data/nginx-1.18.0/src/core
[root@localhost core]#vim nginx.h
#define NGINX_VERSION      "1314"
#define NGINX_VER          "dh/" NGINX_VERSION

②修改/data/nginx-1.18.0/src/http/ngx_http_header_filter_module.c文件 

#nginx服务器配置
[root@localhost core]#vim /data/nginx-1.18.0/src/http/ngx_http_header_filter_module.c
static u_char ngx_http_server_string[] = "Server: cloud" CRLF;

 ③重新编译安装

#修改完上述两个文件后,需重新编译
[root@localhost core]#cd /data/nginx-1.18.0/
[root@localhost nginx-1.18.0]#./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
[root@localhost nginx-1.18.0]#make -j2 &&make install
[root@localhost nginx-1.18.0]#systemctl start nginx
[root@localhost nginx-1.18.0]#systemctl restart nginx

客户端检测:

情况一:当服务器配置server_tokens off时

情况二:当服务器没有配置server_tokens off时

2、修改nginx启动的子进程数

nginx服务器配置:

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
worker_processes  2; 
[root@localhost ~]#nginx -s reload

nginx服务器测试:

[root@localhost ~]#pstree -p | grep nginx

根据CPU数量开启nginx子进程数,如果你有四个CPU,相对应的开启四个子进程

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
worker_processes  auto;
[root@localhost ~]#nginx -s reload

nginx服务器配置: 

nginx服务器测试:

[root@localhost ~]#pstree -p | grep nginx
[root@localhost ~]#lscpu

3、cpu与worker进程绑定

将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能

默认Nginx是不进行进程绑定的,运行在几号CPU完全是随机的

[root@localhost ~]#ps axo pid,cmd,psr | grep nginx

现在服务器进行配置实现cpu与work进程绑定,使进程可以一直运行在同一个CPU上

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
worker_cpu_affinity 00000001 00000010 00000100 00001000;
[root@localhost ~]#nginx -s reload

[root@localhost ~]#ps axo pid,cmd,psr | grep nginx

4、PID路径

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
#pid        logs/nginx.pid;
[root@localhost ~]#nginx -s reload

[root@localhost ~]#cat /apps/nginx/logs/nginx.pid

5、nginx进程的优先级

PRI值不能修改,一般通过修改NI值来调整进程的优先级。

PRI值+NI值=数值,通过比较数值大小来确定优先级,数值越小进程优先级越大

[root@localhost ~]#ps -elf   #查看当前系统进程详细信息

[root@localhost ~]#ps -elf|grep nginx    #查看nginx进程详细信息

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
worker_priority -20;      #工作进程NI优先级,-20~19
[root@localhost ~]#nginx -s reload

[root@localhost ~]#ps -elf|grep nginx
[root@localhost ~]#ps axo pid,cmd,psr,pri,ni|grep nginx|sort -n

6、调试worker进程打开文件的个数

所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制。最好与ulimit -n 或者limits.conf的值保持一致

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
worker_rlimit_nofile 100000;
[root@localhost ~]#nginx -s reload

[root@localhost ~]#vim /etc/security/limits.conf   #还有修改pam认证文件
*  -   nofile  100000
#重启后生效

7、nginx服务运行方式(前台或者后台)

一般nginx服务都是后台运行,前台运行通常用于调试或者开发环境,因为在前台运行可以更方便地查看日志输出

在生产环境中,通常会将 daemon 设置为 on,以便 Nginx 以守护进程的方式在后台运行

daemon off;    #设置nginx在前台运行

8、仅有master进程没有worker进程

用于控制 Nginx 是否以主进程的方式运行。如果设置为 off,Nginx 将以单进程的方式运行,这意味着 Nginx 将不会创建主进程和工作进程。如果设置为 on,Nginx 将以主进程和工作进程的方式运行,这意味着 Nginx 将创建一个主进程和多个工作进程

master_process off|on;
#是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on

三、event模块配置

event模块主要用于配置nginx的事件处理机制,包括连接处理、定时器处理

events {worker_connections  65536;  #设置单个工作进程的最大并发连接数
#需要和master配合,否则无效use epoll;#使用epoll事件驱动,Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置。accept_mutex on; #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为onmulti_accept on; #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
}

问:一台服务器最多能接受多少客户端访问?

一台服务器能接受的最大客户端访问数量取决于多个因素,包括硬件资源(如CPU、内存、网络带宽等)、操作系统的配置(如最大文件描述符数量、最大并发连接数等)、以及服务器软件(如Nginx、Apache等)的配置

在Nginx中,worker_connections指令用于设置每个工作进程可以同时处理的最大连接数。默认情况下,这个值是512。如果你的服务器硬件资源充足,你可以增大这个值来提高服务器的并发处理能力

在Linux系统中,/proc/sys/fs/file-max文件中的值表示系统级别的最大文件描述符数量。这个值也会影响到服务器能接受的最大客户端访问数量

总的来说,一台服务器能接受的最大客户端访问数量是一个动态的值,需要根据具体的硬件资源、操作系统和服务器软件的配置来确定

四、httpd模块配置

1、MIME

MIME : Multipurpose Internet Mail Extensions 多用途互联网邮件扩展

文件:/data/nginx-1.18.0/conf/mime.types ,来自于编译安装包

此项为支持的文件格式,如果不支持的格式会自动帮你下载,如果支持就会显示在网页上

#MIME格式
type/subtype 主要类型/次要类型

[root@localhost ~]#systemctl start nginx
[root@localhost ~]#cd /apps/nginx/html
[root@localhost html]#touch dh17.xz
[root@localhost html]#grep dh17 /data/nginx-1.18.0/conf/mime.types 
[root@localhost html]#grep jpg /data/nginx-1.18.0/conf/mime.types 

2.2 server下的alias

server下的alias指令用于创建一个别名,它可以将请求的URI映射到文件系统中的另一个位置。这在处理URL重写和文件系统结构调整时非常有用

2、server模块用法

2.1 设置root用法

root指定了主页文件的位置

当nginx接收到一个请求时,它会根据请求的URI和root指令的值来确定请求的文件路径

如果root指令的值是/apps/nginx/html,并且请求的URI是/index.html,那么nginx会尝试读取apps/nginx/html/index.html文件来响应这个请求

2.2 server块搭建虚拟主机过程

虚拟主机是一种技术,允许在单个物理服务器上托管多个域名和网站。每个虚拟主机都有自己的配置,包括根目录、日志文件、错误页面等

虚拟主机的配置通常在server块中完成。每个server块代表一个虚拟主机,它可以监听一个或多个端口,也可以监听一个或多个域名

要求:在同一个nginx服务器:172.16.12.10上构建不同的虚拟主机:PC端和手机端

nginx服务器配置:

①首先为一般不在主配置文件修改,而是通过在主配置文件里定义子配置文件路径,然后新建子配置文件去进行修改

[root@localhost ~]#vim /apps/nginx/conf/nginx.conf
include /apps/nginx/conf.d/*.conf;
[root@localhost ~]#nginx -s reload

②编写PC端页面 

[root@localhost ~]#mkdir /apps/nginx/conf.d
[root@localhost ~]#cd /apps/nginx/conf.d
[root@localhost conf.d]#vim pc.conf
server {listen 80;server_name www.pc.com;root /opt/;
}

③编写手机端页面 

[root@localhost conf.d]#vim m.conf
server {listen 80;server_name www.m.com;root /mnt/;
}
[root@localhost conf.d]#nginx -s reload
[root@localhost conf.d]#echo "pc pc pc pc" > /opt/index.html
[root@localhost conf.d]#echo "m m m m" > /mnt/index.html

客户端测试:

[root@localhost ~]#vim /etc/hosts
[root@localhost ~]#curl www.pc.com
[root@localhost ~]#curl www.m.com

2.3 设置alias别名用法

[root@localhost conf.d]#vim pc.conf
server {listen 80;server_name www.pc.com;location /html {root /opt/;#root相当于追加,将文件夹html追加到/opt/html/}location /data {alias /mnt/;#相当于替换,访问/data就是访问/mnt/}
}
[root@localhost conf.d]#nginx -s reload
[root@localhost conf.d]#echo "/opt/html/" > /opt/html/index.html
[root@localhost conf.d]#echo "/mnt" > /mnt/index.html
[root@localhost conf.d]#echo "/data" > /data/index.html

客户端测试: 

2.4 location模块匹配

2.4.1 location模块基本语法

Nginx的location指令是用来匹配请求URL的一种方式,可以根据不同的URL路径来指定不同的处理方式。location指令可以用来匹配请求的URI(Uniform Resource Identifier),并根据匹配的结果来决定如何处理该请求

#location语法规则
location [ = | ~ | ~* | ^~ ] uri { ... }
字符说明
=用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~用于标准url前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~用于标准url前,表示包含正则表达式,并且区分大小写
~*用于标准url前,表示包含正则表达式,并且不区分大写
不带任何符号匹配起始于此uri的所有的uri
\用于标准url前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号
2.4.2 匹配优先级

(1)局部location与全局server

局部优先级高于全局优先级;当局部没有指明路径,全局兜底

[root@localhost ~]# cd /apps/nginx/conf.d/
[root@localhost conf.d]#vim pc.conf
server {listen 80;server_name www.pc.com;root /opt/;                  #全局配置,兜底location / {                 #追踪url,根据用户访问的网址root /mnt/;                  #局部配置}
}
[root@localhost ~]# nginx -s reload

(2)location模块内优先级比较

匹配优先级从高到低:=, ^~, ~/~*,不带符号
注:alias影响优先级
#官方帮助文档内的例题
location = / {[ configuration A ]
}location / {[ configuration B ]
}location /documents/ {[ configuration C ]
}location ^~ /images/ {[ configuration D ]
}location ~* \.(gif|jpg|jpeg)$ {[ configuration E ]
}

 ① 当客户端访问:www.pc.com/时,问最先匹配A、B、C、D、E内的哪个location模块

答:只有A、B可匹配,A优先级最高

 ② 当客户端访问:www.pc.com/index.html时,问最先匹配A、B、C、D、E内的哪个location模块

答:只有B可匹配

 ③当客户端访问:www.pc.com/documents/index.html时,问最先匹配A、B、C、D、E内的哪个location模块

答:只有B、C可匹配,C优先级最高

 ④当客户端访问:www.pc.com/images/a.gif时,问最先匹配A、B、C、D、E内的哪个location模块

答:只有B、D、E可匹配,优先级:D>E>B

 ⑤当客户端访问:www.pc.com/documents/b.jpg时,问最先匹配A、B、C、D、E内的哪个location模块

答:只有B、C、E可匹配,优先级:E>C>B

实战:

[root@localhost ~]#vim /apps/nginx/conf.d/pc.conf
server{
listen 80;
server_name www.pc.com;
root /opt/;
location = / {
root /mnt/static1;
index index.html;
}
location / {
root /mnt/static2;
index index.html;
}
location /documents/ {
root /mnt/static3;
index index.html;
}
location ^~/images/ {
root /mnt/static4;
index index.html;
}
location ~* \.(gif|jpg|jpeg)$ {
root /mnt/static5;
index index.html;
}
}
[root@localhost conf.d]#nginx -s reload

新建与配置文件匹配的目录和文件即可

bug:理论上 = 比 什么都不加的优先级高,实际 = 与 什么都不加的优先级混淆,不能根据理论判断

其他都能匹配成功: 

~*不区分大小写也有bug:

[root@localhost conf.d]# vim pc.conf
server {listen 80;server_name www.pc.com;root /mnt/;location ~* /A?\.jpg {root /opt/;}
}
[root@localhost conf.d]#nginx -s reload

注:这里需要注意的,虽然程序不区分大小写,但是Linux(当前xfs)系统内核区分

2.4.3 access模块

Nginx的access模块用于控制对服务器资源的访问权限,允许或拒绝特定的请求。这个模块通常用于实现访问控制、安全策略和防盗链等功能

 

#配置nginx服务器白名单,只允许172.16.12.1访问,其他172.16.12.0网段的全部拒绝
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf
server {listen 80;server_name  www.lucky.com;allow 172.16.12.1;deny  172.16.12.0/24;location / {root  /opt/;
}
}
[root@localhost ~]#nginx -s reload
[root@localhost ~]#echo "welcome to this web">/opt/index.html

#配置nginx服务器黑名单,只拒绝172.16.12.1访问,允许其他172.16.12.0网段地址访问
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf
server {listen 80;server_name  www.lucky.com;deny   172.16.12.1;allow  172.16.12.0/24;location / {root  /opt/;
}
}
[root@localhost ~]#nginx -s reload
[root@localhost ~]#echo "welcome to this web">/opt/index.html

2.4.4 验证模块(需要输入用户名和密码)

用于对HTTP请求进行基本的用户名和密码验证。这种验证方式通常用于保护网站的某些部分,例如管理页面或者私有资源

模块名称:ngx_http_auth_basic_module

访问控制基于模块 ngx_http_auth_basic_module 实现,可以通过匹配客户端资源进行限制

工作原理:当客户端发送一个请求到nginx时,nginx会检查请求的Authorization头部。如果这个头部不存在,或者用户名和密码不正确,nginx会返回一个401 Unauthorized响应,要求客户端提供正确的用户名和密码

#格式
Syntax: auth_basic string | off;
Default:
auth_basic off;
Context: http, server, location, 1imit_exceptSyntax: auth_basic_user_file file;
Default:   _
Context:  http, server, location, 1imit_except

htpasswd命令:

是一个在Linux系统中用于生成和更新Apache HTTP服务器的密码文件的命令行工具

htpasswd命令来源于httpd-tools包

[root@localhost ~]#yum install -y httpd-tools    #下载htpasswd命令
选项说明
-c创建一个新的密码文件。如果密码文件已经存在,这个选项会覆盖原有的文件
-m使用MD5哈希算法生成密码。这是默认的哈希算法
-d使用DES哈希算法生成密码
-s使用SHA哈希算法生成密码
-b使用命令行提供的密码,而不是交互式地提示用户输入密码。这个选项通常用于脚本中
-n不要在密码文件中添加新的行。这个选项通常用于检查用户名和密码是否正确
#第一次生成文件时
htpasswd -c  文件路径 姓名        	    #交互式生成密码
htpasswd -bc 文件路径 姓名  密码   		#直接将密码跟在后面#非第一次生成文件时
htpasswd     文件路径 姓名               #交互式生成密码
htpasswd -b  文件路径 姓名 密码   		#直接将密码跟在后面

实战: 

[root@localhost ~]#yum install -y httpd-tools
[root@localhost ~]#htpasswd -c /mnt/.nginxuser dh
[root@localhost ~]#cat /mnt/.nginxuser
[root@localhost ~]#mkdir /opt/admin
[root@localhost ~]#echo "welcome to my world" >/opt/admin/index.html

#修改子配置文件
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf
server {listen 80;server_name www.pc.com;root /opt;location /admin{root /opt;auth_basic  "admin site";       #提示信息,不是适用于所有的浏览器auth_basic_user_file /mnt/.nginxuser;     #密码文件存放位置}
}
[root@localhost ~]#nginx -s reload

客户端谷歌浏览器测试:

客户端火狐浏览器测试:

 2.5 自定义错误页面

可以改变默认的错误页面,同时也可以用指定的响应状态码进行响应, 可用位置:http, server, location, if in location

#格式
error_page code ... [=[response]] uri;
页面错误代码  
error_page    固定写法
code          响应码
=             可以将响应码转换
uri           访问连接

默认错误页面404(访问不到资源)的报错

2.5.1 访问到404直接跳转至主页面
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf 
server {listen 80;server_name www.pc.com;root /opt;
error_page 404 /index.html;    #如果发生404错误,直接跳转至规定目录
[root@localhost ~]#nginx -s reload

客户端测试:现在发生404错误,直接跳转至规定目录

2.5.2 精确跳转的页面
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf
server {listen 80;server_name www.pc.com;root /opt;error_page 404 /40x.html;location = /40x.html {root /mnt/error/;
}
[root@localhost ~]#nginx -s reload

客户端测试:现在发生404错误,直接跳转至精确目录 

2.5.3 指定状态码,防止被劫持
error_page 404 =302 /40x.html;

客户端测试:

 2.6 日志位置存放

#格式
Syntax: error_log file [level];Default: 
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
level: debug, info, notice, warn, error, crit, alert, emergerror_log    /apps/nginx/logs/xxx_error.log;
固定格式       文件路径                    级别(info  debug等  可以忽略不写)
2.6.1 分离不同网站的日志

如果不分离,都默认混杂在同一个日志文件/apps/nginx/logs/access_log

#将虚拟主机上的两个网站日志分离
​[root@localhost ~]#cd /apps/nginx/conf.d
[root@localhost conf.d]#vim pc.conf
server {listen 80;server_name www.pc.com;root /opt/;error_log /opt/logs/pc.error.log;access_log /opt/logs/pc.access.log;
}
[root@localhost conf.d]#vim m.conf
server {listen 80;server_name www.m.com;root /mnt/;error_log /mnt/logs/m.error.log;access_log /mnt/logs/m.access.log;
}
[root@localhost conf.d]#nginx -s reload
[root@localhost conf.d]#echo "pc pc pc pc" > /opt/index.html
[root@localhost conf.d]#echo "m m m m" > /mnt/index.html
[root@localhost ~]#mkdir /opt/logs
[root@localhost ~]#mkdir /mnt/logs

服务端测试:

客户端查看访问日志:

2.6.2 自定义错误日志位置

①在主配置文件,自定义错误日志的位置

②客户端错误访问服务器会产生错误日志

 ③ 查看自定义的错误日志

2.7 检测文件是否存在

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

#格式
Syntax: try_files file ... uri;
try_files file ... =code;
Default: —
Context: server, location
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf
server {listen 80;server_name  www.m.com;root /opt;location  / {root  /opt;try_files  $uri  $uri.html  $uri/index.html  /about/default.html;
}
}
[root@localhost ~]#nginx -s reload
[root@localhost ~]#cd /opt
[root@localhost opt]#mkdir about
[root@localhost opt]#echo "about/default.html" > about/default.html
[root@localhost opt]#echo "good.html" >good.html
[root@localhost opt]#ls

#删除正常访问的文件
[root@localhost opt]#rm -rf good.html 
[root@localhost opt]#ls

2.8 持久连接

#指令,可以加在全局或者server
keepalive_timeout timeout [header timeout];
#设定保持连接超时时长,0表示禁止长连接,默认为65s,通常配置在http字段作为站点全局配置keepalive_requests number;
#在一次长连接上所允许请求的资源的最大数量,默认为100次,建议适当调大,比如:500
#如:keepalive_requests 2;
#最大下载两个资源就会断开keepalive_timeout 60 65;
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。Keep-Alive:timeout=60  #浏览器收到的服务器返回的报文#如果设置为0表示关闭会话保持功能,将如下显示:
Connection:close

实战: 

服务器设置持久连接的最大接收数为2,且持久连接持续时间为300s

服务器创建三个资源供客户端下载

客户端使用telnet模拟持久连接下载资源,服务器设置了最多只能接受两个请求,所以客户端只能下载两个资源就被迫退出了 

  对哪种浏览器禁用长连接:

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

2.9 作为下载服务器配置

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

#nginx服务器配置
[root@localhost ~]#vim /apps/nginx/conf.d/dh.conf
server {listen 80;server_name www.dh.com;location  /download {autoindex on;autoindex_exact_size off;root /opt/;}
}
[root@localhost conf.d]# nginx -s reload
[root@localhost ~]#mkdir /opt/download
[root@localhost ~]#cp /etc/fstab /opt/download
[root@localhost ~]#cp /etc/passwd /opt/download/
[root@localhost ~]#cp /etc/shadow /opt/download/
[root@localhost ~]#ll /opt/download/

客户端测试:

一些其他指令: 

[root@localhost nginx-1.18.0]#./configure --help |grep auto
#自带
--without-http_autoindex_module    disable ngx_http_autoindex_moduleautoindex on | off;
#自动文件索引功能,默为offautoindex_exact_size on | off;  
#计算文件确切大小(单位bytes),off 显示大概大小(单位K、M),默认onautoindex_localtime on | off ; 
#显示本机时间而非GMT(格林威治)时间,默认offautoindex_format html | xml | json | jsonp; 
#显示索引的页面文件风格,默认htmllimit_rate rate; 
#限制响应客户端传输速率(除GET和HEAD以外的所有方法),单位B/s,即bytes/second,默认值0,表示无限制,此指令由ngx_http_core_module提供set $limit_rate
#变量提供限制,变量优先级高
#如
autoindex_format json;    #索引页面风格换成json格式

2.10 用户上传资料至服务器

允许用户通过 HTTP POST请求上传文件,并提供了对上传文件的处理和管理功能,如写博客等

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位作为目录名

2.11 其他设置

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; 
#是否缓存查找时发生错误的文件一类的信息,默认值为offopen_file_cache_min_uses number; 
#open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项,默认值为1示例:
open_file_cache max=10000 inactive=60s; 
#最大缓存10000个文件,非活动数据超时时长60sopen_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, PATCHlimit_except GET {allow 192.168.44.20;deny all;
}
#允许 192.168.44.20主机下载,其他都拒绝

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java程序设计】【C00288】基于Springboot的篮球竞赛预约平台(有论文)

基于Springboot的篮球竞赛预约平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的篮球竞赛预约平台 本系统分为前台功能模块、管理员功能模块以及用户功能模块。 前台功能模块:用户进入到平台首页&a…

无刷电机的2种电流采样方式以及优缺点比较

低端电流采样: 在低端采样方式中,电流检测电阻(分流电阻)通常被放置在逆变器下桥臂MOSFET或IGBT的低端,即靠近电机绕组的地线侧。这种情况下,只有当对应相位的下管导通时,才能通过这个电阻来测量…

【刷题记录】链表的回文结构

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.题目链接: LINK 2.详解思路: 思路:思路:先找到中间节点,然后逆置后半部分链表,一个指针指向链表的头节点,再一个指针指向逆置的头…

深度学习介绍与环境搭建

深度学习介绍与环境搭建 慕课大学人工智能学习笔记,自己学习记录用的。(赋上连接) https://www.icourse163.org/learn/ZUCC-1206146808?tid1471365447#/learn/content?typedetail&id1256424053&cid1289366515人工智能、机器学习与…

QPaint绘制自定义仪表盘组件02

网上视频抄的&#xff0c;用来自己看一下&#xff0c;看完就删掉 最终效果 ui&#xff0c;创建一个空的widget widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QTimer>QT_BEGIN_NAMESPACE namespace Ui { c…

Java学习笔记2024/2/23

今日内容 多态 包 final 权限修饰符 代码块 教学目标 能够说出使用多态的前提条件理解多态的向上转型理解多态的向下转型能够知道多态的使用场景包的作用public和private权限修饰符的作用描述final修饰的类的特点描述final修饰的方法的特点描述final修饰的变量的特点 第…

k8s-配置与存储-配置管理

文章目录 一、配置存储1.1 ConfigMap1.1.1.基于文件夹的创建方式1.1.2指定文件的创建方式1.1.3 配置文件创建configmap 1.2 Secret1.2.1Secret的应用与Docker仓库 Secret设置1. Kubernetes 中的 Secrets&#xff1a;创建 Secret 示例&#xff1a;将 Secret 挂载到 Pod 中的示例…

Python爬虫-报错requests.exceptions.SSLError: HTTPSConnectionPool

在学习python爬虫&#xff0c;在公司运行代码没有问题&#xff0c;但是下班回来把代码拉下来运行&#xff0c;却出现问题。 问题&#xff1a; requests.exceptions.SSLError: HTTPSConnectionPool(host‘campusgateway.51job.com’, port443): Max retries exceeded with url…

Flashbit空投

空投要点 明牌空投交互简单&#xff0c;仅需3步&#xff0c;零gas费要求加密钱包在eth链有过交易需要有x和discord账号 空投简介 是一个社区驱动的项目&#xff0c;专门针对Blast生态&#xff0c;项目方提出了空投计划&#xff0c;参与过该生态其他项目空投的都清楚&#xf…

【Delphi 基础知识 35】MainMenu控件的详细使用

把TmenuMain放在Form后&#xff0c;右击控件就可以对菜单进行设计 菜单中添加分割线只需加“-”就可以添加一个分割线 级联菜单的设计 单击鼠标右键弹出菜单中选择Create Submenu菜单项 单选功能设计 要在设计的菜单项目中选择RadioItem属性为True&#xff0c;Checked属性…

Chat With RTX 安装、使用问题记录

1.安装包运行检测环境失败 安装适合的的CUDA&#xff1a;https://developer.nvidia.com/cuda-downloads?target_osWindows&target_archx86_64&target_version11 2.安装Chat With RTX 和 模型 Mistral 7B 失败 科学上网&#xff0c;可以单独装Chat With RTX 先&…

Windows+Yolo3-darknet训练自己数据集并测试

WindowsYolo3-darknet训练自己的数据集并测试 一、首要条件 Windows 7下配置好VS2015OPENCV3.4.2YOLO3CUDA10.0CUDNN7.5生成darknet.exe。具体配置可参考我的博客&#xff1a;https://blog.csdn.net/wszswllnzn_/article/details/100760477 二.制作数据集 1、方法1 使用软件la…

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed

问题描述 安装nacos2.0以上版本&#xff0c;启动报错:com.alibaba.nacos.api.exception.NacosException: Request nacos server failed com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: at com.alibaba.nacos.client.naming.remote.gprc.Nami…

MFC 多文档程序的基本编程

下载了一个openGL mfc的多文档程序,以此来学习mfc多文档模式的编程; 1 基本编程 它每次新建一个文档,会在窗口绘制一个三角形、一个矩形;如果没有了图形刷新一下; 先看一下为什么每次打开新文档会绘制图形; 生成工程之后主要有5个类,比单文档程序多了一个子框架类; 可…

华为HCIP Datacom H12-831 卷23

单选题 1、某园区部署IS-IS实现网络互通&#xff0c;在所有IS-IS路由器的进程中配置命令flash-flood 6 max-timer-interval 100 Leve1-2&#xff0c;则以下关于该场景的描述,正确的是哪—项? A、若某IS-IS路由器LSDB内更新的LSP数量为5,则在100毫秒内且路由计算完成前&#…

Java向ES库中插入数据报错:I/O reactor status: STOPPED

Java向ES库中插入数据报错&#xff1a;java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STO 一、问题问题原因 二、解决思路 一、问题 在使用Java向ES库中插入数据时&#xff0c;第一次成功插入&#xff0c;第二次出现以下错误&#xff1a…

【八股文面试】Java基础常见面试题总结(上)

Java基础常见面试题总结(上) Java有哪些特性 简单易学&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&#xff09;&#xff1b;支持多线程&#xff08; C 语言没有内置的多…

K8S-001-Virtual box - Network Config

A. 配置两个IP&#xff0c; 一个连接内网&#xff0c;一个链接外网: 1. 内网配置(Host only&#xff0c; 不同的 virutal box 的版本可以不一样&#xff0c;这些窗口可能在不同的地方&#xff0c;但是配置的内容是一样的): 静态IP 动态IP 2. 外网&#xff08;创建一个 Networ…

petalinux_zynq7 驱动DAC以及ADC模块之一:建立IP

0. 环境 - ubuntu18 - vivado 2018.3 - mizar z7010 ada106模块 1. vivado 1.1 创建vivado工程 运行vivado source /tools/Xilinx/Vivado/2018.3/settings64.sh vivado& 创建vivado工程 Vivado -> Create Project -> Next -> -> Project name: …

下载 axios.js 文件到本地【linux】

方式一 npm install axios在$NODE_PATH/node_modules/axios/dist路径下即可找到axios.js。 方式二 1、百度搜索 GitHub 官网&#xff1a;https://github.com/ 2、搜索 axios 3、点击 axios/axios 4、下载到本地 5、解压&#xff0c;进入到 dist 文件夹** 参考&#x…