云计算百科
云计算领域专业知识百科平台

手动搭建个人网站:域名、服务器、Nginx与WordPress全配置指南

1. 内容整体设计与思路拆解

1.1 先说清楚:个人网站配置到底在配什么

我接触个人网站配置这个事也有好些年了,最早是为了放自己的简历和作品集,后来慢慢折腾成技术博客、摄影展示站、甚至帮朋友搭了小型电商页。很多刚入门的朋友以为“个人网站配置”就是把一个安装包传上去,点几下下一步就完事,实际上真正搭建一个能稳定访问、不报错、能自己控制的个人网站,你至少要把四层东西配通:域名解析、服务器运行环境、建站程序、HTTPS证书。这四层只要有一层配置错了,网站要么打不开,要么打开了全是样式错乱,要么过几天莫名其妙被浏览器拦截。

而这篇内容里,我不打算讲那种“面板一键部署”的路子,因为我自己踩过坑:面板虽然上手快,但隔三差五出兼容性问题,而且你完全不知道它在你服务器里做了什么操作。我更推荐用命令行手动配置,哪怕慢一点,但你清楚每一步在干什么,出问题时才有排查方向。毕竟是个人网站,掌控感比速度重要。

1.2 技术选型:每一种选择背后都有代价

个人网站的技术栈看起来五花八门,其实核心决定只有几个:

  • 域名从哪买?国内服务商还是海外服务商?这决定了ICP备案要不要做。
  • 服务器用哪家?虚拟主机还是云服务器?配置多少?
  • 网站程序选WordPress还是Typecho、Hexo这种静态博客?
  • 数据库用MySQL还是SQLite?
  • 要不要加CDN、Redis、云存储这些附加组件?

我给你分享我最终选定的方案,以及为什么这么选。

域名方面,因为我的网站读者主要在国内,我用的是阿里云购买的.com域名,按规矩做了ICP备案。如果你用海外服务商的域名并且服务器也放在海外,可以跳过备案,但国内访问速度会不稳定。我的原则是:面向国内访客就用国内服务商+备案,面向全球访客或者只是自己测试用,就选海外服务器,简单省事。

服务器层面,我用的是阿里云的轻量应用服务器,2核4G内存,带宽5M,跑一个个人博客绰绰有余。你要是纯新手,我建议最低1核2G起步,不要买那种128M内存的虚拟主机,真的跑不动WordPress。操作系统选Ubuntu 22.04 LTS,因为它社区资源多、遇到问题容易搜到答案,而且官方维护周期长。

网站程序我最后选了WordPress,原因很朴素:生态最丰富。无论是主题、插件还是问题解决方案,你几乎都能找到现成的。Typecho更轻量,但插件和主题少,适合爱折腾且不怕折腾的人。如果你写技术博客且不介意用Markdown文件管理内容,Hexo或Hugo这种静态站生成器也不错,但它们没有后台管理界面,更新文章需要本地编译后再推送,我个人觉得不够直觉。

1.3 为什么不用一键面板:我的实际体会

很多帖子推荐宝塔面板,我也装了试过。刚开始确实爽,可视化操作、一键装环境、在线改文件,感觉特别省心。但用了几个月后我发现几个问题:一是面板本身会占用一定系统资源,在低配服务器上尤其明显;二是面板为了兼容不同环境,预装了很多你用不到的组件,增加了被攻击的面;三是一旦面板程序自身出现Bug,你又不太会修,整个网站就跟着瘫了。

后来我干脆重装系统,全部手动配置,反而觉得世界清静了。手动配置的关键就在于“你知道自己在做什么”,Nginx配置文件里每一行是干什么的,MySQL用户权限是什么意思,SSL证书续期脚本什么时候跑,这些都清清楚楚,出问题了你不会慌。这篇博文里的所有配置都是走这个路线的,你在看的时候也可以按自己的服务器情况调整。

2. 核心细节解析与实操要点

2.1 服务器初始化:不要跳过这些基础动作

我第一次配置服务器时,因为图快,很多初始化步骤直接跳过了,结果后面吃了大亏。这里把必做的动作列出来,每一步都不要省。

更新系统软件源是第一步。Ubuntu刚装好时,软件源是最原始的版本,直接安装Nginx很有可能装到旧版本。执行:

sudo apt update && sudo apt upgrade -y

这一步会把系统里的所有软件包更新到当前软件源的最新状态,同时把一些安全补丁打上。尤其是新出的安全漏洞补丁,很多时候就靠这次更新来带上。

接着创建一个普通用户,别直接用root跑网站。root权限太大,一旦网站程序被利用,攻击者可能直接控制整台服务器。创建用户的时候顺手加入sudo组:

sudo adduser yourname
sudo usermod -aG sudo yourname

然后修改SSH配置。为了安全,我建议改掉默认的22端口,同时禁止root直接登录。修改

/etc/ssh/sshd_config

文件,找到

#Port 22

这一行改成自定义端口号,比如

Port 22522

,找到

PermitRootLogin yes

改成

PermitRootLogin no

,改完重启SSH服务:

sudo systemctl restart sshd

这里提醒一下:改SSH端口前先确保防火墙放行了新端口,不然你会把自己锁在服务器外面。用Ubuntu自带的UFW防火墙的话,先放行新端口再重启SSH服务,顺序一定不能反。

2.2 Web环境安装:Nginx、PHP、数据库的版本搭配

个人网站配置里最容易出错的就是环境版本不兼容。我推荐的组合是Nginx 1.18以上 + PHP 8.1以上 + MySQL 8.0,这个组合很成熟,WordPress最新版完全兼容。

安装Nginx很简单:

sudo apt install nginx -y

安装PHP时要注意,光装php-fpm还不够,还得装一堆扩展插件,否则WordPress会报缺少函数。我建议一次装全:

sudo apt install php php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip php-imagick php-intl -y

数据库安装MySQL服务端:

sudo apt install mysql-server -y

装完后执行安全初始化脚本,它会让你设置root密码、删除匿名用户、禁止远程root登录,按提示一步步选就行:

sudo mysql_secure_installation

关于PHP版本,有些老教程让你装5.6或7.x,但那些版本现在已经停止安全更新了,别用。PHP 8.1的地段性能也比老版本好很多,尤其是WordPress搭配Opcache扩展后,页面响应速度提升非常明显。

2.3 数据库和网站目录的权限规划

安装完成不等于配置完成。个人网站配置里最容易被忽略的是“最小权限原则”实操版。

首先建数据库和用户,这里不直接用root跑网站,而是单独给网站建一个数据库账号:

sudo mysql -u root -p

进入MySQL命令行后创建数据库和用户。你自己记好密码,后面WordPress安装时要填:

CREATE DATABASE wp_database DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON wp_database.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

数据库字符集一定要用utf8mb4,不要用老旧的utf8,因为后者存不了emoji和生僻字,比如文章标题里带四字节字符时会显示成问号。

网站目录我放在

/var/www/html

下,这个目录对应的Nginx配置在后面的站点配置里会用到。目录权限建议这样设置:

sudo mkdir -p /var/www/html
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

其中

www-data

是Nginx和PHP-FPM的默认运行用户,把目录owner改成它,网站程序才能正常读写文件。你后续如果通过FTP或SFTP上传主题、插件,也需要用一个能写入该目录的用户,而不是直接给777权限。777权限太危险,任意用户都能改文件,网站很容易被篡改。

3. 实操过程与核心环节实现

3.1 域名解析:记录类型别选错

域名解析是整个配置过程中最基础也最直观的一步。我的域名在阿里云控制台操作,原理通用:去你的域名服务商后台,找到“解析设置”或“DNS管理”,添加解析记录。

如果你的网站服务器只有一个IPv4地址,需要两条记录:

  • 主机记录填

    @

    ,记录类型选A,记录值填服务器公网IP。

  • 主机记录填

    www

    ,记录类型选A,记录值填相同的IP。

这个

@

代表根域名,别人访问

example.com

时匹配的就是它;

www

是指

www.example.com

。IP填不对或者漏了一条,访问时就解析不到服务器。

还有一个常见的坑是解析记录被之前的旧记录占用。比如你域名曾经绑过别的主机,IP值早就变了,但旧记录没删掉,导致新配置的站点怎么都访问不了。我建议在添加新记录前,先清掉同主机名的旧记录,再重新添加。

DNS生效时间不是实时的。有的地区几分钟就生效,有的要等几小时。可以在自己的电脑上打开命令行执行

ping example.com

看看返回的IP是不是你的服务器IP,如果对不上,不要着急,等一等再试。

3.2 SSL证书申请与配置:用Certbot最省心

网站没有HTTPS证书的话,浏览器地址栏会提示“不安全”,而且某些功能会被浏览器限制,比如获取用户地理位置、通知权限等。个人网站配置中我强烈建议上HTTPS,现在申请免费证书很方便。

Certbot是Let‘s Encrypt的官方客户端,配合Nginx插件可以自动完成证书申请和配置:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot –nginx -d example.com -d www.example.com

执行过程中会让你填写一个用于接收过期通知的邮箱地址,然后同意服务条款。成功后会问你“是否自动把HTTP请求重定向到HTTPS”,根据自己需要选择。我一般选2,自动做跳转,省得后面再改Nginx配置。

证书有效期是90天,Certbot可以在证书到期前自动续期。官方推荐的方式是添加一个定时任务,我用的命令:

sudo crontab -e

在打开的编辑界面底部加一行:

0 3 * * * /usr/bin/certbot renew –quiet –renew-hook "systemctl reload nginx"

这行的意思是每天凌晨3点检查一次证书状态,如果需要续期就续,续完后自动重载Nginx让新证书生效。Certbot自带随机延时机制,不会给你的域名服务商造成接口压力。

3.3 Nginx站点配置:手写配置其实不难

Nginx的站点配置文件放在

/etc/nginx/sites-available/

,启用则是在

sites-enabled

目录里创建软链接。我写一个基础但完整的配置:

server {
listen 80;
server_name example.com www.example.com;

root /var/www/html;
index index.php index.html index.htm;

access_log /var/log/nginx/myblog_access.log;
error_log /var/log/nginx/myblog_error.log;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \\.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

location ~* \\.(jpg|jpeg|png|gif|ico|css|js|woff2?)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}

location ~ /\\.ht {
deny all;
}
}

这段配置里很多人看不懂

try_files $uri $uri/ /index.php?$args;

这行的意思。它的作用是:当用户访问一个路径时,先在网站目录里找有没有对应的静态文件,有就直接返回;没有就把请求转给

index.php

处理。这是WordPress这类动态网站的通行配置,如果没有这行,去访问一个不存在的分类页时会直接404。

PHP-FPM的socket路径要根据你安装的PHP版本填,我这里是8.1。你查看一下自己的

sites-enabled

里有没有类似的include路径,不会可以执行

dpkg -l | grep php

看安装的是哪个版本。

保存配置后,先测试一下语法:

sudo nginx -t

看到

test is successful

再重载:

sudo systemctl reload nginx

3.4 安装WordPress到指定目录

下载WordPress我建议从官网下载中文包,国内服务器访问官网比较慢,可以用国内的镜像站。这里只演示标准流程:

cd /tmp
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
tar -xzf latest-zh_CN.tar.gz
sudo cp -r wordpress/* /var/www/html/
sudo chown -R www-data:www-data /var/www/html/

然后访问

https://example.com

,WordPress安装向导会自动跳出来。填上之前创建的数据库名、数据库用户名和数据库密码,数据库主机默认填

localhost

,表前缀可以保持默认

wp_

,除非你有很强的安全洁癖,否则不建议改,因为改了之后很多插件默认写法会有兼容问题。

安装向导的最后一步会让你填站点标题、管理员用户名和密码。管理员用户名别用

admin

,现在很多人第一轮扫描就是用

admin

尝试登录后台,强烈建议换成你自己拼的、不容易猜的词。

4. 常见问题与排查技巧实录

4.1 网站打不开:按这个顺序排查

我遇到被问得最多的问题就是“网站打不开了”,这个描述太笼统了,我建议你自己先按顺序排查,大部分问题可以自己解决。

先看域名解析是否正常。在你本地电脑的终端里执行:

ping example.com

如果域名解析出的IP不是你服务器的IP,说明解析记录有问题,或者是还没生效。如果解析正常,接着检查服务器端口是否为外网开放。用另一个终端工具执行

telnet 服务器IP 80

,如果连接失败,大概率是云服务商安全组或防火墙没有放行80和443端口。这一步最容易忽略,很多人Nginx配得好好的,但云控制台的安全组忘了开端口,网站死活打不开。

然后看Nginx进程和PHP-FPM进程是否在运行:

sudo systemctl status nginx
sudo systemctl status php8.1-fpm

如果进程都是active,再去看错误日志,Nginx默认日志路径就是我在配置里写的

/var/log/nginx/

下面的error.log文件,我每次排查问题第一件事翻它,比瞎猜高效太多。

4.2 NGINX返回404或403

404的情况要看是哪种:首页404,还是内页404,还是刷新之后404。

首页404通常是Nginx的

root

路径配错了,比如网站文件实际放在

/var/www/html

,但配置里写的

/var/www/html/wordpress

,那当然找不到。打开配置文件确认一下root路径和实际目录一致。

内页404多数是伪静态规则没生效。WordPress在Nginx上的伪静态就是前面说的

try_files

那一行,如果这行缺失或写错,访问一个分类地址时Nginx会直接找

/category/xxx

这个真实路径,发现不存在就404了。

403则多半是目录权限问题,比如

/var/www/html

的owner不是

www-data

,或者权限设置为

777

后又被系统安全模块拦截。我建议按我前面设置的

755

www-data

权限来操作。

4.3 数据库连接错误怎么办

WordPress安装页面填完数据库信息后提示“建立数据库连接时出错”,这个报错是个经典问题。

先在服务器上确认MySQL服务是否启动:

sudo systemctl status mysql

然后测试数据库用户是否能正常登录:

mysql -u wp_user -p

如果提示

Access denied for user

,可能是密码错误,也可能是用户权限没生效,回到MySQL里执行

FLUSH PRIVILEGES;

再看。还有一种情况是PHP-FPM用的socket路径和MySQL里的socket路径不匹配,最常见于你同时装了MariaDB和MySQL两个数据库服务,导致冲突。我建议只保留一个数据库服务,装MySQL就别再装MariaDB,装MariaDB也同理。

4.4 后台登录跳转到wp-admin时死循环

这个坑我碰到过一次,表现是登录后一直跳回

wp-admin

,但就是进不去后台。查了半天才发现原因是站点URL配置和实际访问的域名不一致。

WordPress后台的

设置->常规

里有两个字段:WordPress地址和站点地址。如果站点地址写的是

http://example.com

,而你又强制开启了HTTPS跳转,那么登录请求在跳转过程中就丢失了。解决办法是直接在数据库里改这两个选项。用MySQL命令行执行:

UPDATE wp_options SET option_value='https://example.com' WHERE option_name='siteurl';
UPDATE wp_options SET option_value='https://example.com' WHERE option_name='home';

替换成你自己的域名后刷新页面,再重新登录就正常了。

4.5 常见问题速查表

现象

可能原因

排查思路

访问超时 安全组/防火墙未放行端口 检查云控制台和UFW
首页404 root路径不对 看Nginx config里root指向真实目录
内页404 伪静态配置缺失

try_files

那行

403 Forbidden 目录权限不对 改为www-data用户+755权限
数据库连接失败 密码错或服务未开启 检查MySQL状态和用户权限
后台进不去 siteurl/home配置错误 在数据库里改wp_options表
样式全乱 HTTPS证书无效或资源路径错误 检查SSL配置和WordPress地址

5. 日常维护与安全加固经验

5.1 定时备份:别等数据丢了才后悔

个人网站的数据量可能不大,但每一篇文章都是心血,数据库更是网站的命根子。我见过有人写了很久的博客,结果服务器误操作导致数据库全没了,那种感觉真的很糟糕。

备份分两部分:网站文件和数据库。

网站文件的备份用rsync增量同步到别的目录就行:

sudo rsync -av –delete /var/www/html/ /backup/www/

数据库备份用mysqldump:

mysqldump -u wp_user -p wp_database > /backup/db_$(date +%Y%m%d).sql

想定时执行的话,写一个shell脚本,然后用cron每天跑一次。脚本里加一句“只保留最近7天的备份”,避免磁盘被备份文件塞满:

find /backup -name "*.sql" -mtime +7 -delete

这样即使服务器硬盘出问题,你也能从备份里恢复出最新版本的网站。

5.2 几个实用的安全加固动作

WordPress自身的安全加固是个大话题,但我分享几条对个人网站最有价值的:

  • 后台登录地址用插件改成自定义路径,能挡住绝大多数字典攻击。别想着只用改文件名那种土办法,直接装个WPS Hide Login之类的插件,把

    /wp-login.php

    改成

    /mylogin2025

    这种只有自己知道的路径。

  • 启用登录失败限制,连续输错密码几次后锁定一段时间。这个可以装Limit Login Attempts Reloaded插件,或者干脆在Nginx层面对

    wp-login.php

    的请求做频率限制。

  • 别装一堆用不上的插件。每多一个插件就多一份被攻击的风险面,而且很多插件之间还有兼容冲突,我网站慢下来的原因一大半都是插件堆得太多。
  • 定期更新WordPress核心、主题和插件。更新前一定先做备份,因为我遇到过主题更新后样式全乱的场景,如果是线上环境,那可就只能靠备份回滚了。

5.3 性能优化:让个人网站也能有丝滑体验

个人网站访问量一般不大,但响应速度仍然能给人非常好的印象。我做了三个优化动作,效果明显:

开启PHP OPcache。修改

/etc/php/8.1/fpm/php.ini

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60

这里的

revalidate_freq=60

表示PHP文件修改后60秒内,服务器会直接用内存里的缓存,不需要每次都重新编译。网站功能不变时性能提升很大。

给静态资源加浏览器缓存。Nginx里我已经写了静态资源那行

expires 30d

,这样用户浏览过一次网站后,图片和CSS、JS文件在浏览器里会缓存30天,再次访问时速度会快不少。

Nginx启用Gzip压缩静态文本:

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml application/json;

网页里大量文本经过压缩后再传输,体积能小一半以上,对5M小带宽的服务器非常友好。

6. 结语:配置完成只是开始

个人网站配置这个项目,表面上是用一系列命令和文件把网站跑起来,实际上是一次系统思维和提错策略的完整训练。从域名解析、Nginx配置、数据库权限、SSL证书到伪静态规则,每一环都需要你理解背后的“为什么”,而不是单纯复制粘贴命令。

我始终觉得,个人网站和大型站点最大的区别在于“可控性”。它不需要扛住几十万并发,也不需要复杂的微服务架构,但你需要清楚地知道它每一部分是怎么工作的。这样万一哪天出问题了,你能第一时间定位到问题所在,而不是打个电话问客服或者满世界找教程。

如果你已经按这套流程把你的个人网站配置起来了,我建议下一阶段可以试着在网站上记录自己的配置过程。写下来最初会觉得很麻烦,但坚持一段时间你会发现,这不仅是给访问者看的,更是给你自己的一份极好的技术笔记。很多细节久了真的会忘,翻自己之前写下的配置笔记,比翻任何搜索引擎都好使。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 手动搭建个人网站:域名、服务器、Nginx与WordPress全配置指南
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!