个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)
前言
最近开始准备秋招,打算做一个个人主页,以便在秋招市场上更有竞争力。
目前,现有的一些搭建主页的博文教程存在以下一些问题:
- 使用Github Page进行部署,这在国内访问容易受阻
- 使用宝塔面板等框架,功能较繁杂,自定义化程度低
- 使用Hexo等博客框架进行搭建,主题大多花里胡哨,不够清晰美观
- 仅介绍如何进行操作,未说明这么做的原因,导致知其然而不知其所以然
针对以上问题,本文重新梳理用一周时间完成从主页编写到建站上线的流程,希望能对有同样需求的人有所参考。
1.选择主页模板
之前看论文时,发现不少学术圈人士用了jonbarron开源的这个主页模板,看上去非常简洁清晰,并且同时适配网页端和移动端。

访问地址:https://jonbarron.info/
Github地址:https://github.com/jonbarron/website
该模板时用前端三要素写的,只需要简单得修改html文件,就可以完成自己的个人主页。
由于原模板里面包含了很多动图及视频效果,我只需展现图片,因此对该模板进行了进一步的精简,有需要的也可以查看我修改的版本:
Github地址:https://github.com/zstar1003/zstar
2.选择服务器
因为该主页需要在国内访问,因此最佳方式是直接在云服务器上进行部署。
我使用阿里云服务器,阿里云的优点是服务器最近做活动,比较便宜(不是做广告);提供免费的ssl证书和DCDN服务(个人轻量使用可白嫖)。一言蔽之,便是性价比高。
不过,阿里云很多功能模块比较错综复杂,文档有时候并不清晰。找一个小功能点往往需要找半天,为此,我在后面的步骤中会尽可能地挂一些链接,以便查找。
我购买的是阿里云的ECS轻量实例,99元可以用一年,对学生来说比较划算。
购买界面:https://www.aliyun.com/daily-act/ecs/99program
系统环境选择Ubuntu 20.04 64位。
等待系统安装完成之后,这里需要配置一下安全组规则。
此步非常重要,安全组相当于外部的防火墙,之前部署时忘记开相关端口,导致部署失败一致在内部排查问题,浪费不少时间。
这里比较核心的就开放三个端口:
- 22端口:用于ssh远程连接控制
- 80端口:用于http访问
- 443端口:用于https访问

3.Nginx部署
主流的服务器有Nginx和Apache,这两个我都试了一下,发现Apache有1代和2代,两者之间的配置文件不能通用,查询相关资料时,容易造成不便;此外,Nginx对于静态内容的处理比Apache更为高效。因此,选在Nginx作为服务器。
在服务器上安装Nginx:
sudo apt update
sudo apt install nginx
3.1 文件上传
Nginx的默认网站根目录为/var/www/html/,因此,先将本地编辑好的主页模板上传到服务器该路径下。

上传完之后,给文件设置权限:
在Nginx中,默认用户(访问者)用户名为www-data,所属用户组也为www-data,这里将该文件夹及子文件夹的所有权赋予用户www-data。
sudo chown -R www-data:www-data /var/www/html
将该目录的权限设置为775:
sudo chmod -R 755 /var/www/html
这里775的具体含义是:
所有者:7(rwx):
- 读(r):可以查看文件内容或列出目录内容。
- 写(w):可以修改文件或在目录中创建/删除文件。
- 执行(x):可以执行文件或进入目录。
所属组:5(r-x):
- 读(r):可以查看文件内容或列出目录内容。
- 执行(x):可以执行文件或进入目录。
其他用户:5(r-x):
- 读(r):可以查看文件内容或列出目录内容。
- 执行(x):可以执行文件或进入目录。
更多去数字及权限含义入下表所示:
| 数字 | 权限 | 含义 |
|---|---|---|
| 7 | rwx | 读(r)、写(w)、执行(x) |
| 6 | rw- | 读(r)、写(w) |
| 5 | r-x | 读(r)、执行(x) |
| 4 | r– | 读(r) |
| 3 | -wx | 写(w)、执行(x) |
| 2 | -w- | 写(w) |
| 1 | –x | 执行(x) |
| 0 | — | 无权限 |
起初看到这么设置的时候,我产生了一个疑问:既然用户www-data所属的是www-data组,为什么只给用户写的权限,不给整个用户组写的权限。
查询资料,这样做的目的是满足最小权限原则,即只让访问者可以读写执行,以便在浏览器中进行交互,而对于其它用户(即便在同一个用户组),也不给写的权限,防止其它进程修改网站文件。
3.2 修改配置
Nginx使用server 块来配置虚拟主机,通常可以为每个网站创建一个独立的配置文件。
比如在/etc/nginx/sites-available/目录下创建一个新的配置文件。
考虑到我只有一个网站,因此,我直接修改的nginx的配置文件,配置文件默认路径为/etc/nginx/nginx.conf。
在http项里添加server,这里的公网ip替换成自己服务器的公网ip,在服务器控制台中查看。
http {server {listen 80;server_name 公网ip;root /var/www/html;index index.html;location / {try_files $uri $uri/ =404;}}
}
3.3 部署访问
1.配置完成后,启动nginx:
sudo systemctl start nginx
可进一步设置开机自启动(可选):
sudo systemctl enable nginx
2.检查一下配置文件是否有格式问题:
nginx -t
输出以下内容,表示配置文件没问题:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
3.查看nginx是否处于正常运行状态:
sudo systemctl status nginx
输出active (running),表示正常运行。
4.启动防火墙:
sudo ufw enable
5.设置防火墙开放80端口:
sudo ufw allow 80/tcp
6.查看防火墙状态
sudo ufw status
配置完成之后,浏览器访问http://公网ip,即可看到网站界面。
4.域名解析
直接给用户公网ip的访问不太友好,也不好记,因此需要购买域名解析到ip。
我是直接在阿里云注册的域名。
阿里云的域名注册地址:https://wanwang.aliyun.com/domain
不同尾缀的域名价格有所差异,我选择了一个.website结尾的域名,一年价格10块钱。这里注册时不建议使用中文后缀的域名,后面在配置SSL的时候,会遇到不适配的问题。
购买好域名后,在域名控制台中进行域名解析,这里添加了两条A记录,A记录是将该域名解析到自己的公网ip。
一条记录是@,即直接访问域名;
另一条记录是www,即访问www.域名;


之后,重新修改nginx配置文件/etc/nginx/nginx.conf,将公网ip替换成自己的域名。
http {server {listen 80;server_name 自己域名;root /var/www/html;index index.html;location / {try_files $uri $uri/ =404;}}
}
配置完成后,重启nginx:
sudo systemctl restart nginx
等几分钟,就可以通过域名访问到部署的网站。
再过几分钟,就会发现网站被ban,因为地域规则,域名必须要备案之后才能上线。
阿里云的ICP备案地址:https://beian.aliyun.com/
三年前,我曾经用过ICP备案,当时备案流程还比较复杂,阿里云平台审核需要进行视频通话,要人工检验身份证信息。
现在已经比较便利了,身份信息都直接自动校验,阿里云的初审只是有个人工电话,打电话来确认下就行了。
下图是我的备案流程图:从7号开始提交,13号最终通过,用了差不多一周时间。

建站很快,审核很慢。
备案通过之后,域名就可以正常访问了。不过需要按照要求,在网页底部放置ICP备案号,在我精简的模板中,已有该备案号添加。
5.SSL配置
5.1 Https原理
如果仅通过http访问,浏览器会有连接不安全的提示。
不安全的原因是HTTP是明文传输的,这意味着数据在传输过程中是未加密的,容易被第三方窃听或篡改。
因此,HTTPS(HTTP Secure)应运而生。HTTPS在HTTP的基础上增加了 SSL/TLS 加密层以保证数据安全,具体通信流程如下:
- 客户端发起请求
客户端(如浏览器)向服务器发起 HTTPS请求。客户端支持的 SSL/TLS 版本和加密套件(Cipher Suites)会发送给服务器。 - 服务器响应
服务器选择一个双方都支持的 SSL/TLS 版本和加密套件。 - 服务器将自己的数字证书发送给客户端。证书中包含服务器的公钥和证书颁发机构(CA)的签名。
- 客户端验证证书
客户端验证服务器的数字证书,检查证书是否由受信任的 CA 签发,检查证书是否在有效期内,检查证书中的域名是否与访问的域名匹配。
如果验证通过,客户端生成一个预主密钥(Pre-Master Secret),并使用服务器的公钥加密后发送给服务器。 - 密钥交换
服务器使用自己的私钥解密预主密钥。
客户端和服务器使用预主密钥生成主密钥(Master Secret),然后进一步生成会话密钥(Session Keys),用于加密通信内容。 - 加密通信
客户端和服务器使用会话密钥对通信内容进行加密和解密。
以上是GPT生成的解答内容,看起来有点绕。梳理一下,就是客户端和服务器想用一种相同的加密方法加密通信内容,问题的核心便在于,服务器该如何自证身份。
而证书(CA)就是第三方机构签发的服务器身份证,服务器在首次通信时,直接将身份证信息连同公钥寄过来,这个证书需要通过私钥进行生成,私钥仅存在于服务器中,因此,中间人无法通过伪造证书来进行篡改攻击。
客户端在验明正身后,用寄过来的公钥加密信息(约定后面用什么加密方式通信),这个信息只有服务器通过私钥才能进行解密。
如此,就保证了数据的双向传输安全。
SSL(Secure Sockets Layer)目前已被TLS(Transport Layer Security)替代,目前,大部分的浏览器都使用TLS1.2和TLS1.3两个版本。
访问网站时,可以在开发者界面中的安全栏,看到具体的TLS版本。

证书正常买的价格有点偏贵,不过阿里云给每个用户20个免费额度,每张证书有效期为3个月。
申领地址:https://yundun.console.aliyun.com/

申请完成之后,需要等待机构签发,签发很快,差不多半小时就下来了。
下面就需要将证书部署到服务器上,证书控制台里面有部署菜单,但一直没找到我的服务器资源。翻阅半天文档,才发现阿里云的一键部署对ECS对系统有严格限制。(这一点竟然在控制界面中无提示,差评)。

5.2 手动部署证书
下面手动进行证书部署。
首先在下载界面将证书下载下来,下载Nginx形式。

下载完之后,会得到两个文件,.key是私钥,.pem是公钥。
将私钥上传到服务器/etc/ssl/private/这个路径。
将公钥上传到服务器/etc/ssl/certs/这个路径。
重新修改nginx配置文件:/etc/nginx/nginx.conf,我的完整配置文件内容如下:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on;
}http {### Basic Settings##sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;# server_tokens off;include /etc/nginx/mime.types;default_type application/octet-stream;### SSL Settings##ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;### Logging Settings##access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log;### Gzip Settings##gzip on;### Virtual Host Configs##include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;server {listen 80;server_name zstar.website www.zstar.website;return 301 https://$host$request_uri;}server {listen 443 ssl;server_name zstar.website www.zstar.website;ssl_certificate /etc/ssl/certs/zstar.website.pem;ssl_certificate_key /etc/ssl/private/zstar.website.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;root /var/www/html; index index.html index.htm;location / { try_files $uri $uri/ /index.html;}}
}
这里我对80端口的http请求加了一个重定向,使其访问http时,会自动向https的443端口发送请求。
配置完成后,重启nginx:
sudo systemctl restart nginx
同时,设置防火墙开放443端口:
sudo ufw allow 443/tcp
之后,就可以通过https+域名的方式正常访问网站。
6.DCDN加速
由于我的网站中有一些比较大的图片,并且服务器带宽很小,访问时,会有点加载缓慢。用户端表现是,文字先加载出来,图片等两三秒才出现,用户体验不佳。
因此,想通过CDN(Content Delivery Network)将静态内容(如图片、CSS、JS 文件)缓存到全球各地的边缘节点,使用户可以从离自己最近的节点获取内容,从而加速访问速度。
DCDN(Dynamic Content Delivery Network)是CDN的扩展,可加速动态内容(如 API 请求、数据库查询、个性化内容)的分发。
正好阿里云的有一年50GB的免费通用流量包,因此来白嫖一下。
DCDN地址:https://dcdn.console.aliyun.com/
DCDN的操作很简单,添加需要加速的域名,设置源站为公网ip的443端口,几分钟后,它会生成一个CNAME记录,该记录相当于是一个新的加速访问地址。

之后,需要在域名解析中删除前面添加的两条A记录,否则会造成冲突的问题。
添加新的CNAME记录,记录值为新的DCDN提供的数值。

最后,在DCDN里面再配置一下HTTPS证书,直接上传公钥的内容即可。

配置完成后,需要过十几分钟,控制台的CNAME状态才会更新。

在控制台中,也可以通过nslookup -type=CNAME + 访问域名的方式,来查看域名是否正确解析到了加速地址中。

配置完之后,访问很流畅,基本秒加载,完美解决问题。
总结
- 流程顺利的话,搭建主页实际半天就可以完成。7天时间,6天卡在了审核上,半天卡在了问题排查和文档查看上。阿里云的文档确实有点错综复杂,找起来并不轻松。
- 此次实践,特别是配置SSL和DCDN之后,对相关的原理会更加深刻,实践出真知。
相关文章:
个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)
前言 最近开始准备秋招,打算做一个个人主页,以便在秋招市场上更有竞争力。 目前,现有的一些搭建主页的博文教程存在以下一些问题: 使用Github Page进行部署,这在国内访问容易受阻使用宝塔面板等框架,功能…...
语音合成的预训练模型
语音合成的预训练模型 与 ASR(语音识别)和音频分类任务相比,语音合成的预训练模型检查点明显较少。在 Hugging Hub 上,可以找到近 300 个适合的检查点。 在这些预训练模型中,重点关注两种在 Huggingface Transformers 库中开箱即用的架构——SpeechT5 和 Massive Multili…...
前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单
一、最早的灵感 最早的灵感来自sprider / 网络爬虫 / 爬虫配置,在爬虫爬取网站文章时候,会输入给爬虫一个配置文件,里边的内容是一个json对象。里边包含了所有想要抓取的页面的信息。爬虫通过这个配置就可以抓取目标网站的数据。其实本文要引…...
Swagger生成Api文档的增强解决方案--knife4j
方法一: 使用步骤 1.导入 knife4j 的maven坐标 在pom.xml中添加依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</ver…...
Node.js - HTTP
1. HTTP请求 HTTP(Hypertext Transfer Protocol,超文本传输协议)是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端(通常是浏览器、手机应用或其他网络工具)发送给服务器的消息,用来请求资源或执行…...
LangChain学习笔记2 Prompt 模板
安装 langchain 库 pip install langchain1、概念:提示和提示工程 在大语言模型(LLMs)时代,通过简单地更改提示中的指令,同一个模型可以执行多种任务。这一特性让 LLMs 在各类应用场景中都显得非常灵活和强大。然而&…...
如何在gitlab cicd中实现每月10号上午执行
在 GitLab CI/CD 中,可以通过设置定时触发器(Schedules)和脚本中的时间判断逻辑结合,确保任务只在每月 10 号的上午运行。 以下是实现的步骤: 1. 设置定时触发器 GitLab 提供了 Schedules 功能,可以指定每…...
SimpleFOC |SimpleFOC学习笔记汇总
在机器人领域,掌握无刷电机的控制相当于掌握机器人设计的“半壁江山”。这个年代,对个人来说学习一种新技术最好是通过开源项目了。通过开源项目快速将项目搭建起来,接着结合实践与理论才能真正掌握技术。 入门FOC,我认为最合适是…...
OpenArk64:Windows 系统分析与逆向工程工具详解
引言 在 Windows 系统的底层操作和逆向工程领域,OpenArk 是一款备受推崇的开源工具集。而 OpenArk64.exe 是 OpenArk 工具的 64 位版本,专门用于 64 位 Windows 系统。它提供了强大的功能,帮助用户深入分析系统内核、进程、文件、注册表等&a…...
数据储存与管理【大数据导论】
这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:大数据入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1…...
《从零到一:搭建高效体育直播网站的全流程技术指南》
搭建一个体育直播网站需要综合考虑技术架构、数据来源、用户体验、安全性等多个层面。从整体到细节,搭建这样一个网站的流程比较复杂,但可以分成几个重要的步骤和技术环节。以下是搭建体育直播网站的技术层面准备全流程: 一、需求分析与规划 …...
松散比较(PHP)(小迪网络安全笔记~
免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…...
一文了解如何使用 DBeaver 管理 DolphinDB
在日常的数据开发、分析和数据库运维中,一款优秀的 IDE 能够极大地提升工作效率。DBEaver 是一款由 Java 编写的一站式跨平台连接器,其社区版本已能支持连接近百种数据库,受到广大开发者的喜爱。近期。DolphinDB 与 DBeaver 团队共同努力&…...
网络基础知识指南|1-20个
1. IP地址: 即互联网协议地址,是用于标识互联网上的每一个设备或节点的唯一地址。IP地址的作用主要是进行网络设备的定位和路由,确保数据包可以从源设备准确地传送到目标设备。2. 子网掩码: 是用于将一个IP地址划分为网络地址和主机地址的工具。它通常与…...
01.09周四F34-Day50打卡
文章目录 1. -我大衣呢? -就在上次你放的地方。2. 这所学校是在曾经的影院上建立起来的。3. 她今天落到这个地步都怪你。4. 留得青山在,不怕没柴烧。(一息尚存,希望不灭。)5. 有善良的地方就有美德,有美德的地方就有奇迹。(《灰姑娘》原句)6. 为了和老外说话时不再发窘,所…...
Linux简介和环境搭建
Linux 介绍和环境搭建 1、发行版本 Linux 操作系统有多个主流发行版本,每个版本根据不同的目标、特点和使用场景为用户提供了不同的功能和体验。 Ubuntu • 特点:Ubuntu 是最为人熟知的 Linux 发行版之一,强调易用性和用户友好性ÿ…...
在移动端开发图表,uniapp+echarts,需要特殊处理,使用renderjs
1.首先要创建一个组件warning,用来装图表(我排除绿色那段代码为我的需求,不是必要代码) <template> <div class="task_container"> <div class="pop_body"> <div class="footer"> <warning…...
SpringBoot之LazyInitializationBeanFactoryPostProcessor类源码学习
源码分析 /**** author Andy Wilkinson* author Madhura Bhave* author Tyler Van Gorder* author Phillip Webb* since 2.2.0* see LazyInitializationExcludeFilter** 主要用于延迟初始化 Bean 的配置。它通过修改 BeanFactory 的配置来确保某些 Bean 在实际需要时才进行初始…...
United States of America三种表示
"United States of America", "United States", 和 "America" 都表示美国,但它们的使用场景和背景略有不同。以下是关于为什么这些名称可以合在一起表示美国的详细解释: 1. "United States of America" 全称&a…...
OpenCV基于均值漂移算法(pyrMeanShiftFiltering)的水彩画特效
1、均值漂移算法原理 pyrMeanShiftFiltering算法结合了均值迁移(Mean Shift)算法和图像金字塔(Image Pyramid)的概念,用于图像分割和平滑处理。以下是该算法的详细原理: 1.1 、均值迁移(Mean …...
小说下载器终极指南:一站式解决100+网站小说保存难题
小说下载器终极指南:一站式解决100网站小说保存难题 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代,你是否曾因小说突然下架、网站404或网络中…...
为什么视频代剪辑会影响你的内容传播效果
为什么你精心拍的视频,发出去却没人看? 你有没有过这样的经历:花了一整天拍Vlog,素材画质高清、内容真实,可一剪出来就显得平淡无奇,点赞寥寥?或者婚礼当天感动全场,回看成片却像流水…...
6款高效降AI率工具 改写实力出众
写论文时反复检测出的AI痕迹总让你提心吊胆?别担心,这里整理了6款真正好用的论文降AI率工具,堪称应对AI生成特征的“得力助手”。它们能有效识别并消除AI生成的痕迹,改写能力出众,帮你快速降低查重率,顺利通…...
SAP-ABAP:变量、常量、结构与内表声明(10篇博客合集) 第五篇:声明时的键值设计技巧:结构与内表的主键、非主键配置指南
变量、常量、结构与内表声明(10篇博客合集) 第五篇:声明时的键值设计技巧:结构与内表的主键、非主键配置指南如果把内表比作一张内存中的“数据库表”,那么键就是这张表的索引甚至主键。键的设计直接决定了数据的唯一性…...
荣耀出征官方网站下载正版手游 翅膀养成细节玩法全方位讲解
玩荣耀出征的玩家都清楚,翅膀不仅是角色的颜值象征,更是提升整体战力的核心途径。很多新手玩家只顾着升级、刷装备,完全忽略翅膀养成,导致等级很高但战力始终上不去。还有不少玩家胡乱合成、盲目进阶,浪费了大量稀有翅…...
AI学习 - 大模型基础入门
AI学习 - 大模型基础入门 从零开始:Ollama 安装 → 本地模型运行 → Python 代码接入 → 理解核心概念 摘要 本文记录了在 Windows 上使用 Ollama 部署本地大模型、并通过 Python 代码接入调用的完整过程。内容涵盖:Ollama 安装与模型拉取、大模型基础概…...
接口测试用例设计:超详细防御体系与分层校验实践
1. 为什么“超详细”三个字在接口测试用例里不是修饰词,而是生死线我带过三支不同行业的测试团队——金融支付、SaaS中台、IoT设备管理平台。每次新人入职第一周,我都会收走他们写的前5条接口测试用例,逐行标红批注。不是因为格式不对&#x…...
告别繁琐审核!实测AI Agent如何重塑复杂非结构化票据与合同处理流程?
摘要:在企业数字化转型步入深水区的2026年,处理复杂非结构化票据与合同已成为横亘在财务、法务部门面前的“最后一公里”难题。传统RPA因UI变动易崩溃、主流智能体因缺乏API适配而无法落地,导致大量业务仍依赖低效的人工操作。本文由「企服AI…...
服务器数据下载安全:实时加密与动态访问控制实战
1. 这不是又一个“加个密码”的方案,而是服务器数据流动的实时安检闸机IP-guard安全网关——这个名字在企业IT运维圈里,常被误读为“桌面端U盘管控工具”或“员工上网行为审计系统”。但真正用过它来守服务器的人,会立刻意识到:它…...
独立开发者如何利用Taotoken的TokenPlan在项目初期有效控制AI实验成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken的TokenPlan在项目初期有效控制AI实验成本 对于独立开发者或学生而言,在构建AI应用原型时&…...
