nginx 配置文件详细介绍

一,   nginx 配置文件架构

上一篇  已对 main 全局配置做了详细介绍   本章对剩下的配置文件部分做介绍 

二,event  设置

(一)event 相关的配置文件为

配置工作模式以及连接数

(二)具体表现

1,单个worker最大并发连接数

 worker_connections 65536; #设置单个工作进程的最大并发连接数

注意:要和配置文件中全局配置的    worker_rlimit_nofile 数量;  (所有worker最大并发连接数) 配合

2,   使用epoll事件驱动      

 use epoll;

默认使用epoll事件驱动          Nginx支持众多的事件驱动,比如:select、poll、epoll,只能设置在events模块中设置                  

3, 惊群

 accept_mutex on;

 #on为同一时刻一个请求轮流由work进程处理,而防止被同时唤醒所有worker,避免多个睡眠进程被唤醒的设置,默认为off,新请求会唤醒所有worker进程,此过程也称为"惊群",因此nginx刚安装完以后要进行适当的优化。建议设置为on

4,一个worker 可以同时接待多个请求

 multi_accept on; 

 #ON时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为off,即默认为一个工作进程只能一次接受一个新的网络连接,打开后几个同时接受多个。建议设置为on

三,   http设置

(一)http 

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

(二) http 协议配置说明

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 /fxj  {           www.ky31.com/fsj     /apps/nginx/html   
           root   /data;
           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
3.3.1 MIME
范例: 识别php文件为text/html
    #   listen       8000;
    #   listen       somename:8080;
    #   server_name somename alias another.alias;
    #   location / { 
    #       root   html;
    #       index index.html index.htm; #指定默认网页文件,此指令由
ngx_http_index_module模块提供
    #   }
    #}
    # HTTPS server
    #
    #server { #https服务器配置
    #   listen       443 ssl;
    #   server_name localhost;
    #   ssl_certificate     cert.pem;
    #   ssl_certificate_key cert.key;
    #   ssl_session_cache   shared:SSL:1m;
    #   ssl_session_timeout 5m;
    #   ssl_ciphers HIGH:!aNULL:!MD5;
    #   ssl_prefer_server_ciphers on;
    #   location / {
    #       root   html;
    #       index index.html index.htm;
    #   }
    #}

1, mime

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

 

2,  server块构建虚拟主机

2.1  子配置文件规则

子配置文件委身在http 模块 写其他的模块内容是用的

子配置文件里的内容 和http 模块下面的内容冲突时 以子配置文件为 读配置文件由上而下 所以建议子配置文件放这个模块的最后

2.2 如何写子配置文件

检查一下

2.3  做虚拟主机

两个容易犯错的地方!

注意 子配置文件的位置!在  /apps/nginx/conf.d/

注意关闭防火墙  否则报错    curl: (7) Failed connect to www.m.com:80; 没有到主机的路由

1,在/apps/nginx/conf.d/   各自新建shouji.conf    diannao.conf

2, 分别  给两个访问目录加内容

index.html   是站点文件  因为配置文件写了客户机访问时 默认去这里看

3, 服务机  检查

4, 客户机配置 域名 vim    /etc/hosts

5, 客户机分别访问   看到不同的东西

3,root location

3.1   root location 意义

root    指明根目录的位置

location    追踪url   根据用户访问的地址不同,去往不同的页面

3.2   location 下面再写root

把 局部的根  站点文件写入     111

原理:

直接curl   访问原来的根   (没匹配到location  下面的根)

curl  /shouji/   匹配到location    取下面的根

curl  ip 地址时    子配置文件有两个diannao.conf   和  shouji.conf   按字母排序   先匹配到diannao.conf   所以显示  diannao

4,     alias 别名

server {
   listen 80;
   server_name www.kgc.com;
   location /nwes {
        root /data/nginx/html/pc/;
        #相当于追加  将 文件夹news追加到/data/nginx/html/pc/news
        }
   location /study{
        alias /mnt/nginx/sports/;
        #相当于替换 你访问 study  就是访问/mnt/nginx/sports
        }
}

(三)  location 去匹配

1, 介绍

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,按一定的优化级找出一个最佳匹配,而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri,uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。

2,语法规则

location [ = | ~ | ~* | ^~ ] uri { ... }

=#用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~#用于标准url前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~    #用于标准url前,表示包含正则表达式,并且区分大小写
~*#用于标准url前,表示包含正则表达式,并且不区分大写
不带符号  #匹配起始于此uri的所有的uri

匹配优先级从高到低:
=,           ^~,             ~/~*,         不带符号

3, 例题

4 ,location     一个bug

4.1  区分大小写问题

~*  是不区分大小写的

 #匹配 已A后面一个或没有字符,已.jpg结尾的图片     ?表示1个或0个

然后在 新根  下面放一张图片   改名   a.jpg    

重新加载配置文件

浏览器输入  192.168.217.66/a.jpg      看不到

因为 软件不区分大小写 但是linux的文件系统xfs还是会区分大小写

输入  A.jpg   才能看到图片

5,  location 匹配顺序

5.1  实验1

location 不是由上而下的 是看优先级读    

根据 location  匹配规则   应该按照优先级    匹配/data/index.html   的内容

5.2  实验2

根据优先级 先看到static1 再看到3 再看到2

6,location 作用

因为nginx 不擅长处理动态资源

需要动静分离

静态资源去找nginx 

动态资源 去另外一个服务器

四 , access 模块 四层控制

access 模块   控制ip

(一)如何查看模块是否默认安装

去到源码包

安装nginx时   有些模块默认安装   有些模块是手动安装

without 是默认安装     with  是手动安装

(二) 控制ip

配置文件修改
server {
   listen 80;
   server_name www.kgc.com;
   allow 192.168.91.0/24;
   deny 192.168.91.101;
   location / {
        root /data/nginx/html/pc;
 }
}

匹配了之后就不往下匹配了
所以范围小的往上

写一个子配置文件

可以发现 黑名单客户机访问不了

其他  客户机正常匹配到 opt

五, 验证模块 需要输入用户名和密码

(一)语法

在配置文件加    

 auth_basic    "admin site";
        #提示信息,不是所有浏览器都有用

注意这一行一定要有  开启这个模块 并显示提示信息

auth_basic_user_file/apps/nginx/conf.d/.httpuser;
        #密码文件存放位置    且这个文件 需要用特定的命令生成(htpasswd )

(二)htpasswd

此命令来自于 httpd-tools 包,如果没有安装 一下即可

1,  htpasswd 选项

-c  代表新建用户名和密码对应的文件

htpasswd -c  文件路径 姓名             交互式生成密码

-b  将密码跟在用户名后

htpasswd -c 文件路径 姓名 密码           直接将密码跟在后面 

2, htpasswd 示例

再新增一个   小红用户  直接跟密码

注意: 这两个账户是nginx的虚拟账号

(三)验证模块  示例

注意! 提示信息不是所有浏览器都能看到

           且 此处匹配的是  /mnt/html/admin


六  ,网页的状态页

(一)语法

(二)stub_status 示例

用客户端访问   可以看到网页的状态

(三) 网页状态页具体解释

Active connections#当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
accepts#统计总值,Nginx自启动后已经接受的客户端请求的总数
handled#统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests#统计总值,Nginx自启动后客户端发来的总的请求数。
Reading#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
Writing#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
 
Waiting#当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)

(四)提取网页状态页的 Reading Writing Waiting

目的:提取这三个数字

当直接提取  会有很多垃圾信息

把多余的信息  导给垃圾箱

(五) 加密 网页状态页

1,为什么要加密 网页状态页

网页状态页比较机密   所以需要加密。

两个方法可以配合使用

1,用验证模块  要求输入账号密码才能访问  这个网页

2,设置白名单 默认都不能进  只允许自己进

2,加密 网页状态页  并提取Reading Writing Waiting

此时直接用 curl 文字版浏览器会出现401 报错

401报错; 请求  要求用户的身份验证

需要按照url 格式补完用户和密码  再去提取

七,自定义错误页面

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

(一)格式

(二)示例

#当出现404 错误  就去  /data/error/ 这个文件夹找40x.html  这个文件

给这个 40.xhtml  加内容(你可以把html 理解为一种文件格式 类似txt  index只是名字

客户机 输入没有的地址  不会出现404

八 , 自定义状态码

(一)改404 的意义

但是有些流氓浏览器   会劫持你的网站,当出现404时,没等到你把客户机引导到  自定义的页面,就被劫持了。

所以需要改状态码

(二)步骤

很简单  加上404=302 即可

客户机:  状态码变为302 这样不用担心被劫持了

九, 检测文件是否存在

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

(一)语法

注意  :比如客户机访问/abc   依次去试 

主页面的abc文件夹          主页面的 abc.html 文件   主页面下 abc/index.html 文件

最后有个   主页面下 about/default.html 拖底

(二)  示例

注意!!!  不要手贱! 

 try_files $uri $uri.html $uri/index.html /about/default.html            中间不要多打空格!

 在拖底文件夹 里写入tuodi

客户机验证:

 

我们再来检验   try_files会按顺序检查   

在 /data 下建abc.html

客户机再次验证: 匹配的是这里的内容

十  , 长连接

http 基于 tcp 协议 先要 三次握手然后 再传输数据

一次三次握手 下载多个资源

一次三次握手下载一个资源

(一)语法

默认开启 在主配置文件

(二)示例

keepalive_requests 3;#最大下载三个资源就会断开
keepalive_timeout 60 65;
(只能有一个空格 )
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60 #浏览器收到的服务器返回的报文
#如果设置为0表示关闭会话保持功能
keepalive_disable none | browser ...;

对哪种浏览器禁用长连接

十一 ,  作为下载服务器配置

(一)介绍

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

(二)语法

(三) 示例

配置文件添加  locatoin  /download

往   /download/   文件夹加入内容

客户机访问

(四)用户上传资料

上传需要借助开发小的程序, 并且程序 5M 和 nginx 10M 都会限制。 两者取最小

十二 ,   其他设置

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网段主机使用

十三,写配置文件时一直有交换提示

有交换提示 把隐藏文件删了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖音数据抓取工具|视频内容提取软件

引言部分: 介绍针对抖音视频下载需求开发的强大工具突出解决用户获取抖音视频繁琐问题的初衷 工具功能介绍: 详细描述工具功能,包括关键词搜索、自动批量抓取、选择性批量下载等提及基于C#开发的优势以及支持通过分享链接进行单个视频抓取…

k8s的svc流量通过iptables和ipvs转发到pod的流程解析

文章目录 1. k8s的svc流量转发1.1 service 说明1.2 endpoints说明1.3 pod 说明1.4 svc流量转发的主要工作 2. iptables规则解析2.1 svc涉及的iptables链流程说明2.2 svc涉及的iptables规则实例2.2.1 KUBE-SERVICES规则链2.2.2 KUBE-SVC-EFPSQH5654KMWHJ5规则链2.2.3 KUBE-SEP-L…

axios是如何实现的(源码解析)

1 axios的实例与请求流程 在阅读源码之前,先大概了解一下axios实例的属性和请求整体流程,带着这些概念,阅读源码可以轻松不少! 下图是axios实例属性的简图。 可以看到axios的实例上,其实主要就这三个东西&#xff1a…

自定义悬浮气泡组件

一.常用悬浮气泡展示 在一个项目中,常常会使用点悬浮展示,而市面上悬浮tooltip的组件非常多 例如常用的antd提供的Tooltip 用法如下(来自于官方文档示例): import React from react; import { Button, Tooltip, Con…

129 Linux 系统编程7 ,make 的编写和解析

前文中,我们有多少个.c文件,就需要build 出来多少个.o文件 假设我们的项目很大,怎么管理这些 .c文件呢? 这里就要学习一个make文件的编写了。 makefile 本质上是一个脚本语言 脚本语言实际上就是将一系列命令放在一起执行 mak…

服务器被黑该如何查找入侵痕迹以及如何防御攻击

当公司的网站服务器被黑,被入侵导致整个网站,以及业务系统瘫痪,给企业带来的损失无法估量,但是当发生服务器被攻击的情况,作为服务器的维护人员应当在第一时间做好安全响应,对服务器以及网站应以最快的时间…

程序环境和预处理(1)

文章目录 目录1. 程序的翻译环境和执行环境2. 详解编译链接2.1 翻译环境2.2 编译本身也分为几个阶段2.3 运行环境 3. 预处理详解3.1 预定义符号3.2 #define3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##3.2.5 带副作用的宏参数3.2.6 宏和函数…

HAT论文详解:Activating More Pixels in Image Super-Resolution Transformer

code:https://github.com/XPixelGroup/HAT paper: https://arxiv.org/abs/2309.05239 1. 概述 本文是对Swinir的改进,目前很多图像超分Benchmark的SOTA。相对于SwinIR的改进主要有三个地方:1. 引入Channel Attention,以获得更好的全局能力&…

【Linux】 login命令使用

login命令 在 Linux 中用于创建一个新的会话,并在新会话中登录用户。这个命令通常在终端中自动执行,当你打开一个新的终端会话或者通过 SSH 远程连接到 Linux 服务器时。 在命令后面附加欲登入的用户名称,它会直接询问密码,等待…

探索水下低光照图像检测性能,基于YOLOv3全系列【yolov3tiny/yolov3/yolov3spp】参数模型开发构建海底生物检测识别分析系统

海底这类特殊数据场景下的检测模型开发相对来说比较少,在前面的博文中也有一些涉及,感兴趣的话可以自行移步阅读即可: 《尝试探索水下目标检测,基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统》 《基于YOLOv5C3CBAMCBA…

Element table 实现表格行、列拖拽功能

安装包 npm install sortablejs --save <template><div class"draggable" style"padding: 20px"><el-table row-key"id" :data"tableData" style"width: 100%" border><el-table-columnv-for"(it…

【Linux】 faillock 命令使用

faillock 命令 faillock 命令是 PAM (Pluggable Authentication Modules) 的一部分&#xff0c;它被设计用来跟踪失败的登录尝试&#xff0c;并在连续失败尝试超过某个阈值时锁定账户。这个功能可以帮助系统管理员识别和防止暴力破解攻击。当一个用户连续多次输入错误的密码后&…

如何开发自己的npm包并上传到npm官网可以下载

目录 搭建文件结构 开始编写 发布到npm 如何下载我们发布的npm包 搭建文件结构 先创建新文件夹,按照下面的样子布局 .├── README.md //说明文档 ├── index.js //主入口 ├── lib //功能文件 └── tests //测试用例 然后再此根目录下初始化package包 npm init…

Cartographer 构建约束优化问题

计算优化的思路&#xff0c;需要两种坐标变换&#xff0c;用两种坐标变化的残差求解。 第一种残差 将节点与子图原点在global坐标系下的相对位姿与约束的差值作为残差项 第一种坐标变换&#xff1a;节点与子图原点在global坐标系下的坐标变换 第二种坐标变换&#xff1a;子图内…

NXP实战笔记(八):S32K3xx基于RTD-SDK在S32DS上配置LCU实现ABZ解码

目录 1、概述 2、SDK配置 2.1、IO配置 2.2、TRGMUX配置 2.3、LCU配置 2.4、Trgmux配置 2.5、Emios配置 2.6、代码实现 1、概述 碰到光电编码器、磁编码器等,有时候传出来的位置信息为ABZ的方式,在S32K3里面通过TRGMUX、LCU、Emios结合的方式可以实现ABZ解码。 官方…

【Pytorch】从MoCo看无监督对比学习;从SupCon看有监督对比学习

目录 无监督对比学习&#xff1a;Moco文章内容理解代码解释 有监督对比学习&#xff1a;Supervised Contrastive Learning文章内容理解 无监督对比学习&#xff1a;Moco 文章内容理解 以下内容全部来自于&#xff1a;自监督学习-MoCo-论文笔记. 侵删 论文&#xff1a;Momentu…

vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

解决方法&#xff1a; 打开PowerShell&#xff0c;在命令框输入set-ExecutionPolicy RemoteSigned 在PowerShell中输入会出现如下图&#xff0c;输入y即可。

【MATLAB】 RLMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 RLMD分解算法 RLMD&#xff08;Robust Local Mode Decomposition&#xff09;是一种鲁棒的局部模态分解方法。它是通过在局部区间内对信号进行多项式拟合&#xff0c;提取局部特征&#xff0c;进而分解信…

【Vuforia+Unity】AR07-实现识别条码、二维码内容功能(Barcode Scanner)

Barcode Scanner in Unity | Vuforia Library官方教程,写的很详细,本教程主要参考对象! 主要实现扫描生活中常见的二维码,然后弹出二维码链接,当然我们也可以再次回调自定义函数,弹出数字内容,AR内容效果! 支持的二维码: 局限性 条码扫描组件还定义检测和跟踪的条形…

2024年2月前端资讯动态:JSR新仓库革新及Set方法等全新特性

2024年2月前端技术领域再次迎来了一系列激动人心的更新和进展。无论是新兴的包仓库JSR&#xff0c;还是JavaScript提案中的Set方法、Array.prototype.with()的加入&#xff0c;都预示着前端开发的未来将更加灵活和强大。本文将为您详细介绍这些技术的最新动态&#xff0c;帮助您…