Nginx配置文件结构功能总结

举报
jcLee95 发表于 2024/07/07 11:43:45 2024/07/07
【摘要】 本文介绍了Nginx配置文件中的结构,简要介绍了各个主要部分的功能。
运维系列
Nginx配置文件结构功能总结

- 文章信息 -
Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/140242979
HuaWei:https://bbs.huaweicloud.cn/blogs/430555

【介绍】:本文介绍了Nginx配置文件中的结构,简要介绍了各个主要部分的功能。

在这里插入图片描述




Nginx是一款高性能的Web服务器和反向代理服务器,其强大的功能和灵活的配置主要依赖于其配置文件。Nginx配置文件的作用包括:

  1. 定义Nginx服务器的运行参数,如工作进程数、连接超时时间等。
  2. 配置Nginx服务器的网络设置,如监听端口、服务器名称等。
  3. 设置Nginx服务器的路由规则,控制请求的转发和处理。
  4. 配置Nginx服务器的缓存、压缩、安全等功能,优化性能和安全性。
  5. 实现负载均衡、反向代理等高级功能,提高应用的可扩展性和可用性。

Nginx配置文件是Nginx服务器的核心,通过灵活的配置,可以实现各种强大的功能,满足不同的应用需求。


Nginx的主配置文件是nginx.conf,其默认位置因操作系统而异:

  • Linux系统:

    • /etc/nginx/nginx.conf
    • /usr/local/nginx/conf/nginx.conf
  • Windows系统:

    • C:\nginx\conf\nginx.conf
  • macOS系统(通过Homebrew安装):

    • /usr/local/etc/nginx/nginx.conf

除了主配置文件,Nginx还允许使用include指令引入其他配置文件,以实现配置的模块化和复用。在实际应用中,可以根据需要将不同的配置划分到不同的文件中,提高配置的可读性和可维护性。



全局配置块位于nginx.conf文件的最顶层,包含影响Nginx服务器整体运行的配置指令。这些指令在Nginx启动时被解析,并应用于所有的模块。

以下表格列出了全局配置块中的主要指令:

指令 语法 作用 示例
user user user [group]; 指定Nginx工作进程运行的用户和用户组 user nginx;
worker_processes worker_processes number | auto; 定义Nginx启动的工作进程数 worker_processes auto;
error_log error_log file [level]; 指定错误日志文件的位置和日志级别 error_log /var/log/nginx/error.log warn;
pid pid file; 设置存储主进程ID的文件路径 pid /var/run/nginx.pid;
worker_rlimit_nofile worker_rlimit_nofile number; 设置工作进程可以打开的最大文件描述符数量 worker_rlimit_nofile 65535;
load_module load_module file; 动态加载Nginx模块 load_module modules/ngx_http_geoip_module.so;

全局配置块的示例:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;

load_module modules/ngx_http_geoip_module.so;

这些全局配置指令对Nginx的整体性能和行为有重要影响。下表总结了一些常见的配置建议:

指令 配置建议
worker_processes 通常设置为CPU核心数,或使用"auto"让Nginx自动检测
worker_rlimit_nofile 根据系统资源和预期并发连接数设置,通常设置较高值如65535
error_log 根据需要调整日志级别,生产环境通常使用"warn"或"error"

在实际配置时,应根据服务器硬件资源和具体应用需求来调整这些参数,以优化Nginx的资源使用,提高服务器的性能和稳定性。


events配置块用于配置Nginx的事件处理机制,影响Nginx处理连接的方式。它通常位于全局配置块之后,http配置块之前。

主要指令包括:

指令 语法 作用 示例
worker_connections worker_connections number; 设置每个工作进程的最大并发连接数 worker_connections 1024;
use use method; 指定事件驱动模型 use epoll;
multi_accept `multi_accept on off;` 是否一次接受多个新连接
accept_mutex `accept_mutex on off;` 是否开启负载均衡锁

一个events配置块示例如下:

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
    accept_mutex on;
}

配置说明:

  • worker_connections:根据服务器硬件资源和预期并发量设置。
  • use:在Linux系统上,推荐使用epoll。
  • multi_accept:开启可提高高并发下的性能,但可能增加系统负载。
  • accept_mutex:通常保持开启,可以减少工作进程之间的竞争。

http配置块是Nginx配置中最复杂和最重要的部分,包含了与HTTP服务相关的所有配置。


http {
    # 基本设置
    include       mime.types;
    default_type  application/octet-stream;

    # 日志设置
    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  /var/log/nginx/access.log  main;

    # 性能优化设置
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    types_hash_max_size 2048;

    # Gzip压缩
    gzip  on;
    gzip_disable "msie6";

    # 包含其他配置文件
    include /etc/nginx/conf.d/*.conf;

    # 服务器块
    server {
        # 服务器配置
    }
}

指令 作用 示例
include 包含其他配置文件 include mime.types;
default_type 设置默认的MIME类型 default_type application/octet-stream;
log_format 定义日志格式 log_format main '...';
access_log 设置访问日志的路径和格式 access_log /var/log/nginx/access.log main;
sendfile 启用sendfile系统调用来发送文件 sendfile on;
tcp_nopush 优化数据包的发送 tcp_nopush on;
tcp_nodelay 禁用Nagle算法 tcp_nodelay on;
keepalive_timeout 设置keep-alive连接的超时时间 keepalive_timeout 65;
types_hash_max_size 设置类型哈希表的最大大小 types_hash_max_size 2048;
gzip 启用gzip压缩 gzip on;

  1. 启用sendfiletcp_nopush以提高文件传输效率。
  2. 根据实际需求调整keepalive_timeout
  3. 合理配置Gzip压缩,可以显著减少传输数据量。
  4. 使用include指令分割配置文件,提高可维护性。

http配置块是Nginx配置的核心,其中包含了多个server块,每个server块定义了一个虚拟主机。在实际配置中,应根据具体需求调整这些参数,以优化服务器性能和资源利用。


mail配置块是Nginx的一个可选功能,用于配置Nginx作为邮件代理服务器。这个功能需要在编译Nginx时包含mail模块。mail配置块通常位于http配置块之后,与http配置块平级。


mail {
    server_name mail.example.com;
    auth_http localhost:8008/auth-smtp;

    server {
        listen     25;
        protocol   smtp;
        proxy      on;
    }

    server {
        listen     110;
        protocol   pop3;
        proxy      on;
    }

    server {
        listen     143;
        protocol   imap;
        proxy      on;
    }
}

指令 作用 示例
server_name 设置邮件服务器的名称 server_name mail.example.com;
auth_http 指定用于身份验证的HTTP服务器 auth_http localhost:8008/auth-smtp;
protocol 指定邮件协议(smtp, pop3, imap) protocol smtp;
proxy 启用邮件代理功能 proxy on;
proxy_pass 指定上游邮件服务器 proxy_pass 192.168.1.100:25;
ssl 启用SSL/TLS加密 ssl on;
starttls 启用STARTTLS命令支持 starttls on;

  1. 身份验证

    • auth_http指令指向一个HTTP服务器,用于验证用户身份。这个服务器需要自行实现。
  2. 协议支持

    • 可以为不同的邮件协议(SMTP POP3 IMAP)配置不同的server块。
  3. SSL/TLS加密

    • 建议为所有邮件服务启用SSL/TLS加密,以保护用户数据:

      server {
          listen     993 ssl;
          protocol   imap;
          ssl_certificate     /path/to/cert.pem;
          ssl_certificate_key /path/to/cert.key;
      }
      
  4. 上游服务器

    • 使用proxy_pass指定实际处理邮件的上游服务器:

      server {
          listen     25;
          protocol   smtp;
          proxy_pass 192.168.1.100:25;
      }
      
  5. 日志配置

    • 可以为邮件服务配置单独的访问日志:

      mail {
          access_log /var/log/nginx/mail.access.log;
      }
      

  1. 负载均衡Nginx可以作为邮件服务的前端代理,将请求分发到多个后端邮件服务器。

  2. SSL终止Nginx可以处理SSL/TLS加密,减轻后端服务器的负担。

  3. 协议转换:可以在客户端和服务器之间进行协议转换,例如将POP3转换为IMAP

  4. 安全过滤:可以集成第三方模块,实现垃圾邮件过滤等功能。


  • mail模块是可选的,需要在编译Nginx时明确包含。
  • 配置邮件服务需要考虑安全性,建议始终使用SSL/TLS加密。
  • 需要正确配置DNS记录(MX记录),以便邮件能够正确路由到Nginx服务器。

mail配置块使Nginx能够作为功能强大的邮件代理服务器,但其配置相对复杂,需要谨慎规划和测试。在大多数情况下,除非有特殊需求,否则通常会使用专门的邮件服务器软件(如PostfixDovecot等)来处理邮件服务。



Nginx配置文件中的指令遵循一定的语法规则,接下来将对这些语法规则展开介绍。


Nginx配置指令的基本语法结构如下:

指令名 参数1 参数2 ... 参数N;

注意事项:

  1. 每个指令都以分号(;)结尾。
  2. 指令名和参数之间,以及参数之间使用空格分隔。
  3. 指令对大小写敏感。

Nginx的指令可以在不同的上下文中使用,主要包括:

  • 主上下文(Main Context
  • events上下文
  • http上下文
  • server上下文
  • location上下文
  • mail上下文(如果启用)

某些指令只能在特定上下文中使用,而有些指令可以在多个上下文中使用。例如:

# 主上下文
user nginx;

http {
    # http上下文
    gzip on;

    server {
        # server上下文
        listen 80;

        location / {
            # location上下文
            root /usr/share/nginx/html;
        }
    }
}

子上下文会继承父上下文的配置,除非在子上下文中明确重写。例如:

http {
    gzip on;

    server {
        # 继承http上下文的gzip配置
        location /api/ {
            # 重写gzip配置
            gzip off;
        }
    }
}


listen指令用于配置服务器监听的IP地址和端口。

语法:

listen address[:port] [default_server] [ssl] [http2] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number];

参数说明:

  • address: IP地址,可以是具体IP*(表示所有地址)
  • port: 端口号,默认为80
  • default_server: 将此server块标记为默认服务器
  • ssl: 启用SSL/TLS
  • http2: 启用HTTP/2协议
  • proxy_protocol: 启用代理协议

示例:

listen 80;
listen 443 ssl http2;
listen 192.168.1.1:8080 default_server;

server_name指令用于设置虚拟主机的域名。

语法:

server_name name1 [name2 ...];

参数说明:

  • name:可以是精确的域名、通配符域名或正则表达式

示例:

server_name example.com www.example.com;
server_name *.example.com;
server_name ~^www\d+\.example\.com$;

location指令用于配置如何处理特定的URI。

语法:

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

参数说明:

  • =:精确匹配
  • ~:区分大小写的正则匹配
  • ~*:不区分大小写的正则匹配
  • ^~:前缀匹配,优先级高于正则匹配

示例:

location = / {
    # 精确匹配"/"
}

location ~* \.(gif|jpg|jpeg)$ {
    # 匹配以.gif、.jpg或.jpeg结尾的请求
}

location /documents/ {
    # 匹配以/documents/开头的请求
}

proxy_pass指令用于设置代理服务器的协议和地址。

语法:

proxy_pass URL;

参数说明:

  • URL:可以是HTTP(S)协议的URL,也可以是Unix域套接字路径

示例:

proxy_pass http://backend;
proxy_pass http://192.168.0.1:8080/api/;
proxy_pass unix:/tmp/backend.socket:/uri/;

fastcgi_pass指令用于设置FastCGI服务器的地址。

语法:

fastcgi_pass address;

参数说明:

  • address:可以是IP地址和端口,也可以是Unix域套接字路径

示例:

fastcgi_pass localhost:9000;
fastcgi_pass unix:/tmp/php-fpm.socket;

rootalias指令用于设置请求映射到服务器文件系统的路径。

语法:

root path;
alias path;

参数说明:

  • path:服务器上的文件系统路径

示例:

root /var/www/html;
alias /var/www/static/;

主要区别:

  • root会将完整的URI附加到指定路径后
  • alias只替换匹配的部分

index指令用于指定默认索引文件。

语法:

index file1 [file2 ...];

参数说明:

  • file:索引文件名

示例:

index index.html index.htm index.php;

这些是Nginx中一些常用指令的基本语法和参数说明。在实际配置中,可能还需要根据具体需求使用更多的指令和参数。理解这些基本语法和参数有助于更好地配置和优化Nginx服务器。


Nginx配置文件中的变量使用是一个强大的特性,它允许我们动态地处理请求和响应。变量可以用于日志格式重写规则条件判断等多个方面。

Nginx中的变量分为两大类:内置变量  自定义变量。接下来我们将使用讲个小节来对应介绍这两类变量的用法。


Nginx提供了大量的内置变量,这些变量包含了请求、响应、服务器等相关的信息。


以下是一些常用的内置变量:

变量名 描述
$request_method 请求方法(GETPOST等)
$request_uri 完整的原始请求URI
$uri 当前请求的URI(可能经过重写)
$query_string 请求的查询字符串
$remote_addr 客户端IP地址
$server_name 匹配上的服务器名
$server_port 服务器端口
$server_protocol 服务器的HTTP版本(HTTP/1.0HTTP/1.1等)
$http_user_agent 客户端User-Agent
$http_referer 请求的Referer
$request_time 请求处理时间,单位为秒,精确到毫秒
$status 响应状态码
$body_bytes_sent 发送给客户端的字节数,不包括响应头
$nginx_version Nginx版本

内置变量可以在多个Nginx指令中使用,例如:

  1. 在日志格式中:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
  1. 在条件判断中:
if ($request_method = POST) {
    return 405;
}
  1. 在重写规则中:
rewrite ^/old-page$ /new-page permanent;
  1. 在响应头中:
add_header X-Served-By $hostname;

除了内置变量,Nginx还允许我们定义和使用自定义变量,这为配置提供了更大的灵活性。


使用set指令可以定义自定义变量:

set $variable_name value;

例如:

set $mobile_rewrite do_not_perform;

if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {
    set $mobile_rewrite perform;
}

if ($mobile_rewrite = perform) {
    rewrite ^ /mobile$uri redirect;
}

自定义变量可以在配置文件的多个地方使用,包括:

  1. 在location块中:
location / {
    set $foo "bar";
    return 200 $foo;
}
  1. 在if语句中:
if ($request_uri ~* "^/special") {
    set $special_uri "true";
}

if ($special_uri = "true") {
    # 执行特殊处理
}
  1. 在rewrite指令中:
set $weekend "No";
if ($date_local ~ "Saturday|Sunday") {
    set $weekend "Yes";
}
rewrite ^/is-it-weekend /weekend.php?answer=$weekend last;

自定义变量的作用域通常是请求级别的,这意味着:

  • 每个请求都有自己的变量集合。
  • 变量在请求处理的整个生命周期内有效。
  • 不同请求之间的变量是相互独立的。

  1. 变量名区分大小写。
  2. 使用未定义的变量不会导致错误,而是返回空字符串。
  3. 某些模块(如ngx_http_rewrite_module)会在配置加载时评估变量,而不是在运行时。
  4. 过度使用变量可能会影响性能,特别是在高并发场景下。

  1. 根据客户端IP设置变量:
set $country "unknown";

if ($geoip_country_code = "US") {
    set $country "USA";
}

if ($geoip_country_code = "GB") {
    set $country "United Kingdom";
}

proxy_set_header X-Country $country;
  1. 根据时间设置缓存策略:
map $time_iso8601 $cache_expiry {
    default         1h;
    ~^2023-12-       5m;  # December 2023
    ~^2023-11-       15m; # November 2023
}

expires $cache_expiry;
  1. 动态设置上游服务器:
set $backend "default_backend";

if ($request_uri ~* ^/api/) {
    set $backend "api_backend";
}

if ($http_user_agent ~* "googlebot") {
    set $backend "bot_backend";
}

proxy_pass http://$backend;

通过灵活使用内置变量和自定义变量,我们可以创建更加动态和智能的Nginx配置,以适应各种复杂的场景和需求。


随着Nginx配置的复杂性增加,将配置文件模块化并实现配置的复用变得越来越重要。这不仅可以提高配置的可读性和可维护性,还能减少重复代码,降低错误率。本节将介绍如何使用include指令实现配置文件的模块化,以及如何组织和管理配置片段。


include指令是Nginx配置文件模块化的核心。它允许将其他配置文件包含到主配置文件中,从而实现配置的分割和复用。


include file | mask;
  • file:指定要包含的配置文件的路径。
  • mask:使用通配符指定要包含的多个配置文件。

  1. 分割主配置文件

    # 在nginx.conf中
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    
  2. 复用通用配置

    # 在server块中
    include /etc/nginx/snippets/ssl-params.conf;
    
  3. 按功能组织配置

    # 在http块中
    include /etc/nginx/mime.types;
    include /etc/nginx/proxy.conf;
    include /etc/nginx/fastcgi.conf;
    

  1. 路径可以是绝对路径或相对路径(相对于主配置文件)。
  2. 可以使用通配符(*)包含多个文件。
  3. 被包含的文件必须有正确的Nginx配置语法。
  4. 包含的顺序很重要,后面的配置可能会覆盖前面的配置。

合理组织和管理配置片段可以大大提高Nginx配置的可维护性。


  1. 全局配置:影响整个Nginx服务器的设置。
  2. HTTP配置:与HTTP服务相关的通用设置。
  3. 服务器配置:特定虚拟主机的配置。
  4. 位置配置:特定URI位置的处理规则。
  5. 功能模块:特定功能(如SSL、缓存、压缩等)的配置。

推荐的目录结构:

/etc/nginx/
├── nginx.conf
├── conf.d/
│   ├── default.conf
│   └── example.com.conf
├── snippets/
│   ├── ssl-params.conf
│   └── proxy-params.conf
├── sites-available/
│   ├── example.com
│   └── subdomain.example.com
└── sites-enabled/
    └── example.com -> ../sites-available/example.com
  • nginx.conf:主配置文件
  • conf.d/:存放额外的配置文件
  • snippets/:存放可复用的配置片段
  • sites-available/:存放所有的网站配置
  • sites-enabled/:存放已启用的网站配置(通常是符号链接)

  • 使用描述性的名称,如ssl-params.conf, php-fpm.conf
  • 对于网站配置,使用域名作为文件名,如example.com.conf
  • 使用一致的文件扩展名,通常是.conf

Nginx配置文件纳入版本控制系统(如Git)是一个好习惯:

  1. 跟踪配置的变更历史。
  2. 便于回滚到之前的配置。
  3. 便于团队协作和配置审查。

  1. SSL参数配置 (snippets/ssl-params.conf):

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    
  2. 代理参数配置 (snippets/proxy-params.conf):

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering on;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
    
  3. PHP-FPM配置 (snippets/php-fpm.conf):

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    
  4. 网站服务器配置 (sites-available/example.com):

    server {
        listen 80;
        server_name example.com www.example.com;
        root /var/www/example.com;
    
        include snippets/ssl-params.conf;
        include snippets/php-fpm.conf;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    }
    

  1. 保持主配置文件(nginx.conf)简洁,主要用于全局设置和包含其他配置文件。
  2. 将常用的配置片段(如SSL参数、代理设置)放在snippets目录中。
  3. 为每个网站创建单独的配置文件,放在sites-available目录中。
  4. 使用符号链接将启用的网站配置从sites-available链接到sites-enabled
  5. 使用include指令时,尽量指定完整的文件路径,避免使用过于宽泛的通配符。
  6. 定期审查和清理未使用的配置文件。
  7. 在应用新的配置之前,始终使用nginx -t命令检查配置的语法。

通过合理使用include指令和组织配置片段,可以使Nginx的配置更加模块化、可维护和可复用。这不仅可以提高配置的效率,还能减少错误,使得管理大型和复杂的Nginx部署变得更加容易。


Nginx配置文件的结构和组织对于有效管理和使用Web服务器十分重要。本文是一个总结,详细介绍了Nginx配置文件的各个方面,前面的内容主要包括以下几点:

  1. 配置文件的整体结构:介绍了全局配置块、events块、http块等主要组成部分,以及它们的作用和常用指令。

  2. 指令语法和参数:解释了Nginx配置指令的基本语法规则,以及一些常用指令的参数含义和使用方法。

  3. 变量使用:讨论了Nginx内置变量和自定义变量的使用,这为创建动态和灵活的配置提供了基础。

  4. 配置的模块化和复用:介绍了如何使用include指令实现配置的模块化,以及如何组织和管理配置片段,提高配置的可维护性。

希望这些总结对你有所帮助。


指令 描述
user 设置 Nginx 工作进程的用户
worker_processes 设置 Nginx 工作进程的数量
error_log 设置错误日志的路径和日志级别
pid 设置记录主进程 ID 的文件路径
events 用于配置事件模块
worker_connections 设置单个工作进程可以同时打开的最大连接数
http 包含 HTTP 服务器配置的主要块
server 定义虚拟主机
listen 指定服务器监听的 IP 地址和端口
server_name 设置虚拟主机的域名
root 设置请求的根目录
index 定义默认索引文件
location 用于匹配特定的 URI
proxy_pass 设置代理服务器的协议和地址
fastcgi_pass 设置 FastCGI 服务器的地址
access_log 设置访问日志的路径和格式
error_page 定义错误页面
client_max_body_size 设置客户端请求主体的最大允许大小
ssl_certificate 指定 SSL 证书文件路径
ssl_certificate_key 指定 SSL 证书私钥文件路径
include 包含其他配置文件
gzip 启用或禁用 gzip 压缩
upstream 定义一组服务器作为后端
try_files 按顺序检查文件是否存在
rewrite 重写 URI
return 停止处理并返回指定的代码给客户端
add_header 添加自定义 HTTP 响应头
allow 允许特定的 IP 地址或网段访问
deny 拒绝特定的 IP 地址或网段访问
limit_req 限制请求处理速率
limit_conn 限制连接数
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。