linux-nginx-2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux-nginx-2相关的知识,希望对你有一定的参考价值。

****一.nginx配置文件

  1. nginx配置文件:/etc/nginx/nginx.conf /etc/nginx/conf.d/ /etc/nginx/default.d/
    配置文件结构
    nginx配置文件的结构:
    main(全局配置段)
    events {...}
    http {
    ...
    server {
    location ... {...}
    location ... {...}
    ...
    }
    server {
    ...
    }
    }

    2、配置参数需要以分号结尾,语法格式:
    参数名 值1 [值2 ...];
    3、配置文件中还可使用变量:
    模块内置变量
    用户自定义变量:set var_name value
    4、配置文件检查:nginx -t
    5、重载配置文件:nginx -s reload

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    二、nginx的基本核心配置(main段、events{}段)
    1、正常运行的必备配置:
    ①user username [groupname]; #指定运行worker进程的用户和组
    ②pid /path/to/pidfile_name; #指定nginx的pid文件
    ③worker_rlimit_nofile NUM;
    worker进程所能够打开的最大文件句柄数。该值不能小于worker_connections×worker_processes,如果nginx工作为反向代理服务器,则该值不能小于worker_connections×worker_processes×2,因为此时一个请求需要维持两个套接字文件。
    ④worker_rlimit_sigpending NUM; 设定每个用户能够发往worker进程的信号的数量;
    2、优化性能相关的配置:
    ①worker_processes num; worker进程的个数;通常其数值应该为CPU的核心数减1;默认为auto,系统自动识别设定
    ②worker_cpu_affinity cpumask ...;用于定义worker进程和哪颗CPU有”亲和性”,worker进程就会只在指定的CPU上运行了。CPU使用CPU掩码指定2。也可在CPU掩码前加入”auto”令其自动在指定CPU设置亲和性
    例如:
    worker_processes 4;
    worker_cpu_affinity 0001 0010 0100 1000;
    表示将4个worker进程分别绑定在CPU0,CPU1,CPU3 CPU4上
    ③ssl_engine device; #在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备;
    ④timer_resolution t; #每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟;timer_resolution用于定义每隔多久才会由gettimeofday()更新一次缓存时钟;x86-64系统上,gettimeofday()代价已经很小,可以忽略此配置;
    ⑤worker_priority nice; 设置worker进程的nice值以调整其优先级,默认值0。这个指令的参数范围也就是nice值范围(-20至19)
    技术分享图片

events段

默认配置:

events {
worker_connections 1024; # 定义每个worker进程最大并发连接数
}
①accept_mutex [on|off] #是否打开nginx的负载均衡锁;此锁能够让多个worker进程轮流地、序列化地与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不再将请求调度此worker;
②lock_file /path/to/lock_file;如果多个worker进程负载均衡,需要锁文件。该选项用于指定锁文件路径。编译安装时也可通过./configure的选项指定
③accept_mutex_delay #ms; #accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;
④multi_accept on|off; #是否允许一次性地响应多个用户请求;默认为off;
⑤use [epoll|rtsig|select|poll]; #定义使用的事件模型,建议让nginx自动选择;
⑥worker_connections #; #每个worker进程能够并发响应的最大请求数;
4、用于调试、定位问题: 只调试nginx时使用
①daemon on|off; #是否让ningx运行于后台;默认为on,调试时可以设置为off,使得所有信息直接输出至控制台;
②master_process on|off #是否以master/worker模式运行nginx;默认为on;调试时可设置off以方便追踪;
③error_log /path/to/error_log level; #错误日志文件及其级别;默认为error级别;调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能;

     +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     web服务相关配置

http段用于定义nginx作为web服务的配置。

http段结构:

http{
……

server{
    【server1配置】
}

server{
    【server2配置】
}

……

server就相当于httpd中的虚拟主机。不同之处是nginx没有中心主机,即便只有一个站点,也要使用一个server段定义。
在server段外定义的配置,对所有server生效。 非虚拟主机的配置或公共配置,需要定义在server之外,http之内。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
虚拟主机相关的配置
⑴server {...}
定义一个虚拟主机;nginx支持使用基于主机名或IP的虚拟主机;
listen IP [:PORT] [OPTIONS] ;指定监听的地址、端口
root 根目录路径;指定页面文件根目录,如果使用相对路径,则相对的是编译安装目录(编译时–prefix指定的路径)。类似于httpd中的DocumentRoot,但不尽相同,root在location段中也常使用。定义root后,各指令所指定的相对路径,就是相对于root了
server_name :指定虚拟主机名。相当于httpd虚拟主机段中的ServerName,可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头);当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较;比较方式
①先做精确匹配,如 wwb1.lishuai.com
②左侧通配符匹配,如 .lishuai.com
③右侧通配符匹配,如 www.

④正则表达式匹配,如 ~^..lishuai.com$
如果客户端在浏览器键入的主机名可以被上述方式中的多种匹配到,则优先级是:精确主机名–>左侧使用通配–>右侧使用通配–>正则表达式匹配
——————————————————————————————————————————————————————
location [ = | ~ | ~
| ^~ ] uri { ... } #location只能放在server和location中,location可出现多次
location @name { ... }
功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理
使用范围:server段、location段
匹配URI的方式,按优先级依次为:
=PATH 精确匹配路径
^~PATH 使用正则表达式匹配URI的前半段
~PATH 使用正则表达式匹配URI,区分大小写
~*PATH 使用正则表达式匹配URI,不区分大小写
PATH 直接使用PATH匹配,表示在PATH路径下的资源
即优先级是先匹配小范围,再匹配大范围。
官方文档的示例:

location = / { # 仅当URI为"/"时,使用A配置
[ configuration A ]
}

location / { # URI为"/"下包含的路径时,使用B配置
[ configuration B ]
}

location /documents/ { # URI为"/documents/"下包含的路径时,使用C配置
[ configuration C ]
}

location ^~ /images/ { # URI靠前部分为"/images/",使用D配置
[ configuration D ]
}

location ~* .(gif|jpg|jpeg)$ { # URI结尾是gif、jpg或jpeg时,使用E配置
[ configuration E ]
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++====++++
alias定义路径别名

指令alias,仅能定义在location段中,用于把location指定的URI定义别名。

比如:

location /test/ {
alias /lishuai/txt/;
}
表示把uri中的test替换为/lishuai/txt/
比如我们本来访问的是http://192.168.2.18/test/index.html 此时就被替换为http://192.168.2.18/lishuai/txt/index.html
区别root path和alias path:
①location /i/ {
root /data/images;
}
“/i/top.gif”将由/data/images/i/top.gif文件来响应
②location /i/ {
alias /data/images/;
}
“/i/top.gif”将由/data/images/top.gif文件来响应

技术分享图片
技术分享图片
技术分享图片

index定义主页

指令index来自模块ngx_http_index_module。用于定义主页。

使用范围:http段、server段、location段。定义在不同的段有不同的生效范围。默认值是index.html

error_page定义错误页面

指令error_page,用于自定义错误页面。

使用格式:error_page code ... [=[response]] uri。表示根据响应码code(可指定多个),返回给客户端uri指定的页面。

使用范围:http段、server段、location段、location段中的if语句
技术分享图片
error_page的实质是把对指定URI的错误请求,重定向至一个自定义页面。相当于客户端重新访问了服务端(只是相当于。其实这个过程客户端并不参与,由nginx自动进行),只不过请求的资源被重定向为了自定义的错误页面。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
网络连接相关的设置:
⑴keepalive_timeout time; #保持连接的超时时长;默认为75秒
⑵keepalive_requests n; #在一次长连接上允许承载的最大请求数
⑶keepalive_disable [msie6 | safari | none ]; #对指定的浏览器禁止使用长连接
⑷tcp_nodelay on|off; #对keepalive连接是否使用TCP_NODELAY选项
⑸client_header_timeout time; #读取http请求首部的超时时长
⑹client_body_timeout time; #读取http请求包体的超时时长
⑺send_timeout time; #发送响应的超时时长

    **对客户端请求进行限制:**
        1、limit_except METHOD {...}
            指定对范围之外的其它方法的访问控制;

            limit_except GET {
                allow 192.168.2.0/24;
                deny all;
            }

        2、client_body_max_size SIZE;
            限制请求报文中body部分的上限;通过检测请求报文首部中的"Content_Length"来判定;

        3、limit_rate speed; 
            限制客户端每秒种传输的字节数,默认为0,表示无限制;

            4、limit_rate_after time;
    nginx向客户端发送响应报文时,如果时长超出了此处指定的时长,则后续的发送过程开始限速;

**          ◆文件操作的优化:**
 ⑴sendfile on|off;   #是否启用sendfile功能;
 ⑵aio on|off;   #是否启用aio功能;
 ⑶open_file_cache max=N [inactive=time]|off;   #是否打开文件缓存功能;
     max: 缓存条目的最大值;当满了以后将根据LRU算法进行置换;
     inactive: 某缓存条目在指定时长时没有被访问过时,将自动被删除;默认为60s
     缓存的信息包括:
       文件句柄、文件大小和上次修改时间;
       已经打开的目录结构;
       没有找到或没有访问权限的信息;
 ⑷open_file_cache_errors on|off;   #是否缓存文件找不到或没有权限访问等相关信息;
 ⑸open_file_cache_valid time;   #多长时间检查一次缓存中的条目是否超出非活动时长,默认为60s
 ⑹open_file_cache_min_use #;   #在inactive指定的时长内被访问超此处指定的次数地,才不会被删除;

◆对客户端请求的特殊处理
⑴ignore_invalid_headers on|off;
是否忽略不合法的http首部;默认为on,off意味着请求首部中出现不合规的首部将拒绝响应;只能用于server和http
⑵log_not_found on|off; #是否将文件找不到的信息也记录进错误日志中;
⑶resolver address; #指定nginx使用的dns服务器地址;
⑷resover_timeout time; #指定DNS解析超时时长,默认为30s;
⑸server_tokens on|off; #是否在错误页面中显示nginx的版本号;

◆内存及磁盘资源分配:
⑴client_body_in_file_only on|clean|off;
HTTP的包体是否存储在磁盘文件中;非off表示存储,即使包体大小为0也会创建一个磁盘文件;on表示请求结束后包体文件不会被删除,clean表示会被删除;
⑵client_body_in_single_buffer on|off;
HTTP的包体是否存储在内存buffer当中;默认为off;
⑶cleint_body_buffer_size size;
nginx接收HTTP包体的内存缓冲区大小;若包体超出该值,则会写入磁盘文件中
⑷client_body_temp_path dir-path [level1 [level2 [level3]]];
HTTP包体存放的临时目录;
例如:client_body_temp_path /var/tmp/client/ 1 2;
后面的数字表示十六制的位数;此语句表示在/var/tmp/client目录下创建16个一级子目录,然后在每个一级子目录下创建16*16个二级子目录
⑸client_header_buffer_size size;
正常情况下接收用户请求的http报文header部分时分配的buffer大小;默认为1k
⑹large_client_header_buffers number size;
存储超大Http请求首部的内存buffer大小及个数;
⑺connection_pool_size size;
nginx对于每个建立成功的tcp连接都会预先分配一个内存池,此处即用于设定此内存池的初始大小;默认为256
⑻request_pool_size size;
nginx在处理每个http请求时会预先分配一个内存池,此处即用于设定此内存池的初始大小;默认为4k

◆http核心模块的内置变量:
$uri: 当前请求的uri,不带参数;
$request_uri: 请求的uri,带完整参数;
$host: http请求报文中host首部;如果请求中没有host首部,则以处理此请求的虚拟主机的主机名代替;
$hostname: nginx服务运行在的主机的主机名;
$remote_addr: 客户端IP
$remote_port: 客户端Port
$remote_user: 使用用户认证时客户端用户输入的用户名;
$request_filename: 用户请求中的URI经过本地root或alias转换后映射的本地的文件路径;
$request_method: 请求方法
$server_addr: 服务器地址
$server_name: 服务器名称
$server_port: 服务器端口
$server_protocol: 服务器向客户端发送响应时的协议,如http/1.1, http/1.0
$scheme: 在请求中使用scheme, 如https://www.lishuai.com/中的https;
$http_HEADER: 匹配请求报文中指定的HEADER,$http_host匹配请求报文中的host首部
$sent_http_HEADER: 匹配响应报文中指定的HEADER,例如$http_content_type匹配响应报文中的content-type首部;
$document_root:当前请求映射到的root配置;


nginx作为web server的其它功能
1、访问控制(http_access_module)
allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all;
缺省是allow all
示例:
location / {
deny 192.168.2.29;
allow 192.168.2.0/24;
}
我们允许192.168.2.0网段的所有主机访问,拒绝192.168.29这台主机访问
技术分享图片


2、用户认证(http_auth_basic_module)
auth_basic string | off;
auth_basic_user_file file;
示例:
技术分享图片
技术分享图片


3、当无默认主页时显示文件列表,常用于建立下载站点(http_autoindex_module)
autoindex on | off;



防盗链

指令valid_referers,来自模块ngx_http_referer_module。
用于指定请求报文中的referer首部的哪些值是合法的。从而结合内置变量invalid_referer,对从非法地址跳转而来的请求予以拒绝等操作。
使用范围:server段、location段
⑴定义合规的引用
valid_referers none | blocked | server_names | string ...;
说明:
none:缺少“Referer”请求头;
blocked:“Referer” 请求头存在,但是它的值被防火墙或者代理服务器删除; 这些值都不以“http://” 或者 “https://”字符串作为开头
server_names:“Referer” 请求头包含某个虚拟主机名;
string可以是:
任意字符串:定义一个服务器名和可选的URI前缀。服务器名允许在开头或结尾使用“*”符号。 当nginx检查时,“Referer”请求头里的服务器端口将被忽略。
正则表达式:必须以“~”符号作为开头。 需要注意的是表达式会从“http://”或者“https://”之后的文本开始匹配
示例

       valid_referers none blocked server_names      # 定义请求报文referer首部不存在、为空或符合下面列出的两种主机名,为合法
           *.example.com example.* www.example.org/galleries/     # 字符串匹配主机名
           ~.google.;                                           # 正则表达式匹配主机名

                if ($invalid_referer) {                            # 定义合法referer首部之后,可使用内置变量invalid_referer作为条件,从而对非法referer首部的请求报文拒绝处理,比如返回403或重定向至另一位置
                return 403;拒绝不合规的引用
        }



日志相关

ngx_http_log_module引入指令access_log、log_format、open_log_file_cache。

1、 access_log

使用范围:http段、server段、location段、location段中的if语句、limit_except指令中

使用格式:


access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;      

各参数意义:

参数 意义
path 指定访问存放位置。不同server当然应该存放在不同位置,否则难以查看
format 指定日志格式
buffer=size 指定缓冲区大小。当有大量并发时,来不及把日志内容写入磁盘,则先写在缓冲区,周期刷写至磁盘
flush=time 指定缓冲区内容刷写至磁盘的周期时间
gzip[=level] 使用压缩并指定级别
syslog:server= 指定日志存放在syslog服务器。如syslog:server=192.168.1.1等。如需使用syslog,该参数需放在最前端
默认值:

access_log logs/access.log combined             # 默认,路径定义在编译安装时--prefix指定的路径下的logs/access.log下,格式为combined(这个格式定义同httpd的`)

log_format

使用格式:log_format name string...,定义日志格式名name,并为此格式名定义各字段。
类似httpd中的定义方式,只不过httpd中用的是各种宏,这里用的是内置变量。

使用范围:http段

各内置变量基本见名知意,比如combined格式的默认定义:

log_format combined ‘$remote_addr - $remote_user [$time_local] ‘
                    ‘"$request" $status $body_bytes_sent ‘
                    ‘"$http_referer" "$http_user_agent"‘;

各内置变量具体含义可在官网查询,不赘述了。

open_log_file_cache

使用格式:

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;

指定是否缓存日志文件的文件描述符,提高打开日志文件的效率以更新日志文件。默认关闭。

参数意义:

参数 意义
max=N 指定最大缓存条目数。数量达到最大时,使用最近最少使用算法(LRU)清理多余条目
inactive=time 指定非活动时长。默认10秒
min_uses=N 指定在非活动时长内,至少要被访问多少次,否则就视为非活动缓存(需清理)
valid=time 指定有效性检查时间,即多久检查一次缓存的文件描述符对应的文件是否还存在或是否改名。默认60秒

error_log

该指令在nginx核心模块Core functionality,上述访问日志的各指令在ngx_http_log_module模块。

写在这里是因为它们都是记录日志。error_log用于定义错误日志。

使用范围:main段、http段、mail段、stream段、server段、location段

使用格式:

error_log file | [syslog] | [stderr] | [memory] level # file表示错误日至记录在哪个文件;

也可记录在指定的syslog服务器

                                                            # 也可输出至标准错误输出(stderr)
                                                            # 也可记录在内存中(memory)。性能好但不会永久保存,一般调试时使用

日志级别严重程度由低到高依次为:debug, info, notice, warn, error, crit, alert, emerg
每个级别输出的信息是当前级别以及比它更严重级别的信息。不过如要使用debug级别,编译时要指定–with-debug选项才可。

默认配置:

error_log logs/error.log error




5、URL重写(http_rewrite_module)
⑴rewrite regex replacement [flag];
如果URI能匹配指定的正则表达式,此URI将被replacement参数定义的字符串改写。如果replacement的字符串以“http://”或“https://”开头,nginx将结束执行过程,并返回给客户端一个重定向
flag参数可以是:
①last:一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后通过重写后的规则重新发起请求
②break:一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后继续由nginx进行后续操作;
③redirect:返回302临时重定向,浏览器会显示跳转后的URL地址
④permanent:返回301永久重定向,浏览器会显示跳转后的URL地址。
注意:
last和break只是实现URL重写,浏览器地址栏中的URL地址不变,这与重定向不同。
一般将rewrite写在location中时都使用break标志,或者将rewrite写在if上下文中

     如果replacement字符串包括新的请求参数,以往的请求参数会添加到新参数后面。如果不希望这样,在replacement字符串末尾加一个问号“?”,就可以避免,例如:
       rewrite ^/users/(.*)$ /show?user=$1? last;
     如果正则表达式中包含字符“}”或者“;”,整个表达式应该被包含在单引号或双引号的引用中,因这两个符号在nginx配置文件中有特殊意义。 
    示例:
      location / {
        root /www/b.org;
        rewrite ^/images/(.*)$ /imgs/$1 last; 
        rewirte ^/imgs/(.*)$ /images/$1 last;
      }
    上述用法会造成nginx重复10轮循环,然后返回错误500,应将last换成break

rewrite_log on|off;
是否把重写过程记录在错误日志中,默认为off;若开启,默认为notice级别;

替换为的路径是”http://……”、”https://……”

server {
        listen 80;
        server_name www.test.com;
        root /var/www;

        location /test1.html {
                rewrite /test1.html http://192.168.0.106/test2.html;
        }
}



if

if指令用于根据指定条件是否满足,执行相关配置。

使用格式:if (condition) { ... }

使用范围:server段、location段

常用条件

条件 意义
变量名8 变量值为空或0时,表示“假”
=或!= 比较两变量相等或不等
~或!~ 正则表达式匹配或不匹配,区分大小写。如有“}”、“;”等字符,则需使用双引号或单引号引起来
~或!~ 同上,只是不区分大小写
-f或!-f 一个文件存在或不存在
-d或!-d 一个目录存在或不存在
-e或!-e 一个文件、目录、链接文件存在或不存在
-x或!-x 一个文件是否可执行
官方文档部分示例:

if ($request_method = POST) {                  # 请求方法是POST时,返回405
    return 405;
}

if ($slow) {                                   # 内置变量slow为真时,限速10k
    limit_rate 10k;
}

if ($invalid_referer) {                            # 内置变量invalid_referer为真(即referer请求首部非法),返回403
    return 403;
}
   if (condition) { ... }
    示例:
     if ($http_user_agent ~ MSIE) {
             rewrite ^(.*)$ /msie/$1 break;
          }
          if ($invalid_referer) {
             return 403;
          }


return

指令return表示停止当前处理,直接返回客户端。

使用格式:

return code [text]; # 返回指定状态码和原因短语(即状态码解释)
return code URL; # 返回指定状态码和一个URL。所以这个状态码一般指定为301、302等
return URL; # 直接返回一个URL,类似于重定向了

使用范围:server段、location段、if语句


6、查看nginx基本状态信息(http_stub_status_module,非标准模块,需在编译安装nginx时指定)
location /basic_status {
stub_status on;
}
技术分享图片
内容意义:
1、Active connections,活动状态的连接数。

活动状态包括:已经建立连接等待发送响应报文、服务端正在加载资源、正在发送响应报文等
活动状态连接数至少有1个,因为在访问status页面的一刻,访问status页面的连接就是处于活动状态
2、第三行的3数字分别为:服务端已经接受过的请求总数、已经处理完成的请求总数、客户端发来的请求总数。

3个数字统计的都是“已经发生过的”连接信息
第3个数字往往是最多的,因为它包含了客户端发来的所有请求数,包括服务器接受、处理的请求数,也包括未接受、或接受后拒绝处理的请求数(比如访问控制、请求方法限制等)
3、最后3数字分别为:reading为服务端正在读取请求报文首部的连接数;writing为服务端正在发送响应报文的连接数;waiting为服务端正在等待客户端发出请求的连接数(往往是长连接时间还没到,等待客户端下一个请求)。

3个数字统计的都是“正在发生的”连接信息。所以它们之和应等于Active connections




作为https服务端

同httpd配置https服务端类似,只是指令不同。单IP主机也是只能配置一个https服务端。
ngx_http_ssl_module模块也是不会默认装载,编译时需指定”–with-http_ssl_module”。

常用指令:

指令 意义
ssl on|off 指定是否启用ssl。类似httpd中的”ssl engine on|off”
ssl_certificate FILE 指定当前server使用的证书文件
ssl_certificate_key FILE 指定当前server使用的私钥文件
ssl_protocols 指定使用的ssl协议版本,一般使用默认即可
ssl_session_cache 指定是否启用ssl会话缓存。由于ssl会话比较消耗资源,所以可使用缓存把各密钥信息缓存下来,同一客户端再访问时可节约资源
ssl_session_timeout 指定ssl会话缓存的超时时长(虽然字面意思像是ssl会话超时时长),默认5分钟。
其他命令容易理解,主要说明下ssl_session_cache的各参数:

off:不使用ssl缓存,并明确告知客户端ssl会话不可重复用
none:“礼貌”地不使用ssl缓存,告知客户端ssl会话可重复用,实际不缓存会话参数。默认是none
builtin [:size]:openssl的内建缓存机制,每个worker进程独占一段内存空间作为缓存。
可指定大小,默认大小是20480条会话
这种机制会产生内存碎片,而且如果不同worker进程先后处理同一请求,先前worker进程缓存的内容就无法命中了。
shared [name:size],与builtin相对,shared表示各worker进程共享一段内存空间作为缓存。
使用shared,要指定缓存名称
可指定大小,以字节为单位。1M空间可缓存4000个会话
虽然shared和builtin可同时使用,比如ssl_session_cache builtin:1000 shared:SSL:10m,但单独使用shared效果更好(官网文档描述)。

以上是关于linux-nginx-2的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数