Nginx(配置文件)

2023年 9月 4日 26.5k 0

Nginx(配置文件)

nginx 官方帮助文档:nginx.org/en/docs/

tengine 帮助文档:tengine.taobao.org/nginx_docs/…

1. 主配置文件详解

主配置文件:nginx.conf

  • 编译安装的主配置文件在自己自定义的文件夹下

这里我编译安装的主文件配置在/apps/nginx/nginx.conf

c1.png

//主配置文件格式

main block:主配置段,即全局配置段,对http,mail都有效

//配置Nginx服务器的事件模块相关参数
events {
 ...
}   
//http/https 协议相关配置段
http {
 ...
} 

//默认配置文件不包括下面两个模块
//mail 协议相关配置段
mail {
 ...
}    
//stream 服务器相关配置段
stream {负载均衡
 ...
}

vim /apps/nginx/conf/nginx.conf
//查看编译安装的nginx的配置文件

c2.png

2. 子配置文件详解

  • 子配置文件:自己创建,一般创建在nginx目录下,主配置文件旁边,建议创建一个conf.d,在这个目录下用来存放自己的子配置文件(方便管理),conf.d/*.conf(任意名字的子配置文件)

PS:调用配置文件可以使用include指令,该指令用于在主配置文件或其他已经被包含的文件中引入其他配置文件,以实现更好的配置组织和模块化

c3.png

子配置文件想要调用一般在主配置文件的http部分中最后一行增加include指令调用

include指令:用于引入其他的子配置文件,可以将一些通用的配置项单独放在一个文件中,然后通过include指令引入

c4.png

http块中可以包含多个子配置文件,

常见的子配置文件举例:

server块:用于配置HTTP服务器的具体行为,包括监听的端口、虚拟主机的配置、请求处理逻辑等。

location块:用于指定不同URL请求的处理方式,例如静态文件的服务、反向代理等。

upstream块:用于配置反向代理的目标服务器列表。

3.全局配置

nginx 有多种模块

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

3.1 修改启动的工作进程数(worker porcess优化)

通过使用auto参数,Nginx可以根据系统的负载情况智能的分配工作进程,以提供更好的性能和资源利用率

#修改主配置文件中的work_process项
vim /apps/nginx/conf/nginx.conf

#user  nobody;
worker_processes  auto;

#完成配置以后记得重载服务
nginx -s reload

#查看工作进程worker的数量
ps axo pid,cmd,psr,ni|grep nginx

c5.png

c6.png

3.2 cpu与worker process绑定

在 Nginx 配置文件中,worker_cpu_affinity 指令用于控制 worker 进程与 CPU的亲缘性(affinity)关系

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

#修改主配置文件中的 work_process项
vim /apps/nginx/conf/nginx.conf

user  nginx;
worker_processes auto;
#绑定1号cpu和2号cpu
worker_cpu_affinity 0001 0010;
#指定错误日志的路径和文件名
error_log /apps/nginx/logs/error.log;

这里0001 0010 是有几核就有几个0,我是4核心,所以1号cpu是0001,二号0010,三号0100,四号1000,多少核心多少个0,写法依次类推

nginx -t 
#语法检查

c7.png

c8.png

c9.png

c10.png

3.3 PID路径修改

#修改主配置文件
vim /apps/nginx/conf/nginx.conf

c11.png

3.4 修改工作进程worker的优先级

工作进程的优先级是-20~20(19),约小优先级越高

#修改主配置文件
vim /apps/nginx/conf/nginx.conf

c12.png

c13.png

3.5 调试工作进程打开的文件个数

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

vim nginx.conf
#添加
worker_rlimit_nofile 65536

#永久修改
#主配置文件添加完成以后去修改pam认证文件(永久修改)
#注意修改完pam认证文件以后,需要重启(reboot)才会生效
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字节


#临时修改
#仅在当前会话生效
#配置完主配置文件以后输入以下命令
ulimit -n 60000
#修改打开文件数为60000
ulimit -a
#查看

c14.png

永久修改:

c15.png

c16.png

临时修改:

c17.png

3.6 关闭master-worker工作模式(仅测试用)

#主配置文件顶层添加配置就可以
master_process off;
#关闭
master_process on;
#开启

#是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为on,一般只有在测试的时候用

4. 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刚安装完以后要进行适当的优化。建议设置为on
   multi_accept on; 
   #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on
}

5. http设置

http 是一个大的语句块,包含若干个小的语句块(比如server语句块)

#基本格式
http {
 ...
 ...  #各server的公共配置
 server {    #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
 ...
 }
 server {     
 ...
 server_name   #虚拟主机名
 root     #主目录
 alias     #路径别名
 location [OPERATOR] URL {     #指定URL的特性
 ...
 if CONDITION {
 ...
 }
 }
 }
}

5.1 http部分详解

  • include:引入其他配置文件,通常用于加载 MIME 类型配置文件。

  • default_type:指定默认的 MIME 类型。

  • server:定义一个或多个虚拟主机

  • listen:指定该虚拟主机监听的端口。

  • server_name:指定域名,用于匹配请求的主机头。

  • root:指定虚拟主机的根目录。

  • location:用于匹配不同的 URL,并定义相关配置规则

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.* ~^wwwd+.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

5.2 mime

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

在Nginx中,mime” 是一种配置指令,用于设置 MIME 类型与文件扩展名的映射关系。

vim  /etc/nginx/mime.types
//查看当前Nginx服务器配置的MIME类型列表

5.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"文件夹中查找并提供相应的静态文件

5.4 构建虚拟主机

5.4.1 基于域名

vim /apps/nginx/conf/nginx.conf
//进入主配置文件

//添加子配置文件,此文件位置要写在http中
include  /apps/nginx/conf.d/*.conf;

c18.png

cd /data
mkdir -p html/{pc,mobile}
//在/data/html 下创建两个文件夹 mobile  pc

c19.png

root@localhost html]# cd mobile
[root@localhost mobile]# 
[root@localhost mobile]# echo ylc111 > index.html
[root@localhost mobile]# 
[root@localhost mobile]# cat index.html
ylc111
[root@localhost mobile]# cd ../pc
[root@localhost pc]# 
[root@localhost pc]# echo ylc222 > index.html
[root@localhost pc]# 
[root@localhost pc]# cat index.html
ylc222

c20.png

#创建子配置文件存放目录
mkdir /apps/nginx/conf.d
cd /apps/nginx/conf.d
//进入子配置文件,建立两个域名文件
#创建给pc用的
vim pc.conf

server {
   listen 80;
   server_name www.ylc.com;
   root /data/html/pc/;
}

#创建给moblie用的
vim m.conf 

server {
   listen 80;
   server_name www.only.com;
   root /data/html/mobile/;
}

#配置完两个子配置文件以后重启nginx服务
nginx -s reload

c21.png

c22.png

c23.png

c26.png

#另开一台虚拟机用于测试,去/etc/hosts文件中增加解析的域名
vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
#加入下面这一行
192.168.1.10  www.ylc.com   www.only.com

#保存退出以后直接curl测试

c25.png

c27.png

5.4.2 基于端口

操作同基于域名一样,唯一区别在与一个是不同域名,一个是不同的端口

#修改两个子配置文件内容
##pc子配置文件
server {
   listen 192.168.1.10:80;
   server_name www.ylc.com;
   root /data/html/pc;
}

##mobile子配置文件
server {
   listen 192.168.1.10:8080;
   server_name www.only.com;
   root /data/html/mobile;
}

#配置完成以后检查配置文件语法是否有误,无误就重启nginx服务
nginx -t
nginx -s reload

#去另一台主机测试

d1.png

d2.png

d3.png

d4.png

5.4.3 基于ip地址

配置新的网卡,并配置ip地址

d5.png

d6.png

d7.png

d8.png

d9.png

d10.png

d11.png

去测试主机

d12.png

d13.png

d14.png

#配置子配置文件内容
##pc子配置文件内容
server {
   listen 192.168.1.10;
   server_name www.ylc.com;
   root /data/html/pc;
}

##mobile子配置文件内容
server {
   listen 192.168.1.15;
   server_name www.only.com;
   root /data/html/mobile;
}

#配置好检查语法,无误,重启服务
nginx -t
nginx -s reload

#然后去测试主机100中测试

5.4.4 路径别名alias

在 Nginx 中,alias 用于创建一个路径别名的指令。 别名可以用于将文件或目录从一个位置映射到另一个位置,提供更灵活的访问控制。

#服务端
vim /apps/nginx/conf.d/pc.conf 
//编辑子配置文件vim pc.conf,使用alias

server {
   listen 80;
   server_name www.ylc.com;
    
   location /test{
        alias /data/html/pc/index.html;
        #相当于替换,访问/test/就是访问/data/html/pc/index.html;
        }
} 

#配置完成以后检查语法错误,无误就重启服务
nginx -t
nginx -s reload

#去另一台主机测试
curl 192.168.1.10/tsxt

d15.png

d16.png

d17.png

5.5 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

5.6 基于四层的控制访问--access模块

Nginx的access模块允许用户定义基于IP地址、请求方法、URI等条件的访问规则,以控制客户端对NGINX服务器上特定资源的访问。

5.6.1 IP地址访问控制

允许或拒绝特定IP地址或IP地址范围的访问

  • 拒绝特定IP地址的访问
  • location / {
        deny 192.168.1.10
    }
    
  • 允许特定的IP地址段访问
  • location / {
        allow 192.168.1.0/24;
        deny all;
    }
    

    5.6.2 请求方法访问控制

    允许或拒绝特定HTTP请求方法,如(GET、POST等)的访问

  • 仅允许GET请求
  • if ($request_method != GET) {
        return 403;
    }
    

    5.6.3 URI访问控制

    允许或拒绝特定URI或URI模式的访问

  • 拒绝特定URI的访问
  • location /admin {
        deny all;
    }
    
  • 允许特定URI的访问
  • location ~ ^/api/ {
        allow all;
    }
    

    5.6.4 条件组合访问控制

    根据多个条件的组合来实施访问控制策略

    仅允许特定IP地址段的GET请求访问特定URI模式
    #举个例子
    location ~ ^/api/ {
        if ($request_method != GET) {
            return 403;
        }
        allow 192.168.1.0/24;
        deny all;
    }
    

    5.7 验证模块

    5.7.1 htpasswd命令

    安装
    yum install  httpd-tools -y 
    
    常用命令
    
    #第一次生成文件
    htpasswd -c  文件路径 姓名        	 交互式生成密码
    htpasswd -bc 文件路径 姓名 密码   		直接将密码跟在
    
    -c  代表新建用户名和密码对应的文件
    -b  将密码跟在用户名后
    
    #非第一次生成文件
    htpasswd     文件路径 姓名        	 交互式生成密码
    htpasswd -b  文件路径 姓名 密码   		直接将密码跟在后面 
    

    5.7.2 配置验证模块

    #编辑配置文件
    vim computer.conf
    
    server {
       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 ylc 123456 
    #创建一个.htpasswd文件,并添加一个使用Basic认证的用户名和密码
    
    cat /apps/nginx/conf.d/.httpuser
    #可以查看生成的秘钥
    
    之后去虚拟机内浏览器访问192.168.1.10/admin
    

    5.8 关闭或修改版本信息

    5.8.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的服务器上的根路径,并返回服务器的响应头信息
    #响应头信息包括服务器类型、内容类型、响应日期和连接状态等。
    

    5.8.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
    

    5.9 自定义 错误页面

    我们 可以改变 默认的错误页面,同时也可以用指定的响应状态码进行响应,

    可用位置:

    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.ylc.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.ylc.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.ylc.com;
       root /data/nginx/html/pc;
       error_page 404 =302 /index.html;
       #把错误码 404 指定成302  并跳到主页面:/index.html
    
    

    5.10 日志位置存放

    通过修改日志的路径,可以实现日志分离,即不同网站的日志单独存放。

    mkdir  /data/logs #新建存放日志的目录
    
    #编辑子配置文件,指定日志存放位置
    vim /apps/nginx/conf.d/mobile.conf
    
    server{
            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.conf
    
    server{
            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 #语法检查无误后重载
    

    5.11 检测文件是否存在--try_files指令

    Nginx 的 try_files 指令用于指定在资源文件不存在时如何处理请求。

    默认开启,可用于server和location部分

    5.11.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 响应码。
    
    

    示例:

    服务端:

    #新建寻找失败跳转页面
    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 #查找一个存在的文件来测试 
    

    5.12 长连接相关--keepalive指令

    5.12.1 原理

    HTTP Keep-Alive 功能用于实现长连接,允许客户端和服务器之间的 TCP连接在发送完一个请求后保持打开状态,以便在同一连接上发送多个请求和响应。

    可以加在全局或者 server 。

    keepalive 配置指令仅对 HTTP/1.0 和 HTTP/1.1 版本的连接有效。

    对于 HTTP/2 连接,keepalive 功能是默认启用的,并且无需额外配置。

    5.12.2 keepalive_timeout

    keepalive_timeout 用于定义长连接超时时间。

    当一个客户端与服务器之间的连接完成一个请求后的等待时间。 如果在这个时间内没有收到新的请求,服务器会关闭连接。

    这个时间是以秒为单位的,默认值是 75 秒。

    keepalive_timeout timeout [header_timeout];
    #设定保持连接超时时长
    

    5.12.3 keepalive_requests

    keepalive_requests 用于设置一个连接上可以处理的最大请求数量。

    当达到指定数量后,服务器会关闭该连接并且客户端需要重新建立新连接。

    默认情况下,keepalive_requests 的值是 100。

    如果将 keepalive_requests 设置为 0,则表示在完成每个请求后立即关闭连接,禁用了 Keep-Alive 功能。

    keepalive_requests number;  
    #在一次长连接上所允许请求的资源的最大数量
    

    5.13 作为下载服务器配置

    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_module
      
    autoindex 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;
      }
    
    

    5.14 用户上传资料

    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
    

    5.15 其他设置

    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.1.10;
     deny all;
    }
    #除了GET和HEAD之外的方法不会接受来自1.0网段的请求。只有IP地址为192.168.1.10的主机才能使用这些方法。
    

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论