2024年Python最全综合架构web服务之nginx详解_综合架构web 服务nginx详解

  • 虚拟主机配置

在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器同时会配置N个虚拟域名主机,即多个域名对于同样一个80端口。然后服务器IP数量很多,也可以配置基于多个IP对应同一个端口。

  • 配置虚拟主机配置文件介绍
[root@web_server01/etc/nginx]# cd conf.d/
[root@web_server01/etc/nginx/conf.d]# cp default.conf{,.bak} #先备份配置文件

#过滤空格、# 开头的内容。(^$ 空格空格开头,^# #号开头、-v 取反)
[root@web_server01/etc/nginx/conf.d]# egrep -v "^$|#" default.conf.bak 
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
[root@web_server01/etc/nginx/conf.d]# egrep -v "^$|#" default.conf.bak > default.conf
[root@web_server01/etc/nginx/conf.d]# cat default.conf
server {
    listen       8080;         -----指定监听端口,原本80,这里我修改成8080(目的是为了做第一个简单的www网站)
    server_name  localhost;    ----指定网站域名
   
   location / {               ----通过指定模式来与客户端请求的URI相`匹配`
        root   /usr/share/nginx/html; ---- 定义站点目录的位置
        index  index.html index.htm;  ---- 定义首页文件
    }
    error_page   500 502 503 504  /50x.html;  ---- 优雅显示页面信息
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
[root@web_server01/etc/nginx/conf.d]# 

2.5.1利用nginx服务搭建一个网站(www)

前提是,你把/etc/nginx/conf.d/default.conf,80端口 修改成8080或其他端口。

否则看不到效果,每次看到的都是 默认欢迎界面

# 第一步:进入到虚拟主机配置文件目录
[root@web_server01~]# cd /etc/nginx/conf.d/
[root@web_server01/etc/nginx/conf.d]# ls
default.conf  default.conf.bak  www.conf
[root@web_server01/etc/nginx/conf.d]# vim www.conf
[root@web_server01/etc/nginx/conf.d]# cat www.conf 
server {
  listen        80;
  server_name   www.hbs.com;
  location  / {
           root   /usr/share/nginx/html;
           index  hbs.html;
}
}
[root@web_server01/etc/nginx/conf.d]# 

第二个历程: 需要获取开发人员编写的网站代码

# 这里自己写一个测试网页

[root@web_server01/etc/nginx/conf.d]# cd /usr/share/nginx/html/
[root@web_server01/usr/share/nginx/html]# cat hbs.html 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我的第一个html</title>
</head>
<body>
<h1>大家好!我是黄昏</h1>
<p>nginx配置的第一个简单的html</p>
</body>
</html>
[root@web_server01/usr/share/nginx/html]# ls
50x.html  hbs.html  index.html

第三个历程: 重启nginx服务

第三个历程: 重启nginx服务(平滑重启)
	两种方法:
	systemctl reload nginx 
	nginx -s reload
	
	nginx命令参数
	-t            : test configuration and exit
	                检查测试配置文件语法
	-s            : send signal to a master process: stop, quit, reopen, reload
	                控制服务停止或者重新启动

第四个历程: 编写DNS配置信息

第四个历程: 编写DNS配置信息
真实域名: 在阿里云上进行DNS解析记录配置
	模拟域名: 在windows主机的hosts文件中进行配置即可
	          C:\Windows\System32\drivers\etc\hosts
	          10.0.0.7  www.hbs.com  hosts文件末尾添加Ip 域名

第五个历程: 进行测试访问

第五个历程: 进行测试访问
	浏览器中: http://www.oldboy.com

  • 在这里插入图片描述
2.5.2 location介绍、location 访问控制及 优雅404显示
  • location 介绍:
允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能

= 精确匹配
location = /hbs 

~ 正则表达式,区分大消息
location ~ ^/hbs$
 
~* 不区分大小写
location ~* ^/hbs$ 
匹配顺序:
带有=的精确匹配优先
正则表达式按照他们在配置文件中定义的顺序
带有^~修饰符的,开头匹配

  • 在这里插入图片描述
  • location 访问控制
用于location段
allow:设定允许哪台或哪些主机访问,多个参数间用空格隔开
deny:设定禁止哪台或哪些主机访问,多个参数间用空格隔开
示例:

allow 192.168.1.1/32 172.16.0.0/16;
deny all;

# 放行了10.0.0.81/32 172.16.0.0/16,拒绝了其它ip地址
location  /hbs {
                 root   /usr/share/nginx/html;
                 index  hbs.html;
                 allow 10.0.0.81/32 172.16.0.0/16
                 deny all
    }

  • 在这里插入图片描述
  • 在这里插入图片描述
  • 补充:访问策略配置写法
 写法1:
 server {
         listen        80;
         server_name   www.hbs.com;
           root  /html/www;
           index index.html;
         location /AV {
           deny  10.0.0.0/24;
           allow 172.16.1.0/24;
         }
      }
 
 写法2:
 server {
         listen        80;
         server_name   www.hbs.com;
         location / {
           root  /html/www;
           index index.html;
         }
         location /AV {
           deny  10.0.0.0/24;
           allow 172.16.1.0/24;
           root  /html/www;
           index index.html;
         }
      }
      补充: 
	  location外面的信息, 全局配置信息
	  location里面的信息, 局部配置信息

  • 优雅界面404 显示


2.5.3 利用nginx服务搭建一个多网站(www、 love、 blog)
  • 第一步:创建三个配置文件
[root@web_server01/etc/nginx/conf.d]# ls
bbs.conf  blog.conf  default.conf  default.conf.bak  www.conf
# www.conf 配置文件
[root@web_server01/etc/nginx/conf.d]# cat www.conf 
server {
   listen      80;
   server_name  www.hbs.com;
   location / {
       root   /usr/share/nginx/html/www;
       index  index.html;
   }
}

# bbs.conf 配置文件
[root@web_server01/etc/nginx/conf.d]# cat bbs.conf 
server {
    listen        80;
    server_name   bbs.hbs.com;
    location  / {
       root   /usr/share/nginx/html/bbs;
       index  index.html;
    }
}

# blog.conf 配置文件
[root@web_server01/etc/nginx/conf.d]# cat blog.conf 
server {
   listen        80;
   server_name   blog.hbs.com;
   location  / {
       root   /usr/share/nginx/html/blog;
       index  index.html;
    }
}
[root@web_server01/etc/nginx/conf.d]# 

  • 第二步:创建站点目录和目录中首页文件
# 常见站点目录
[root@web_server01~]# mkdir -p /usr/share/nginx/html/{www,bbs,blog}

# 创建站点首页文件
[root@web_server01/usr/share/nginx/html]# ls
50x.html  bbs  blog  index.html  www
[root@web_server01/usr/share/nginx/html]# cat www/index.html 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>我的第一个html</title>
</head>
<body>
    <h1>大家好!我是黄昏</h1>
    <p>10.0.0.7 www.hbs.com</p>
</body>
</html>
……
# 重启 nginx
[root@web_server01~]# systemctl stop nginx
[root@web_server01~]# systemctl start nginx

  • 添加hosts 文件:
  • 在这里插入图片描述
  • 测试
  • 在这里插入图片描述
2.5.4 企业中虚拟主机 访问方式
  • 基于域名的方式方式进行访问
  • 基于地址的方式进行访问(只能用指定地址访问)—负载均衡+高可用服务
	  server {
         listen        10.0.0.7:80;   # 填写地址
         server_name   www.hbs.com;
         location  / {
           root  /html/www;
           index index.html;
         }
      }
      
 配置完毕了,需要关闭/重启nginx

  • 基于端口的方式进行访问:(zabbix服务(apache:80) + web服务(nginx:80) --> 2个端口重复)
# 修改端口

[root@web_server01/etc/nginx/conf.d]# cat www.conf 
server {
   listen      8080;
   server_name  www.hbs.com;
   location / {
       root   /usr/share/nginx/html/www;
       index  index.html;
   }
}
[root@web_server01/etc/nginx/conf.d]# 

[root@web_server01/etc/nginx/conf.d]# systemctl restart nginx
[root@web_server01/etc/nginx/conf.d]# netstat -lntup|grep 80
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      38784/nginx: master 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      38784/nginx: master 
[root@web_server01/etc/nginx/conf.d]# 


  • 在这里插入图片描述
2.5.5 基于 用户访问 认证
  • nginx认证模块: ngx_http_auth_basic_module
  • 举例配置
  location / {
         auth_basic           "closed site";    --- 开启认证功能(欢迎信息)
         auth_basic_user_file conf/htpasswd;    --- 加载用户密码文件,密码文件存放路径
      }
      密码文件存放路径,推荐相对路径

  • 具体详细配置过程

第一个历程: 编写虚拟主机配置文件

[root@web_server01/etc/nginx]# cat conf.d/www.conf 
server {
  listen      80;
  server_name  www.hbs.com;
  location / {
      root   /usr/share/nginx/html/www;
      index  index.html;
      auth_basic   "欢迎来到王者荣耀!";
      auth_basic_user_file  passwd/passwd;        #passwd目录下的passwd密码文件
  }
}

第二个历程: 创建密码文件(文件中密码信息必须是密文的)

# 创建 一个目录,存放密码文件
[root@web_server01/etc/nginx]# mkdir passwd

# 检查是否有htpasswd 密码工具,没有yum 安装httpd-tools
[root@web_server01/etc/nginx/passwd]# rpm -qf `which htpasswd` 
httpd-tools-2.4.6-97.el7.centos.x86_64
[root@web_server01/etc/nginx/passwd]# 

# 生成密码文件
[root@web_server01/etc/nginx/passwd]# htpasswd -bc passwd hbs 123456
Adding password for user hbs
[root@web_server01/etc/nginx/passwd]# cat passwd 
hbs:$apr1$7WaamHGp$ENgUQ2yncebNZpFtGbRyX.
[root@web_server01/etc/nginx/passwd]#

# 查看生成的用户及密码
[root@web_server01/etc/nginx/passwd]# cat passwd 
hbs:$apr1$7WaamHGp$ENgUQ2yncebNZpFtGbRyX.
[root@web_server01/etc/nginx/passwd]# 

这样就可以直接测试,但是由于这样的密码文件具有较高的权限,不安全,所以涉及到修改密码文件,及文件属主。如果不修改文件权限,则不安全。

  • 测试
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 修改文件权限
[root@web_server01/etc/nginx/passwd]# chmod 600 ./passwd

  • 测试
  • 在这里插入图片描述
  • 报500问题原因
  • 在这里插入图片描述
  • 解决问题方法
[root@web_server01/etc/nginx/passwd]# chown nginx ./passwd

  • 测试
  • 在这里插入图片描述
2.5.6 利用nginx服务搭建网站文件共享服务器–index of
  • 文件共享

如何利用nginx服务搭建文件共享呢,比如像 阿里镜像网站那样,输入域名就可以看到很多目录,打开还可以 下载呢

  • 在这里插入图片描述
  • 操作步骤

第一个步: 编写配置文件(开启autoindex模块)

server {
  listen      80;
  server_name  www.hbs.com;
  location / {
      root   /usr/share/nginx/html/www;
      auth_basic   "欢迎来到王者荣耀!";
      auth_basic_user_file  passwd/passwd;
      autoindex on;                  # 开启autoindex 模块即可。
  }
}

第二步:重启服务,如果有首页,将首页删除并制造测试数据

# 准备好的测试数据
[root@web_server01/usr/share/nginx/html/www]# ls
Centos  Centos6.5  Centos6.9  Centos7.1  Centos7.2  hbs.txt  index.html.backup

# 重启nginx 服务
[root@web_server01/usr/share/nginx/html/www]# systemctl restart nginx

此时测试,我们只有查看的权限,如果想下载,还学要修改mime.types文件。

mime.types媒体资源类型文件作用
文件中有的扩展名信息资源, 进行访问时会直接看到数据信息 txt
文件中没有的扩展名信息资源, 进行访问时会直接下载资源 php

  • 在这里插入图片描述
  • 赋予下载权限,修改mime.types 配置文件
修改 mime.types配置文件,搜索txt,将txt 改成php 就可以下载了。

  • 在这里插入图片描述
  • 测试
  • 在这里插入图片描述
2.5.7 nginx 解决首页乱码问题
  • 设置成utf-8
server {
   listen      80;
   server_name  www.hbs.com;
   location / {
       root   /usr/share/nginx/html/www;
       auth_basic   "欢迎来到王者荣耀!";
       auth_basic_user_file  passwd/passwd;
       charset utf-8;                  
   }
}

location 添加 charset utf-8; 

2.5.8 利用nginx服务搭配置文件别名功能
  • 配置别名

这里就是比如你的域名很长,你想配置短一点的域名例如:

www.hbs.com 你配一个 bs.com的别名

1.修改配置文件

server_name www.hbs.com bs.com

2.重启nginx 服务

[root@web_server01/etc/nginx]# systemctl restart nginx

3.修改hosts 文件

  • 在这里插入图片描述
  • 在这里插入图片描述
2.5.9 利用nginx状态模块功能对网站进行监控
  • 开启监控模块ngx_http_stub_status_module
location = /basic_status {
        stub_status;
    }
===========================
这里我在 conf.d 目录新建了一个关于状态的站点 status.conf
[root@web_server01/etc/nginx/conf.d]# cat status.conf 
  server {
     listen    80;
     server_name  status.oldboy.com
     stub_status;
}

# 平滑启动nginx
[root@web_server01/etc/nginx/conf.d]# systemctl reload nginx

添加hosts 域名

  • 访问测试
  • 在这里插入图片描述

监控获取参数说明

​ Active connections: 激活的连接数信息 4000用户 3500
​ accepts: 接收的连接数汇总(综合) TCP
​ handled: 处理的连接数汇总(综合) TCP
​ requests: 总计的请求数量 HTTP协议请求
​ Reading: nginx服务读取请求报文的数量 100人点餐
​ Writing: nginx服务响应报文信息数量 100人响应
​ Waiting: nginx队列机制,要处理(读取或者响应保存进行保存) 监控

2.5.10 nginx 日志功能配置及错误日志介绍
  • 访问日志/var/log/nginx/access.log ngx_http_log_module
  • 错误日志/var/log/nginx/error.log --- Core functionality

访问日志介绍

# 定义日志内容格式
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;    #调用日志格式                            

$remote_addr   			    显示用户访问源IP地址信息
   $remote_user            显示认证的用户名信息
[$time_local]           显示访问网站时间
"$request"              请求报文的请求行信息
   $status                 用户访问网站状态码信息
$body_bytes_sent        显示响应的数据尺寸信息
$http_referer           记录调用网站资源的连接地址信息(防止用户盗链)                    
www.hbs.com---access.log--->blog.hbs.com到www.hbs.com的连接--->http_referer(链接)
$http_user_agent        记录用户使用什么客户端软件进行访问页面的  (谷歌 火狐 IE 安卓 iphone)
$http_x_forwarded_for   负载均衡

[root@web_server01/var/log/nginx]# tail -f /var/log/nginx/www_access.log 
10.0.0.129 - - [02/Sep/2021:17:52:41 +0800] "GET / HTTP/1.1" 401 179 "-" "Mozilla/5.0 (Windows NT 6.1; rv:91.0) Gecko/20100101 Firefox/91.0" "-"

错误日志的配置及 错误级别

Syntax: error_log file [level]; 指定错误日志路径以及错误日志记录的级别
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location

error_log /var/log/nginx/error.log warn;
错误级别:
debug :通知级别: 更加重要的信息进行通知说明
warn :警告级别: 可能出现了一些错误信息,但不影响服务运行
error :错误级别: 服务运行已经出现了错误,需要进行纠正 推荐选择
crit :严重级别: 必须进行修改调整
alert :严重警告级别: 即警告,而且必须进行错误修改
emerg :灾难级别: 服务已经不能正常运行 信息越少

级别越低,显示日志越少,级别越高显示日志越多。通常推荐 error 级别。

  • 不同的网站都配置自己的访问日志
server {
   listen      80;
   server_name  www.hbs.com bs.com;
   access_log  /var/log/nginx/www_access.log  main;  #调用日志  
   location / {
       root   /usr/share/nginx/html/www;
       auth_basic   "欢迎来到王者荣耀!";
       auth_basic_user_file  passwd/passwd;
#       autoindex on;
   }
}
# 平滑重启
[root@web_server01/etc/nginx]# systemctl restart nginx 

# 日志里会自动生成 www访问日志
[root@web_server01/var/log/nginx]# ls /var/log/nginx/www_access.log 
/var/log/nginx/www_access.log
[root@web_server01/var/log/nginx]# 

2.5.11 利用nginx实现页面跳转功能
  • 利用rewrite模块是跳转功能: http_rewrite_module
  • 语法
Syntax:	rewrite regex replacement [flag];   rewite  匹配的正则信息  替换成什么信息
Default:	—
Context:	server, location, if

  • 举例配置(将hbs.com—>转换到blog.hbs.com)
rewrite blog.hbs.com/(.*) http://blog.hbs.com/$1 permanent;   #重写规则配置


baidu.com   /  index.html       跳转方式
www.baidu.com/index.html
跳转方式:
	永久跳转:  permanent   301    会将跳转信息进项缓存
	临时跳转:  redirect    302    不会缓存跳转信息
	
编写步骤
出现无限跳转如何解决:
	第一种方法: 利用不同server区块配置打破循环
	server {
	   server_name  hbs.com;
	   rewrite ^/(.*) http://blog.hbs.com/$1 permanent;
	}
	
	第二种方法: 利用if判断实现打破循环
	if ($host ~* "^hbs.com$") {
      rewrite ^/(.*) http://blog.hbs.com/$1 permanent;
    }


  • 在这里插入图片描述
  • 在这里插入图片描述
  • 301 与302 的区别
  • 在这里插入图片描述
2.5.12 nginx 防盗链配置介绍
  • 什么是防盗链

防盗链的含义:网站内容部署自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。

这样的话,我们会看到每天访问量很大,占用很多不必要的带宽,浪费资源,所以我们需要做一些限制。

防盗链其实就是采用服务器端编程,通过url过滤技术实现的防止盗链的软件。

  • 防盗链配置
Nginx server防盗链配置如下:
server {
        listen       80;
        server_name  localhost  www.hbs.com;
        location / {
            root   /usr/share/nginx/html/www;
            index  index.html index.htm;
        }
        location ~* \.(gif|jpg|png|swf|flv)$ {
                valid_referers  none  blocked  *.hbs.com;
                root   html;
        if ($invalid\_referer) {
                  return 403;
                }
        }

    }


补充:
第一行:gif|jpg|png|swf|flv表示对gif、jpg、png、swf、flv后缀的文件实行防盗链

第二行:hbs.com  表示对hbs.com这个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到错误页面,当然直接返回403也是可以。
或者如下设置也可以:

location ~* \.(gif|jpg|png|swf|flv)$
if ($host  !=’*.hbs.com’) {
return 403;
}


2.5.13 部署搭建网站常见错误
  • 01.网站服务配置文件编写不正确
404 错误
		解决方法一: 修改nginx配置文件---location
		解决方法二: 在站点目录中创建相应目录或文件数据信息
403 错误
		解决方法一: 不要禁止访问
		解决方法二: 因为没有首页文件
    

  • 02.DNS信息配置不正确
  • 03. nginx配置文件修改一定要重启服务;
  • 04.做实验,要清除浏览器缓存

三、nginx 性能优化

3.1 Nginx 性能优化实战
  • 优化说明

随着访问量的不断增加,需要对Nginx和内核做相应的优化来满足高并发用户的访问,那下面在单台Nginx服务器来优化相关参数。通常从配置文件及内核做优化。

3.1.1 配置文件优化介绍
  • 配置文件优化
# nginx进程数,建议按照cpu核数目来指定,一般为它的2倍。
worker_processes 8;

# 为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一
个进程分配到多个cpu。
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 
00100000 01000000 10000000;

# 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打
开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀
,所以最好与ulimit -n的值保持一致。
worker_rlimit_nofile 102400;


# 使用epoll的I/O模型。epoll是Linux内核为处理大批量文件描述符而作了改进的
poll,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用
率。
use epoll;

# 每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为
worker_connections 102400;

# keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后
keepalive_timeout 60;
继请求时,keepalive-timeout功能可避免建立或重新建立连接。

# 客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
client_header_buffer_size 4k;

#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开
文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=102400 inactive=20s;

# 这个是指多长时间检查一次缓存的有效信息。
open_file_cache_valid 30s;



**(1)Python所有方向的学习路线(新版)**  

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。



![在这里插入图片描述](https://img-blog.csdnimg.cn/1f807758e039481fa866130abf71d796.png#pic_center)



**(2)Python学习视频**



包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

![在这里插入图片描述](https://img-blog.csdnimg.cn/d66e3ad5592f4cdcb197de0dc0438ec5.png#pic_center)



**(3)100多个练手项目**

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

![在这里插入图片描述](https://img-blog.csdnimg.cn/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值