httpd/php/mysql的安装-1

rely:  依赖: relier, reliance , reliable : i don't think he is a reliable man . we must lay stress on (强调) self reliance(自力更生)

comment out 注释掉, present: 目前的; 在场的,出席的(这个时候要放在被修饰的名词后面: the people present are students)

files are processed in alphabetical order.

-----------------------------------------------------------------------

apache server就是httpd,

httpd包括:

一部分:  sysconfig/httpd是用来配置httpd service这个服务的

二部分: /etc/httpd/: httpd.conf文件, conf.d目录

三部分: 实体文件/var下的: /var/run/httpd.pid, /var/log/httpd/access_log, error_log, 和/var/www/html+error+icons+cgi_bin

 

=================================/bin/bash 编程

在c/c++编程中, 通常用大括号来表示代码块, 但是还有很多语言, 不是用{ } 来表示的, 而是用 对应的/ 对称的 关键字 对来表示 大括号{  }

  如  if:        if [ -f  /path/somefile  -a -z "${xxx:--}"  -a  -f /path/somefile ] ; then      ## bash脚本中的字符串要用双引号引起来, 但是如果不是字符串, 如表示目录, 文件等等, 就不能加引号

        ....................        

        fi     这里就是用then ....fi 来表示 { ... }

   循环语句:  

    for:     for var in  collections   ;  do

        ................. #在循环体中引用var变量,要用$var. 

        done     这里就是用do  ..  ..  done  来表示 { ... }

 

    while:   while  [ condition...]  ;do

      ......................

          done  这里就是用do ....done 来表示 { ... }

注意和c的区别:    bash中,  && || 不是用来表示条件的关系, 而是表示:  if ....then  fi,  或   if... else.....fi

        要表示条件的  "与"   " 或",  要用  -a  ,  -r 

 

安装服务器今后一般都不用窗体,为了方便,可以装虚拟机vmware

ssh: secure shell (安全都远程shell)

/etc/xinted服务“托管”了一些服务, 要启动这些“托管“的服务, 先要把服务放在/etc/xinetd.d/下, 然后 启动xinetd服务,再启动该服务

chkconfig类似于windows的service一样, 系统 服务=自启动服务都是由chkconfig管理/注册的:

chkconfig --add/添加注册, --delete/删除某个注册都服务,  --list/列出服务,  --level 35 name ...

要将某个程序注册为系统服务?

because 自定义安装/编译安装的apache并没有注册为服务

1. 将程序控制脚本拷贝到/etc/rc.d/init.d目录下

2. 在脚本中添加:

    #chkconfig 35 70 30                    35是启动级别, 70时S priority, 30是K priority.

    # description some-service-name      这个也是必须的,原则上内容可以是任意的, 管理服务/启动服务/停止服务等等都是通过脚本名称而不是这个描述来使用的!

3. 添加/注册服务:

    $ chkconfig  --add service-name   

4. 那么这个时候, 就可以用: service serv-name start/stop来管理, 如果要配置自启动:  chkconfig serv-name on/off.

 

实际上按照上面的方法配置时,出现提示:

service httpd does not support chkconfig 为什么呢? 原来仔细看上面的几行的写法中是错误的, 漏掉了冒号: 也就是说, 后面的冒号是不能没有的!

# chkconfig: -  85  15      //#不能省略,注意空格
# description: Apache is a World Wide Web server.  It is used to serve \   //description:后可任意字符串

修改后就成功的注册为服务了!

 

iptables的配置文件: /etc/sysconfig/ iptables....

 

 -----------------------------------------------------------

1.  编译安装apache:

  下载apache-version...tar.gz

  解压后, ./configure --prefix=/usr/local/apache --enable-module=so

    make && make install

  安装后的启动脚本: /usr/local/apache/bin/apachectl start  .

 2.   如果是规模较大公司,拥有50台+ ,或者几百台 server,建议你保持原样或者用 red Hat Enterprise ,

    redhat是所以linux发行版中,对驱动兼容性测试做的最好的发行版,毕竟是商业公司,保持原样是 不折腾。

  几十台服务器的系统一般都是固定用途,需要配置的软件就那么几种,装好一台之后,写脚本批量装其他的即可,自己在局域网配置一个PXE,上新机也 最容易
  如果是个人站长,1-10台server,或者就是vps,ubuntu是最好的选择,折腾方便,不用全世界找依赖包,小内存的vps 一定要用32位ubuntu省电省内    存,ubuntu自带的apt source在墙外网速非常快,在国内,网易,sohu都提供了mirror,安装软件飞快
  centos不比redhat好,debian也 不比ubuntu酷.从知道linux开始,我用过 redhat,centos,mandrake,debian,ubuntu,suse,fedora ,启蒙版本是  没有声卡驱动的 幸福linux 1.0,以上redhat和ubuntu两种是我的选择,大家没必要在这个发行版上折腾,或者纠结,省事最重要
  所有跑过的server里面,就遇到一次出现了满屏内核错误,这个是一台跑php+nginx的网游后端服务器,os是 fedora,从此对这个发行版敬而远之。

 3. vps

    注意和vpn相联系和区别: vpn: virtual private network, 而vps: 是虚拟专用服务器, virtual private server.  

  VPS服务器是一种介于 传统虚拟主机独立主机之间的特殊服务器托管技 术,它通过特殊的服务器管理技术(就 是装一个vm 而已),
  把一台大型Internet主机虚拟化成多个 具有独立IP地址(有利于搜索引擎)的服务器系统,这些系统无论从性能、安全及扩展性上同独立服务器没有实质性的差  别,而费用仅相当于租用独立服 务器的1/4或1/5,并且无须额外支出后续的硬件维护管理成本 。
 
  做一个形象的比喻:采用虚拟主机的企业就象住进了集体宿舍(所有的操作系统/系统软件等环境都是一样的, 而且多个网站之间是贡献cpu和内存的,   如同一个操作系统下的, 多个程序,多个进程一样),虽然拥有自己 的床位,却无法避免由于过度拥挤而带来的困扰;
 
  而采用VPS服务器的企业就好比住进了独立的单元(一幢单元楼的某一套房子),虽然与其他单元的住户仍旧共享一些重要的公用设施 (CPU和总线) ,    但安全性和方便程度已经大大地改善了。

 虚拟主机和vps的区别?

  VPS就是一个服务器上装了一个VM软件,在这个软件里,可以虚拟出好多个系统,每个系统可以装不同的系统和软件环境,可以当成一个小的独立系统来用。

  而虚拟主机就是指在一台服务器上用软件将这台服务器分成许多个空间单独来出售,而这些空间的软件环境都是一样的"一般比如: apache,iis

下的虚拟目录而已.

  虚拟主机使用的是同一个ip地址

  如apache下 , 是通过<Directory  "/path/to/virutal/host/dirname">...... </directory> 来实现的

 

 

    apache下的httpd.conf配置文件,对其中虚拟目录的配置:

        <Directory   /> ..........</Directory>

        <Directory   /virtualdir1>  ...............</Directory>

           <Directory   /virtualdir2>  ...............</Directory>

 

virtualzzo?

  密度  与其他的虚拟化技术相比,Parallels Virtuozzo在单台物理服务器(硬件节点)上可获得超过3倍的虚拟服务器数量。
  最佳的易管理特性   全球唯一的在增加虚拟服务器数量同时降低操作系统复杂增长(OS sprawl)的虚拟化解决方案。
       do you sprawl or curl up.   the garden sprawls with lush vegetation. 覆盖植被
  原始服务器性能  虚拟服务器接近原始物理服务器性能,整合性能敏感负载后不会有性能损失困扰。
  高可靠性  优化整体虚拟IT基础架构的在线时间以确保业务连续性。
  成熟的技术  Parallels Virtuozzo已经成功部署在超过10,000台物理服务器上,始终如一地为客户提供超水平的隔离、安全和稳定性等性能。
 
 
deflate是一种压缩协议,在firefox f12中的console->net中可以看到Request header和 Response header中可以看到firefox支持的解压协议为:gzip和deflate.
apache/httpd 的配置选项?
主要是三个方面的配置:   安装路径--prefix=...;  可选的额外包: --with-included-apr;   启用的模块 --enable...
  ./configure --prefix=/usr/local/apache2/ --sysconfdir=/usr/local/apache2/etc/  --with-included-apr --enable-dav  --enable-so --enable-deflate=shared(这个shared表示动态支持) --enable-expires=shared(支持缓存) --enable-rewrite=shared(支持地址重写)
--with-included-apr   就等于: --with-apr=path, --with-apr-util=path两个的结合
--enable-dav:   启用webdav, 同时也启用 --enable-dav-fs.
具体的可以看./configure help, 其实大部分配置采用默认的配置就可以满足了, 如prefix的配置...
 
 
编译apache错误的时候, 可能是 gcc编译器组件没有安装完整....
所以需要:  重新"完整安装" gcc    yum -y install gcc*
      或: 在今后删除包的时候, 不要用yum erase a-package-name. 因为它会删除所依赖的包, 而这些包可能是为其他程序所依赖所需要的!
 
最好不要用restart命令, 而要用: 重新加载httpd的配置文件: reread configuration file:  pkill -HUP httpd:  pkill 后面跟进程名称, kill 后面跟进程id.
 
下载apache的官网地址: http://apache.fayea.com/httpd/ 现在的版本是: 2.4.17.tar.gz..
 数据库是web应用数据的基石,所以数据库很多都用base来命名,如hbase.  your reverses begin. (厄运, 失败)
 
 32位和64位不再纠结?
64位对硬件(cpu主板显卡等等)和内存的要求比较高, 如果你的硬件好, 目的: 要发挥硬件的优势, 就装64位的,可以支持128G内存?
通常情况下, 就装32位:  因为你的机子通常情况下不会太高, 一般你也没有4GB内存, 而且64位系统(windows)本身比较吃内存, 所以通常情况下不用考虑...
32位机子通常最多显示3.25GB的内存.???
 
红帽服务器最新版7.0, 需要企业邮箱才能下载? 只提供x86_64位镜像下载
redhat 7.1, 文件系统从ext4升级 到xfs, 最大可管理:500TB硬盘(ext4=50TB), 包含的docker container虚拟机可以到达接近裸机的水平?
 the docker's strike tied up the port.
 
rpm包安装的apache的配置文件: /etc/httpd/conf/httpd.conf
通常选择源码包安装! 更精简
 
通常apache的配置包括三个方面:
-全局配置
-容器/目录配置
-虚拟主机的配置.
 
对httpd的配置选项, 还是要记住一些最主要的条目:
  配置项的格式:  CapitalName   "/etc/httpd"
  :  配置名称是每个单词的首字母大写, 中间是空格, 不是等于号, 后面的value值有两种类 型,一种是字符串(有时候也没有加引号"?!),  一种是数值(包括结果为数值的表达式)
  :           数值都不要加引号! ...  如:  PidFile   run/httpd.pid
 ------------------------------------------------------------------------以上是apache全局配置
  ServerRoot  "/etc/httpd"
  PidFile     run/httpd.pid
  Timeout    120
  KeepA'live   off
....
 
  <IfModule prefork.c>
    startservers  8 < 是指8个 进程>
    MinSpareServers  5
    MaxSpareServers  20
    .....
  </IfModule>
  Listen  80
  LoadModule......
  Include ...包含的额外配置文件
  User  apache                        // 默认httpd进程的启动者是apache, 因此要让apache能够访问某些目录和文件的时候, 要让apache用户有权限
  Group apache
  DocumentRoot  "/var/www/html"
  
----------------- apache 个人主页
  http://localhost/~user/index.html
  <IfModule mod_UserDir.c>
     #UserDir  disable
      UserDir   public_html    // 在用户家目录下创建public_html. 并设只权限chmod 711
  </IfModule>
  
  ------------------------------------------------------------------------以上是apache全局配置
下面是一些容器目录的配置:
  <Directory "/var/www/html">
    Options   Indexes(是否允许没有index文件时列出目录> FollowSynLinks
    AllowOverride None/All (是否允许.htaceess文件重载主全局配置>
     Order allow, deny (访问控制)
    Allow from all
    Deny from 192.168.1.10
  </Directory>
 
什么时候需要重启httpd服务?
  凡是, 只有在修改httpd.conf   主配置文件后, 才需要重启httpd服务.
 
 
 基于用户的目录访问密码控制:
  <Directory "/var/www/html/private">
     AuthName "Auth:"
     AuthType Basic
     AuthParseFile  "/var/www/.htpw"   (这是验证文件, 里面存放着验证的用户名和密码>
     Require  valid-user
  </Directory>
    : 在/var/www/下:  htpasswd -c  .htpw  username "
 
  虚拟主机的配置?
   1. 虚拟主机VirutalHost 不等于对 "目录容器"的配置
   2. 启用虚拟主机:   命令(基于name的虚拟主机):    NameVirtualHost    *:80
   3. 配置虚拟主机:
     <VirtualHost *: 80>  
      DocumentRoot    /var/sina
      ServerName  www.sina.com (简单都域名解析就用/etc/hosts文件就可以).
    </VirtualHost>
 
  ----------------------------------------------------
rpm包安装httpd的目录结构:
  服务器的根: ServerRoot  /etc/httpd/
    下面: conf/ ,   conf.d 
        logs -> /var/log/httpd/
        modules-> /usr/lib/httpd/modules
        run->/var/run/httpd/    (run下面都是pid进程id文件)
 
两个命令cat和tee?
 cat有一个好的参数: -n,  给输出行编号:  number all output lines
tee =T , 同时将前面的输出重定向到文件和标准输出台.通常用于: ls / rpm/ 等打印输出命令 | tee  output.txt | less /more/ cat -n
tree显示文件系统目录树, 这个命令默认没有安装, 需要自己安装.
 
 APR: apache portable run-time-libraries
APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以
跨越多操作系统平台使用的底层支持接口库
APR-util在apr的基础上提供了更多的数据结构和操作系统接口.

apr-util和apr都是为上层应用提供的运行库。为没有stl库的C语言提供了一些数据结构和操作系统封装接口。显然apache的许多软件都是以apr/apr-util为基础库进行开发的

httpd.conf的配置文件中, 允许使用通配符, 如* :   <Directory  /home/*/public_html>
 
 
/usr/bin/htpasswd命令?
   htpasswd -c passwordfile username

第一次创建用户,我们必须使用参数“-c”来同时创建用户密码文件 htpasswd -
c passwd robert 上命令创建的一个文件“ passwd”,同时在文件里添加了一个 user named “robert”,执行该命令时会要求输入密码。 注意:创建第二或之后的用户时,一定不能用参数“ c ”,否则之前的用户就会被删除。 如果想要删除某个用户,我们可以使用下列命令: htpasswd -D passwd robert 这样, robert就被从 passwd中删除了
###########################################################
# configure authentication on certain directory
<Directory "/var/www/html/private">
        AuthName  "AuthInstance:"
        AuthType  Basic
        AuthUserFile  "/var/www/html/.htpw"
        Require valid-user
</Directory>
###########################################################

alt+tab的排序问题?
alt+table中图标的排列顺序并不是固定不变的! 他总是按最近使用的顺序,  从前到后地进行排列的! 所以你按一下alt+table,
总是能最大可能地 切换到你需要的窗口!

为什么要使用history命令?
使用history的 目地是, 我们能从其中获得好处:
  通过查看histroy的历查
史命令列表, 可以:
   1  histroy  n可以
看最后n条记录:   注意:  history的历史命令编号不是从后面往前编?
为什么? 因为它是为了保证从前面开始的命令, 不管后面执行了多少命令,

      总是能够得到固定不变的编号;
   2 通过查看history, 可以使用 "!编号"  的方式来执行历史命令.  
       这个! 和后面的编号之间不能有空格, 因为: ! 并不是一个命令, 只要 将!+编号合起来写,  
shell才能识别

   3  !!  执行最近的一条命令
    4  !?string?  可以执行从后向前最先匹配到的命令
     或者, 直接:  !somestring:   如:  !rpm...
     5  fc 编号(不是命令名),  可以修改历史命令,wq保存后执行.
    6.  history默认的命令记录在 ~/.bash_histroy文件中, 默认的记录1000条.  
用histroy -c 可以清楚所有的历史记录.  以免被黑客解析 /root/.bash_history内容!!


prefork.c和worker.c的MPM?
MPM: multi-process module: 多处理模块
apache是一种模块化的设计, 用来满足多种实际场景和平台的需要, 工作模式:
Apache 能更好的为有特殊要求的站点定制。例如,要求更高伸缩性的站点可以选择使用线程的 MPM,
workerevent; 需要可靠性或者与旧软件兼容的站点可以使用 prefork

在用户看来,MPM 很像其它 Apache 模块。主要是区别是,在任何时间, 必须有一个,而且只有一个 MPM 加载到服务器中

Description:Implements a non-threaded, pre-forking web server
Status:MPM
Module Identifier:mpm_prefork_module
Source File:prefork.c

How it Works

A single control process is responsible for launching child processes which listen for connections and serve
them when they arrive. (有一个主进程负责相应子进程侦听到的连接).  Apache always tries to maintain(维持)
several spare or idle server processes, which stand ready to serve incoming requests. In this way,
clients do n ot need to wait for a new child processes to be forked before their requests can be served.
什么叫 pre-fork: 就是预先fork出一定的子进程, stand ready to serve:  站着等待(伺服)传进来的连接请求....
 
-----------------------------prefork的效率比worker的要稍高一些?
线程梦魇?

prefork模式:

    prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。
    这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

worker模式:

    worker使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合高流量的http服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。
    此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

prefork和worker模式的比较

prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:

  1. 它可以使用那些没有处理好线程安全的第三方模块

  2. 并且对于那些线程调试困难的平台而言,它也更容易调试一些。

worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器 上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉"。由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。

总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker(但是对服务器而言,

内存不是问题)!

以前apache主流模式为prefork,现在worker模式也开始多了起来,区别来说,worker模式可以应对高流量,但是安全性不太好;prefork模式安全性比较好,但是性能会差一点,各位可以根据自己服务器的类别选取不同的模式,更好的使用apache。

prefork模式配置详解

复制代码
<IfModule mpm_prefork_module>
ServerLimit 256
StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 256 MaxRequestsPerChild 0 </IfModule>
复制代码

ServerLimit
默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。
生效前提:必须放在其他指令的前面

StartServers
指定服务器启动时建立的子进程数量,prefork默认为5。

MinSpareServers
指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。

MaxSpareServers
设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的 太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。

MaxClients
限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。

MaxRequestsPerChild
每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果 MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1. 可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2. 给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

 

------------------------------------------------------------

测试ab时,提示: too many files open(24)?

1.    每一个client  rquest 建立一个连(即使是一个并发连接) , 一个连接对应着一个设备文件, 所以当打开的请求数很大的时候,通常不会报错,因为会把多余的

    请求保存在请求队列中...

    只有当请求数过多的时候,才会报错: could NOT allocate['2l2ukeit]   memory for result statics. 是说内存不够用来保存请求队列.

 

    

2.    只有当-c 选项过大的时候,  即并发数过大的时候,  才会 提示"  同时打开的文件太多"  : 因为1个并发连接就会打开一个设备文件, 多个并发连接, 就会同时

打开很多个设备文件...

  解决方法 , 就是修改unix 同时打开的文件数的限制.

    默认的同时打开文件的数目是: 1024:    ulimit=unix limit  -a

    修改:    ulimit -n ???

3. 所以, 报" too many files open" 是因为并发数过多, 而不是 请求数过多的原因.

 -------------------------------------------------------------

如何向纯命令行服务器上传文件?

如果centos, redhat用的是纯粹的 命令行界面, 那么就要从windows/linux客户端向 服务器上传或下载文件,

  1. 如果是linux服务器要获得其他机器上的文件, 就在服务器上安装 ftp, tftp这些ftp客户端包

  2. 如果是在客户端操作, 服务器不操作, 那么就要在服务器上配置vsftpd 服务器端: vsftpd=very secure ftp Daemon.

windows 上的ftp服务器, 可以使用其自带的 iis, 其中就有ftp服务器....

在linux上使用命令: ftp 172.16.0.7, 输入用户名和密码,等登录到ftp服务器上,

  然后使用:  get / mget 下载1个或多个文件

        put/mget 上传文件..

ftp的命令, 在ftp> 下都有提示: bye/quit,  将退出整个ftp程序,      而open/close并不会推出ftp, 只会关闭/打开某个ftp连接...

 

printf是linux中的命令, 不是函数, 因此它不支持括号:  printf ("%02d", $i") 是错误的, 应该写成:  printf  "%02d"  $i

 

 history命令的读写?

histfiles是自己定义的文件, 而不是系统给我们提供的文件,就是你可以把当前shell的history命令写入到自己指定的文件中

root@linux ~]# history [n]
[root@linux ~]# history [-c]
[root@linux ~]# history [-raw] histfiles

参数:
n   :数字,意思是‘要列出最近的 n 笔命令列表’的意思!
-c  :将目前的 shell 中的所有 history 内容全部消除
-a  :将目前新增的 history 指令新增入 histfiles 中,若没有加 histfiles ,
     则预设写入 ~/.bash_history
-r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w  :将目前的 history 记忆内容写入 histfiles 中!
也就是说, 你打开的 每个shell都会有自己的history记忆列表!

 所以, 不同shell的历史命令可能会是不同的, 就不必惊诧了.

 --------------------------------------------------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值