Linux小课堂: Apache虚拟主机配置之基于IP与域名的服务器部署指南

Nginx与Apache反向代理实战:原理、坑点与生产级配置 反向代理是现代Web架构的核心中间层,其本质远超简单请求转发,涉及HTTP协议栈控制、连接复用、TLS卸载与安全边界划分。理解proxy_pass路径语义、proxy_http_version 1.1启用逻辑、X-Forwarded-For头注入机制,是保障API网关稳定性的基础。技术价值体现在性能优化(如Nginx的epoll事件驱动)、安全隔离(WAF前置)与运维弹性(灰度发布、健康检查)。典型应用场景包括nginx部署前端项目实现SPA路由回退、apache配置文件中集成Shiro统一认证、以及构建高 阅读详情

服务器主机分类与特性


1 ) 独立服务器

  • 整台服务器资源由单一用户独占,采用租用或托管方式
  • 用户对硬件配置拥有完全控制权,需自行维护硬件设备(如故障修理),适用于大中型网站

2 ) 虚拟主机(Virtual Host)

  • 单台服务器划分磁盘空间存放网站数据,仅提供基础访问、存储与传输功能
  • 资源共享导致成本较低,无需用户维护网站外服务,适合小型网站

3 ) VPS(Virtual Private Server)

  • 虚拟化技术模拟多台独立主机,每台具备独立IP、操作系统、隔离的磁盘/内存/CPU资源
  • 用户自由分配资源,需一定系统维护能力,适合小型企业官网

4 ) ECS(Elastic Compute Service)

  • 云服务器整合计算、存储、网络,支持弹性伸缩
  • 分布式架构跨越多台物理服务器,主机镜像备份保障高安全性与稳定性,扩展灵活,适合大中小型网站

选型建议:

  • 个人静态网站:虚拟主机或免费服务(如 GitHub Pages)
  • 小型企业官网:VPS
  • 高访问量/可扩展网站:ECS云服务器(如阿里云)

技术类比:

  • 虚拟主机 ≈ 单套房分隔的共享房间(资源相互影响)
  • VPS ≈ 单套房分隔的独立公寓(可自定义环境)
  • 云服务器 ≈ 整栋大楼(按需扩展空间)

Apache虚拟主机核心机制

  • 功能定义:基于请求的IP地址、主机域名或端口号,单台服务器提供多个独立网站访问
  • 基于不同IP地址、主机域名或端口号响应请求,实现多网站并行服务,不同请求返回不同内容
  • 用户访问不同标识时,获取的网页内容独立隔离

基于IP地址的虚拟主机配置

前提条件:服务器需绑定多个IP地址(本例以 192.168.0.106、192.168.0.10、192.168.0.20 为例)。

配置步骤

1 ) 绑定静态IP地址

编辑网络配置文件(CentOS)  
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33  
修改以下参数  
BOOTPROTO=static  
IPADDR=192.168.0.106  
NETMASK=255.255.255.0  
# 使用 nmtui 添加新IP 
sudo nmtui  # 选择 "Edit a connection" → "Edit" → "IPv4 CONFIGURATION"
# 添加新地址:192.168.0.10/24 和 192.168.0.20/24 
sudo systemctl restart network  # 重启网络服务 

2 ) 创建网站目录与内容

mkdir -p /home/web/{10,20}
echo "IP 192.168.0.10" > /home/web/10/index.html 
echo "IP 192.168.0.20" > /home/web/20/index.html 

3 ) 修改Apache主配置文件 (/etc/httpd/conf/httpd.conf)

<VirtualHost 192.168.0.10:80>
    DocumentRoot "/home/web/10"
    ServerName www.linuxcoreapp.com 
    <Directory "/home/web/10">
        AllowOverride None 
        Require all granted 
    </Directory>
</VirtualHost>

<VirtualHost 192.168.0.20:80>
    DocumentRoot "/home/web/20"
    ServerName bbs.linuxcoreapp.com 
    <Directory "/home/web/20">
        AllowOverride None 
        Require all granted 
    </Directory>
</VirtualHost>

4 ) SELinux安全上下文配置

sudo semanage fcontext -a -t httpd_sys_content_t "/home/web(/.*)?"
sudo restorecon -Rv /home/web  # 应用配置 

5 ) 重启Apache服务

sudo systemctl restart httpd 

验证访问:浏览器输入 http://192.168.0.10 或 http://192.168.0.20 分别显示对应IP的页面内容

基于主机域名的虚拟主机配置

前提条件:单IP绑定多域名(本例以 192.168.0.10 解析 www.linuxcoreapp.com 和 bbs.linuxcoreapp.com 为例)

配置步骤

1 ) 客户端域名解析配置

  • 修改客户端 /etc/hosts 文件:
    192.168.0.10  www.linuxcoreapp.com 
    192.168.0.10  bbs.linuxcoreapp.com 
    # 或这样写
    192.168.0.10 www.linuxcoreapp.com bbs.linuxcoreapp.com  
    

2 ) 创建域名对应目录与内容

mkdir -p /home/web/{www,bbs}
echo "www.linuxcoreapp.com" > /home/web/www/index.html 
echo "BBS.linuxcoreapp.com" > /home/web/bbs/index.html 

3 ) 修改Apache配置 (/etc/httpd/conf/httpd.conf)

<VirtualHost 192.168.0.10:80>
    DocumentRoot "/home/web/www"
    ServerName www.linuxcoreapp.com 
    <Directory "/home/web/www">
        AllowOverride None 
        Require all granted 
    </Directory>
</VirtualHost>

<VirtualHost 192.168.0.10:80>
    DocumentRoot "/home/web/bbs"
    ServerName bbs.linuxcoreapp.com 
    <Directory "/home/web/bbs">
        AllowOverride None 
        Require all granted 
    </Directory>
</VirtualHost>

4 ) 重启Apache服务,清理冲突配置

rm -rf /home/web/{10,20}           # 删除旧IP目录 
systemctl restart httpd               # 重启Apache生效  

验证访问:

  • http://www.linuxcoreapp.com → 显示 “www.linuxcoreapp.com”
  • http://bbs.linuxcoreapp.com → 显示 “BBS.linuxcoreapp.com”

NestJS工程实践


1 ) 方案1

实现虚拟主机逻辑

import { Controller, Get, HostParam } from '@nestjs/common';
import { Response } from 'express';
 
@Controller({ host: ':domain' })  // 动态捕获域名 
export class VirtualHostController {
  @Get()
  serveContent(@HostParam('domain') domain: string, res: Response) {
    const contentMap = {
      'www.linuxcoreapp.com': 'Welcome to www.linuxcoreapp.com',
      'bbs.linuxcoreapp.com': 'BBS.linuxcoreapp.com Forum'
    };
 
    if (contentMap[domain]) {
      res.send(contentMap[domain]);
    } else {
      res.status(404).send('Virtual Host Not Found');
    }
  }
}
 
// 多IP支持(需多网卡或IP别名)
@Controller({ host: '192.168.0.10' })
export class IpBasedController {
  @Get()
  handleIpRequest() {
    return 'Response from IP 192.168.0.10';
  }
}

关键配置说明:

  1. @Controller({ host: ':domain' }) 动态捕获域名参数
  2. contentMap 实现域名与内容的映射逻辑
  3. 多IP需结合服务器网络配置(如IP别名 ifconfig eth0:0 192.168.0.10)

2 )方案2

NestJS域名路由实现

// domain-routing.module.ts
import { Module, MiddlewareConsumer } from '@nestjs/common';
import { DomainMiddleware } from './domain.middleware';
import { WebsiteController } from './website.controller';
import { BBSController } from './bbs.controller';
 
@Module({
  controllers: [WebsiteController, BBSController],
})
export class DomainRoutingModule {
  configure(consumer: MiddlewareConsumer) {
    consumer 
      .apply(DomainMiddleware)
      .forRoutes('*');
  }
}
 
// domain.middleware.ts 
import { Request, Response, NextFunction } from 'express';
 
export function DomainMiddleware(req: Request, res: Response, next: NextFunction) {
  const host = req.headers.host;
  
  // 重写请求路径以匹配不同控制器
  if (host === 'www.linuxcoreapp.com') {
    req.url = '/website' + req.url;
  } else if (host === 'bbs.linuxcoreapp.com') {
    req.url = '/bbs' + req.url;
  }
  
  next();
}
 
// website.controller.ts
import { Controller, Get } from '@nestjs/common';
 
@Controller('website')
export class WebsiteController {
  @Get()
  serveWebsite() {
    return { content: 'Welcome to www.linuxcoreapp.com' };
  }
}
 
// bbs.controller.ts
import { Controller, Get } from '@nestjs/common';
 
@Controller('bbs')
export class BBSController {
  @Get()
  serveBBS() {
    return { content: 'Welcome to BBS.linuxcoreapp.com' };
  }
}

实现逻辑:

  1. 中间件动态路由:根据 Host 请求头重写URL路径
  2. 控制器分离:独立控制器处理不同域名业务逻辑
  3. 扩展性:可结合反向代理(Nginx)实现域名分流与负载均衡

3 ) 方案3

import { Controller, Get, HostParam } from '@nestjs/common';  
 
@Controller({ host: ':domain' })  // 动态域名捕获  
export class VirtualHostController {  
  @Get()  
  serveContent(@HostParam('domain') domain: string): string {  
    if (domain === 'www.linuxcoreapp.com') {  
      return 'www.linuxcoreapp.com content';  
    } else if (domain === 'bbs.linuxcoreapp.com') {  
      return 'BBS.LINUXCOREAPP.COM content';  
    }  
    return 'Default host content';  
  }  
}  

技术要点总结

  1. IP与域名解析隔离:
    • 基于IP:每个网站需独立IP,适用于IP资源充足的场景
    • 基于域名:单IP多域名,依赖ServerName字段区分请求
  2. SELinux安全机制:
    必须通过semanage与restorecon命令设置httpd_sys_content_t上下文类型,否则文件不可访问
  3. 配置优先级:
    Apache优先匹配<VirtualHost>区块,未匹配的请求由默认主机处理
  4. 虚拟主机核心
    Apache通过 <VirtualHost> 指令块 隔离不同网站,依赖 DocumentRoot 指定资源路径
  5. 配置文件逻辑:
    • DocumentRoot 指定资源路径
    • <Directory> 定义目录访问权限
    • ServerName 声明域名标识
  6. 配置冲突规避:删除旧目录/配置块(如 /home/web/10)避免残留规则干扰
从零到一:Linux运维与SRE核心技能实战学习路径 在IT基础设施领域,Linux系统管理和站点可靠性工程(SRE)是保障服务稳定与高效运行的核心技术。其原理在于通过自动化、监控和工程化方法,将传统运维从重复性手工操作中解放出来,实现规模化系统管理。这项技术的核心价值在于提升系统可靠性、降低运维成本并加速业务迭代。在应用场景上,它广泛服务于互联网、金融、云计算等行业的服务器管理、自动化部署和故障排查。本文聚焦于Linux运维与SRE的实战技能,为初学者提供一条从基础命令、服务部署到自动化脚本和监控告警的系统学习路径,并特别涵盖了Prometheus监控和An 阅读详情

相关推荐

Linux -- 进阶 Web服务器 虚拟主机 -- 基于 域名

Apache 虚拟主机服务 -- 基于 域名

三毛与海子的博客 1198

Nestjs 如何获取请求的 IP

nestjs获取ip

weixin_42445065的博客 2946

11-2 Apache配置虚拟主机

虚拟主机是指在一台物理服务器上同时运行多个独立的网站或应用程序,每个虚拟主机都拥有自己独立的域名、文件目录和配置。虚拟主机的好处是可以通过共享服务器资源来降低成本,提高服务器的利用率。虚拟主机可以分为以下几种类型:基于域名:每个虚拟主机使用不同的域名,但共享相同的IP地址。这是最常见的虚拟主机类型,通过解析不同的域名到同一个IP地址,服务器可以根据域名来确定访问的是哪个虚拟主机。基于端口:每个虚拟主机使用不同的TCP端口,但共享相同的IP地址。这种方式较少使用,因为需要在访问网站时指定端口号。

weixin_43263566的博客 1583

基于域名的虚拟主机配置(CentOS 7环境)

一.实验目的:项目考核信息网站部署完毕后,公司人力资源部计划部署一个员工考勤网站。因此管理员需要在一台服务器上部署多个站点,为了方便今后公司内部网站的部署和管理,管理员可以采用基于域名的虚拟主机或基于IP地址的虚拟主机两种方法来配置多个站点。为了方便对网站的访问,分别为两个网站设置本地域名:www.dsch.com和www.dhjg.com,站点根目录:/var/www/html/dsch和/var/www/html/dhjg,首页位根目录下的index.html页面。三:创建两个虚拟网站。

2301_76989163的博客 540

VisualStudio2022配置CGAL

vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。

weixin_43850909的博客 1169

川崎机器人总线通信_三菱PLC和发那科机器人进行CCLINK总线通信

三菱CCLINK主站模块采用QJ61BT11N,该模块用在Q系列PLC上,如果是5U或3UPLC,可用FX5-CNV-BUS加FX3U-16CCL-M或FX5-CCL-M模块。本教程以Q系列为例CCLINK接线方法如下模块拨码含义如下接线和拨码设置好后,接着在编程软件上设置CCLINK通信参数打开编程软件,在工程导航栏打开参数——网络参数,选中CCLINK打开。打开如下画面起始IO为模块本体占用I...

weixin_42300398的博客 7546

nginx 配置基于域名的虚拟主机

1.创建站点目录: [root@localhost ~]#mkdir -p /www/{web/,blog/} 2.配置站点首页文件: [root@localhost ~]# echo "welcom to pengqinxin's web-server">>/www/web/index.html [root@localhost ~]# echo "welcom to pengqinxin's blog-server">>/www/blog/index.html [root

m0_59127553的博客 4049

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 279

Web基础②nginx搭建与配置

一款高新能、轻量级Web服务软件系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30 000~50 000个并发请求。

Kiryu7的博客 2119

【深度避坑】Word 提示“内存或磁盘空间不足,保存失败”的真正原因与终极解决方案

这是 Word 2003 时代的老功能⚠现代 Office 使用全新的保存 API(与 OneDrive 深度集成)老插件无法兼容现代保存机制会拦截 Word 的写入流程导致保存动作失败,Word 误以为磁盘坏了,于是报错不是磁盘坏了,是 Word 被插件绊倒了。Word 无法保存 = 加载项冲突(尤其是书法 / 稿纸向导)。永久禁用即可彻底恢复。如果在写毕业论文、要交文档,强烈建议马上检查一下你的加载项,避免后期出现大规模崩溃丢稿。

m0_59029415的博客 3062

IPC-7351标准实战:如何用LPWizard_10快速生成PCB封装库(附避坑指南)

本文提供了一份详细的IPC-7351标准实战指南,手把手教你使用LPWizard_10软件快速生成符合行业标准的PCB封装库,并直接导入Cadence Allegro。文章深入解读了IPC-7351密度等级的选择逻辑,并重点分享了软件配置、QFN封装生成实战步骤,以及导出失败、焊盘异常等常见问题的避坑解决方案,旨在帮助硬件工程师提升设计效率和可靠性。

weixin_29207439的博客 153

Nginx虚拟主机配置(基于端口,域名,IP地址)超详细!!!

nginx虚拟主机配置的三种方法,一学就会。

passerbyji的博客 5623

2021.02.23丨Virsorter2安装使用及答疑

最近项目比较多,又在学英语,写文章的时间少了很多。最近接到一个病毒组装的项目。用之前组装工具(ABYSS、SPAdes)都没有能够组装较为完整的scafford,今天介绍一款专门用于组装病毒的工具——Virsorter。 Virsorter最早版本发布于2015年,目前已经有了第二个版本。主要用于病毒的组装的注释。详细情况可以查看文章:https://peerj.com/articles/985/ 安装流程 安装文档: https://github.com/jiarong/VirSorter2/b

4835

Linux小课堂: NGINX反向代理服务器配置与实践

本文介绍了代理服务器的基础概念,重点讲解了Nginx反向代理的配置实践。主要内容包括:代理服务器类型(正向/反向代理)及其区别,Nginx作为高性能Web服务器的特性(事件驱动、高并发支持),以及详细的安装配置步骤。重点演示了如何配置Nginx反向代理Apache和Jenkins服务,包括端口修改、SELinux配置、防火墙设置等关键操作。同时还介绍了HTTPS安全配置和强制重定向的实现方法。最后提供了一个NestJS应用层代理的实现示例,展示了后端服务如何通过代码实现类似功能。这些内容涵盖了从基础概念到实

Wang的专栏 1208

【LangChain编程:从入门到实践】实现多模态代理

【LangChain编程:从入门到实践】实现多模态代理 关键词:LangChain, 多模态代理, 自然语言处理, 机器学习, 知识图谱, 对话系统, 代码生成, AI代理 1. 背景介绍 随着人工智

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 579

在 SAP HANA XS Advanced 中用 InA 打通 Web 化分析数据访问:架构原理、部署步骤与实战指南

本文介绍了如何在SAP HANA环境中通过InA协议为XS Advanced应用和分析工具提供实时数据访问。主要内容包括:InA协议的作用是将HANA计算视图等模型通过HTTP(S)暴露为实时数据源;SAP HANA Analytics Adapter(xsahaa)是关键组件,负责协议转换和连接管理;部署包含本地和云端两种形式,均需建立XSA空间与租户数据库的映射;实施前需准备HDI容器、适配器构建和网络验证;安全方面通过XSA用户角色和HDI授权双重控制;文章还提供了与SAP Analytics Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 257

apache 的虚拟主机和 web访问时序图

一、提出问题:虚拟主机的配置 http://localhost/news.html http://www.sohu.com http://www.taobao.com.cn 目前我们是 http://localhost/myblog/ 需求我希望 http://www.shunping.com       http://www.sohu.com   二、配置虚拟主机的步骤如下: 1...

weixin_34148508的博客 109

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

如何在 Ubuntu 上安装 phpMyAdmin ?

phpMyAdmin 是一个优秀的 MySQL 数据库管理工具。它可以用来浏览、编辑、创建和删除数据表,您不需要 SSH 到远程或者在终端窗口来执行 SQL 查询和管理。本文将向您展示如何在 Ubuntu 服务器上安装和设置 phpMyAdmin 工具。

xiaochong0302的博客 381

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Ubuntu 18.04 手动部署 Jitsi Meet 完整指南

Jitsi Meet 是基于 WebRTC 协议的开源音视频会议系统,其核心依赖 Prosody(XMPP 信令服务)、Jicofo(会议协调器)和 JVB(视频桥)三大组件协同工作。在老旧但受控的生产环境中(如内网 Ubuntu 18.04),官方一键脚本常因源兼容性、TLS 协议降级或证书路径硬编码而失效。此时需回归基础:手动净化环境(卸载冲突的 Nginx/OpenJDK)、分装服务(独立安装与配置 Prosody、Jicofo、JVB)、可信化证书(Certbot 泛域名 DNS 验证+物理注入)、

weixin_34248705的博客 416

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Apache--基于IP的虚拟主机

一、虚拟主机介绍 默认情况下,一个web服务器软件只能定义一个默认网站,也就是说只能发布一个WEB站点,对于大网站还可以,有海量用户来消耗服务器的资源,但是小网站呢?一个服务器上只跑一个小网站,服务器资源使用约等于0,那就尴尬了。为了充分利用服务器资源,现实生产环境中一般都是采用一个WEB服务器软件发布多个站点。如何解决这个问题呢?那就是配置虚拟主机! 虚拟主机和默认网站在apache中不能同时存在,只能存在一种,当虚拟主机出现后,apache默认网站就失效了,如果你还需要默认网站,就拿虚拟主机在发布一

GG Bond 的博客 1324

基于域名的虚拟主机,基于ip的域名主机,综合项目eleme

不看空行,不看注释,查找把原有的文件备份[root@staticserver ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak备份[root@staticserver ~]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf.bak > /usr/local/nginx/conf/nginx.conf 重定向。

m0_70750601的博客 1170

7月31日学习笔记 基于域名,Ip,端口多虚拟主机配置以及上线商城系统

不同端口访问不同的项目,这种一般用于企业内部测试,不会用于发布项目。可以省略,一般来说基于端口的配置,用于企业内部的项目测试。也可以如此设设置,但是要注意要设置读写权限。取消只读,设置权限,如果还不行,就直接创建。server复制到devops.conf。单独创建一个文件保存,在主配置文件使用。这里也可以写成相对路径,可以自由选择。的时候是非常难于管理的,我们会将。劫持域名访问指定的文件夹的目录。文件,然后在主配置文件中使用。二,基于ip的虚拟主机。的监听端口一个设置为。四,多虚拟主机的配置。

weixin_70751701的博客 1269

Apache虚拟主机的三种实现方式

Apache虚拟主机的三种实现方式

jks212454的博客 4436

Apache搭建基于域名的虚拟主机

Apache可以通过配置虚拟主机来实现在同一台服务器上托管多个网站,每个网站可以通过不同的域名访问。:虚拟主机允许您在同一台服务器上运行多个网站,而不需要为每个站点分配独立的服务器资源。这样可以更有效地利用硬件资源,降低网站运营成本。:要配置基于域名的虚拟主机,首先需要确保您的域名已经指向服务器的IP地址。这通常涉及到修改操作系统的hosts文件,将域名解析到服务器的IP地址上。:在Apache配置文件中,需要为每个域名创建一个虚拟主机块。每个虚拟主机块包含该网站的具体配置,如文档根目录、日志文件位置等。

wuyueyang1的博客 1688

【Linux】apache虚拟主机实战,深入浅出Python

基于IP的虚拟主机 基于端口的虚拟主机 基于域名的虚拟主机 []( )三. VirtualHost参数的意义 <VirtualHost *:80> #服务器ip和端口 DocumentRoot “/var/www/html/” #站点目录 ServerName www.cq.com #域名 ServerAlias #给虚拟主机增加多个域名,上面网址的别名 <Directory “/var/www/html”> #对根目录行为的限制 Options Foll..

java199909的博客 698
上一篇: Linux小课堂: 网络配置详解之DHCP动态分配与静态IP地址设置
下一篇: Linux小课堂: HTTPS协议原理与Apache服务器配置实战
Wang's Blog
博客等级 码龄12年 7417粉丝 2397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值