从零搭建个人网站:云服务器、Nginx与HTTPS全流程实战
发布时间:2026/10/9 17:35:12 锦皓数字建站

1. 个人网站搭建的整体设计与思路拆解1.1 为什么选择云服务器而不是虚拟主机或建站平台很多人第一次动念做个人网站第一反应是去找那种“一键建站”的平台拖拖拽拽就能出一个页面。但用过一段时间就会发现免费套餐限制多、自定义能力弱、数据不在自己手里想加个自定义功能处处碰壁。我当初也走过这条路后来果断转向云服务器自建核心原因有三个。第一是完全的控制权。服务器在你手里你想装什么环境就装什么环境想开什么端口就开什么端口想换什么程序就换什么程序。这种自由度是托管平台给不了的。第二是成本可控且长期划算。一台入门级云服务器一年下来也就百来块钱如果赶上活动还能更便宜而托管平台想要去掉广告、绑定独立域名往往要付更高的月费。第三是学习价值。自己从零搭一遍Linux 基础操作、Web 服务器配置、域名解析、HTTPS 证书这些知识全都过一遍这些技能在别的地方也用得上。当然云服务器方案也有门槛。你需要懂一点命令行需要自己处理安全配置需要自己维护环境。但说实话这些东西花一个周末就能摸清楚后面就是熟能生巧的事。1.2 整体架构从域名到页面的完整链路一个个人网站跑起来背后其实是一条完整的链路。我用一个生活化的类比来解释域名就像你家的门牌号DNS 解析就像快递员根据门牌号找到你家小区云服务器就是你家的房子Web 服务器软件就是家里的管家网站程序就是你家里布置好的房间而 HTTPS 证书就是给家门加的一把安全锁。具体来说用户打开浏览器输入域名浏览器先向 DNS 服务器查询这个域名对应的 IP 地址拿到 IP 之后向这台服务器发起请求服务器上的 Web 服务器软件比如 Nginx接收到请求根据配置决定是返回静态文件还是转发给后端程序处理最后把内容返回给浏览器渲染出来。整条链路里任何一个环节出问题网站都打不开。所以搭建的过程本质上就是把这条链路一段一段打通。1.3 方案选型的几个关键决策点在动手之前有几个决策点需要提前想清楚不然后面改起来很麻烦。操作系统选什么。Linux 是绝对主流其中 Ubuntu 和 CentOS 用得最多。Ubuntu 的软件源更新快、社区文档丰富对新手更友好CentOS 稳定但版本更新慢。我个人建议新手直接上 Ubuntu 的 LTS 版本遇到问题搜索出来的答案也最多。Web 服务器选 Nginx 还是 Apache。Nginx 在高并发场景下表现更好配置简洁现在已经是事实上的主流选择。Apache 历史更久模块丰富但配置相对繁琐。个人网站用 Nginx 完全够用而且网上教程一抓一大把。网站程序用静态还是动态。如果你只是想放一些介绍页面、作品展示纯静态 HTML 就够了速度快、维护简单、安全性高。如果需要博客功能、评论、后台管理那就需要动态程序比如用现成的博客系统或者自己写。我的建议是先从静态页面起步跑通了再逐步加功能。数据库要不要装。如果网站程序需要存储数据比如文章、用户信息那就需要数据库。MySQL 是最常见的选择轻量场景也可以用 SQLite。不需要的话就别装少一个组件少一份维护成本和安全隐患。2. 云服务器选购与基础环境配置的核心细节2.1 服务器配置怎么选才不浪费钱打开云服务器购买页面一堆配置选项容易让人懵。我按实际经验给一个参考。对于个人网站这种访问量不大的场景1 核 2G 内存的配置基本够用。如果预算紧张1 核 1G 也能跑起来但要注意内存吃紧的时候可能会触发系统杀进程。带宽方面1M 到 3M对于个人站点足够除非你要放大量图片或视频。系统盘40G起步够装系统和常用软件。这里有个坑要提醒很多云厂商的“入门套餐”看起来便宜但续费价格会翻好几倍。买之前一定要看清楚续费价别只看首年价格。另外不同地域的服务器访问速度差异明显选离你主要访问群体近的地域。注意购买时留意是否有“突发性能实例”这类字眼这类实例的 CPU 性能是受限的平时够用但高负载时会卡。个人网站一般无所谓但如果你要跑一些计算任务就要避开。2.2 第一次登录服务器要做的事买完服务器你会拿到一个公网 IP、一个用户名通常是 root和密码或密钥。用 SSH 工具连上去Windows 上可以用系统自带的终端或者一些图形化工具Mac 和 Linux 直接开终端就行。连上之后第一件事不是急着装软件而是做基础安全加固。我踩过的坑是刚买来的服务器如果不做任何防护几天之内就会被各种自动化脚本扫描和尝试登录。具体要做这几件事。第一修改 SSH 默认端口。默认的 22 端口是被扫描最多的改成一个不常用的端口能挡掉大部分自动化攻击。第二禁用 root 密码登录改用密钥登录。密钥登录比密码安全得多基本不可能被暴力破解。第三创建一个普通用户用于日常操作需要管理员权限时再用 sudo避免一直用 root 操作带来的风险。第四配置防火墙只开放必要的端口。# 修改 SSH 配置文件的示例路径通常是 /etc/ssh/sshd_config # 修改端口 Port 你的自定义端口 # 禁用 root 密码登录 PermitRootLogin prohibit-password # 禁用密码登录改用密钥后 PasswordAuthentication no改完配置记得重启 SSH 服务而且在断开当前连接之前一定要另开一个终端测试新配置能否登录成功否则配置写错了可能把自己锁在外面。2.3 系统更新与常用工具安装安全加固做完接下来更新系统软件包并安装常用工具。这一步很多人会跳过但系统自带的软件版本可能比较旧存在已知问题。# Ubuntu 系统更新 sudo apt update sudo apt upgrade -y # 安装常用工具 sudo apt install -y curl wget vim git ufwcurl和wget用于下载文件vim是命令行编辑器git用于拉取代码ufw是防火墙管理工具。这些工具后面都会用到。防火墙配置方面用 ufw 的话先允许你修改后的 SSH 端口再允许 HTTP 和 HTTPS最后启用防火墙。sudo ufw allow 你的SSH端口/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable提示启用防火墙之前务必确认 SSH 端口已经放行否则启用后当前连接会断而且可能连不回去。这是新手最容易翻车的地方之一。3. 域名解析与网站环境搭建的实操过程3.1 域名注册与实名认证的注意事项域名是网站的门面选一个好记的域名很重要。注册域名本身很简单在任意域名注册服务商那里搜索、下单、付款就行。但有几个细节要注意。域名后缀的选择。常见的.com、.net、.cn都可以.com认知度最高但好域名基本被注册完了。一些小众后缀价格便宜但部分场景下兼容性可能有问题。实名认证是必须的国内注册的域名都要完成实名认证才能正常解析一般提交后一两天内通过。域名和服务器要在同一家买吗。不一定。域名在哪注册都行解析的时候把记录指向你的服务器 IP 就可以。但如果在同一家买管理起来方便一些解析生效也快。3.2 DNS 解析配置把域名指向你的服务器域名注册好之后进入域名管理后台找到 DNS 解析设置。这里要添加一条A 记录把域名指向你服务器的公网 IP。具体操作是记录类型选 A主机记录填代表主域名或www代表 www 子域名记录值填你的服务器公网 IPTTL 用默认值就行。如果你想主域名和 www 都能访问就加两条 A 记录。解析添加后不是立刻生效的通常几分钟到几小时不等取决于 TTL 设置和各地 DNS 缓存。可以用ping 你的域名来测试是否已经解析到正确的 IP。注意如果服务器在国内域名解析到国内服务器通常需要域名已完成实名认证否则可能被拦截。这是合规要求提前做好就行。3.3 安装 Nginx 并配置第一个站点环境准备好之后开始装 Web 服务器。Nginx 的安装很简单。sudo apt install -y nginx sudo systemctl start nginx sudo systemctl enable nginx装完之后在浏览器输入服务器 IP如果看到 Nginx 的默认欢迎页面说明 Web 服务器已经跑起来了。接下来配置你的站点。Nginx 的站点配置文件通常放在/etc/nginx/sites-available/目录下然后在/etc/nginx/sites-enabled/里创建软链接来启用。我习惯给每个站点单独建一个配置文件方便管理。server { listen 80; server_name 你的域名 www.你的域名; root /var/www/你的站点目录; index index.html; location / { try_files $uri $uri/ 404; } }这个配置的意思是监听 80 端口匹配你的域名网站根目录指向指定路径默认首页是 index.html。配置写好后先测试配置有没有语法错误再重载 Nginx。sudo nginx -t sudo systemctl reload nginxnginx -t这个命令一定要养成习惯每次改完配置都跑一下能提前发现大部分低级错误。3.4 上传网站文件与目录权限设置网站根目录建好之后把你的 HTML、CSS、JS 文件传上去。传输方式可以用 scp 命令也可以用图形化的 SFTP 工具。# 用 scp 上传文件的示例 scp -r ./本地网站目录/* 用户名服务器IP:/var/www/你的站点目录/文件传上去之后要注意目录权限。Nginx 运行的用户通常是 www-data需要对网站目录有读取权限。如果权限不对访问会报 403 错误。# 设置目录所有者 sudo chown -R www-data:www-data /var/www/你的站点目录 # 设置目录权限 sudo chmod -R 755 /var/www/你的站点目录755 的意思是所有者可读写执行其他人可读可执行。对于纯静态网站这样设置就够了。如果网站程序需要写文件比如上传功能那对应的目录要单独给写权限但不要整个站点都给 777那等于把门敞开。4. HTTPS 证书配置与网站安全加固4.1 为什么必须上 HTTPS现在浏览器对 HTTP 网站会明确标注“不安全”用户看到这个提示信任度直接下降。而且 HTTP 传输的内容是明文的中间任何一个节点都能看到你传输了什么。HTTPS 通过加密解决了这个问题同时还能防止内容被篡改。获取证书现在有免费方案不用花钱。最常用的是通过自动化工具申请和续期整个过程几分钟就能搞定。4.2 用自动化工具申请并配置证书以常见的证书申请工具为例安装之后运行一条命令它会自动读取你的 Nginx 配置识别域名申请证书并且自动修改 Nginx 配置加上 HTTPS 相关设置。# 安装证书工具 sudo apt install -y certbot python3-certbot-nginx # 申请证书并自动配置 sudo certbot --nginx -d 你的域名 -d www.你的域名运行过程中会提示你输入邮箱用于证书到期提醒同意服务条款然后选择是否将 HTTP 请求重定向到 HTTPS。强烈建议选择重定向这样所有访问都会自动走加密连接。证书默认有效期是 90 天但工具会自动创建一个定时任务来续期基本不用手动管。你可以手动测试一下续期是否正常。sudo certbot renew --dry-run4.3 安全加固的几个实用配置HTTPS 配好之后还可以在 Nginx 配置里加一些安全相关的响应头提升网站的安全性。# 在 server 块中添加 add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN; add_header Referrer-Policy strict-origin-when-cross-origin;这几个头的作用分别是禁止浏览器猜测文件类型、防止网站被嵌入到其他页面的 iframe 里、控制 Referer 信息的发送策略。都是很实用的基础防护。另外隐藏 Nginx 版本号也是个好习惯。在配置文件里加上server_tokens off;这样出错页面就不会暴露你用的具体版本减少被针对性攻击的可能。提示安全加固不是一次性的工作而是一个持续的过程。定期更新系统和软件、关注安全公告、检查日志这些习惯比任何单次配置都重要。5. 常见问题排查与实操避坑经验5.1 网站打不开的排查思路网站打不开是最常见的问题排查要按链路一段一段来不要东一榔头西一棒子。第一步确认服务器是否正常运行。在云控制台看看实例状态用 SSH 能不能连上。连不上说明服务器本身有问题先解决这个。第二步确认 Web 服务器是否在跑。sudo systemctl status nginx看一下状态如果是 stopped 或 failed先启动或排查错误日志。第三步确认端口是否放行。云厂商的安全组和系统防火墙是两层都要放行 80 和 443 端口。很多人只配了系统防火墙忘了云控制台的安全组结果怎么都访问不了。第四步确认域名解析是否正确。ping 你的域名看看解析出来的 IP 是不是你的服务器 IP。如果不对检查 DNS 解析配置。第五步看 Nginx 错误日志。日志通常在/var/log/nginx/error.log里面会记录具体的错误原因比如权限问题、配置错误、后端连接失败等。5.2 常见问题速查表问题现象可能原因排查方法浏览器提示连接超时安全组或防火墙未放行端口检查云控制台安全组和系统防火墙规则显示 Nginx 默认页站点配置未生效或域名不匹配检查 server_name 配置和软链接是否创建403 Forbidden目录权限或首页文件缺失检查目录权限和 index 文件是否存在404 Not Found文件路径错误或 root 配置不对检查 root 指向的目录和实际文件位置502 Bad Gateway后端程序未启动或端口不对检查后端服务状态和代理配置HTTPS 证书报错证书过期或域名不匹配检查证书有效期和绑定的域名5.3 几个我踩过的坑和独家经验坑一改完 SSH 端口没放行就重启。这个前面提过但真的太容易犯了。改端口之前先在防火墙里放行新端口改完用新端口测试能登录再关掉旧端口。坑二网站文件用 root 上传导致权限混乱。用 root 通过 scp 上传的文件所有者是 rootNginx 读不了。要么上传后改所有者要么直接用普通用户上传。坑三证书自动续期失败没发现。虽然工具会配置自动续期但偶尔会因为配置变动导致续期失败。建议定期手动跑一下certbot renew --dry-run检查或者配置一个到期提醒。坑四网站上线后就不管了。系统不更新、日志不清理、备份不做等到出问题的时候才发现什么都晚了。我现在养成的习惯是每周花十分钟看看服务器状态每月做一次完整备份。坑五把所有东西都装在一台服务器上还开了所有端口。数据库、缓存、各种服务全堆在一起端口全开。一旦某个服务有漏洞整台机器就危险了。正确的做法是最小化安装只开必要的端口服务之间做好隔离。5.4 网站备份与迁移的实用方案网站跑起来之后备份是必须做的事。我见过太多人因为没备份服务器出问题后几年的内容全没了。备份分两部分网站文件和数据库。网站文件直接打包压缩就行数据库用导出命令生成 SQL 文件。然后把这些备份文件下载到本地或者传到另一个存储位置。# 打包网站文件 tar -czf backup_$(date %Y%m%d).tar.gz /var/www/你的站点目录 # 导出数据库如果用了数据库 mysqldump -u 用户名 -p 数据库名 backup_$(date %Y%m%d).sql可以写一个简单的脚本配合系统的定时任务每天自动备份。备份文件保留最近若干份旧的自动清理避免占满磁盘。迁移的话把备份文件传到新服务器恢复文件和数据库改一下 DNS 解析指向新 IP等解析生效就完成了。整个过程顺利的话半小时以内。6. 网站上线后的持续维护与功能扩展6.1 日常维护清单网站上线只是开始后面需要持续维护。我整理了一份日常检查清单按频率来分。每天看一眼网站能不能正常访问检查服务器负载是否正常。这个花不了一分钟但能第一时间发现问题。每周检查系统更新看看有没有安全补丁需要打。查看一下访问日志有没有异常的访问模式。清理一下临时文件。每月做一次完整备份并验证备份文件可用。检查证书有效期。回顾一下磁盘使用情况该清理的清理。每季度审视一下安全配置是否还有改进空间。更新一下网站内容。检查一下各个服务的版本该升级的升级。6.2 性能优化的几个实用手段个人网站一般访问量不大性能不是大问题但做一些基础优化能让体验更好。开启 Gzip 压缩。在 Nginx 配置里开启后文本类文件传输时会自动压缩能显著减少传输体积。gzip on; gzip_types text/plain text/css application/json application/javascript text/xml; gzip_min_length 1000;配置静态资源缓存。给图片、CSS、JS 这类不常变的文件设置较长的缓存时间用户第二次访问就不用重新下载了。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control public, immutable; }图片优化。上传前把图片压缩一下或者用 WebP 格式体积能小很多。这是最容易被忽视但效果最明显的优化。6.3 功能扩展的方向建议网站跑稳之后可以考虑逐步加功能。但我的建议是按需扩展不要为了加而加。想写博客可以装一个现成的博客系统功能完善、主题丰富。想展示作品集静态页面加一些 CSS 动画就够了。想加评论功能可以用第三方的评论服务省去自己维护数据库的麻烦。想做数据统计用轻量的统计工具别装那种特别重的分析平台。每加一个功能都要考虑它带来的维护成本和安全风险。一个功能如果几个月都用不上一次那不如不加。网站的核心价值在于内容而不是功能堆砌。6.4 关于成本控制的经验最后聊聊钱的事。个人网站的成本主要是服务器和域名。服务器方面新用户优惠力度大但续费贵可以关注一些促销节点。域名一年几十块不算大头。如果想进一步省钱可以考虑把静态网站托管到对象存储上成本比云服务器低很多而且不用自己维护服务器。但动态功能就受限了。所以这取决于你的网站类型。我的做法是主站放在云服务器上图片等静态资源放到对象存储加内容分发网络这样既保证了功能灵活性又降低了带宽成本。这套组合用下来一年总成本控制在一个很舒服的范围内。整个搭建过程走下来最大的体会是动手之前先把链路想清楚动手之后每一步都验证再往下走。很多人卡住不是因为技术难而是因为跳步了出了问题不知道是哪一环的锅。按部就班来一个周末就能拥有一个完全属于自己的个人网站。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。