Linux虚拟主机配置这件事,本质就是在租来的服务器上搭建网站运行环境。听起来偏技术,拆开之后就只有几个步骤,很多人踩过坑,我把自己实操和帮别人处理故障积累的经验整理出来。
先确认服务器系统版本。SSH连接服务器后执行 cat /etc/os-release,就能查看系统名称与版本。Ubuntu、CentOS是主流,Ubuntu常用22.04和24.04版本,CentOS7已经停止维护,新搭建环境建议换成Rocky Linux或者AlmaLinux。系统版本决定后续命令写法,Ubuntu使用apt,CentOS系列使用yum或dnf,混用命令会直接报错。

搭建环境有两种方式。第一种使用宝塔面板这类图形化工具,第二种纯命令行手动安装。新手推荐先用命令行操作,熟悉底层逻辑,理解之后再考虑是否安装面板。手动部署速度慢一点,但出现故障时知道去哪里查看日志,定位卡点。
安装Nginx。Ubuntu执行 sudo apt install nginx,安装完成执行 systemctl start nginx 启动服务,再执行 systemctl enable nginx 设置开机自启。浏览器访问服务器IP,出现Nginx欢迎页面就代表Web服务正常运行。CentOS系列替换命令为 sudo yum install nginx,其余操作逻辑一致。
Nginx配置文件存放路径在 /etc/nginx/。主配置文件为 nginx.conf,单独站点配置一般放在 /etc/nginx/conf.d/ 或是 /etc/nginx/sites-available/。Ubuntu默认采用sites-available搭配sites-enabled软链接机制,CentOS直接在conf.d目录新建.conf配置文件。两种方式效果一致,看你使用的操作系统。
创建站点配置。进入conf.d目录,新建文件,命名示例 example.com.conf。文件内的server块先填写 listen 80;,再写 server_name example.com www.example.com;,root /var/www/example.com; 指定网站目录,最后 location / { index index.html index.php; }。如果要运行PHP站点,额外增加一段PHP解析location,将.php结尾请求交给php-fpm处理。配置写法和Nginx版本相关,新版本使用 fastcgi_pass unix:/run/php/php8.1-fpm.sock;,旧版本会用 127.0.0.1:9000。修改配置后执行 nginx -t 校验语法,无报错再执行 systemctl reload nginx 重载配置。
安装PHP。Ubuntu执行 sudo apt install php-fpm php-mysql,安装后自带PHP核心与MySQL扩展。项目需要其他扩展,例如 php-gd、php-curl、php-mbstring,单独用apt安装,安装完成重启php-fpm。CentOS自带PHP版本普遍偏旧,想要新版本需要额外添加Remi源。php -v 查看版本,systemctl status php-fpm 查看服务运行状态。
安装MySQL或者MariaDB。Ubuntu22.04之后默认源提供MySQL8,CentOS系列默认是MariaDB。执行 sudo apt install mysql-server 安装,安装结束运行 sudo mysql_secure_installation,引导设置root密码、删除匿名用户、禁止root远程登录、移除测试数据库,这几步建议全部执行,属于基础安全操作。安装完成执行 sudo mysql 进入数据库命令行,CREATE DATABASE 数据库名; 创建数据库,CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码'; 创建账号,GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'localhost'; 分配权限,最后 FLUSH PRIVILEGES; 让权限生效。
网站文件存放位置。常规做法是在 /var/www/ 下新建和域名同名目录,比如 /var/www/example.com。上传网站程序之后,调整目录属主和权限。Nginx、PHP-FPM一般以 www-data 或者 nginx 用户运行,目录属主设置为该用户,目录权限755,文件权限644。执行 chown -R www-data:www-data /var/www/example.com 和 chmod -R 755 /var/www/example.com 批量设置。权限过高存在安全隐患,权限不足Nginx读取文件失败,返回403错误。
域名解析配置。前往域名服务商后台,新增A记录,主机记录填写 @ 或者 www,记录值填写服务器IP。服务器支持IPv6就额外添加AAAA记录。等待解析生效,使用 dig example.com 或者 nslookup example.com 校验,返回IP匹配服务器地址就代表解析成功。
防火墙和安全组不能遗漏。Ubuntu的ufw默认可能关闭,执行 sudo ufw allow 80、sudo ufw allow 443 放行Web端口,sudo ufw allow 22 放行SSH端口,之后 sudo ufw enable 开启防火墙。CentOS的firewalld执行 firewall-cmd --permanent --add-service=http、--add-service=https,再 firewall-cmd --reload。云服务商控制台还有安全组,需要单独放行80、443端口,它和系统防火墙相互独立,两处都要配置。
SSL证书现在基本属于标配,Certbot操作最简单。sudo apt install certbot python3-certbot-nginx,接着执行 sudo certbot --nginx -d example.com -d www.example.com,工具会自动修改Nginx配置,并且设置自动续期。部署成功后访问域名,地址栏出现锁图标代表HTTPS生效。证书有效期90天,Certbot定时任务自动续期,无需手动操作。
几个高频故障。502错误大多是php-fpm未启动,或是Nginx配置里socket路径和实际文件不一致,执行 systemctl status php-fpm 查看状态,ls /run/php/ 确认socket文件名。403错误属于权限故障,检查目录属主和权限。404是路径错误,核对Nginx配置内root指向的目录是否为网站真实存放目录。数据库连接失败检查账号密码、数据库名称,确认MySQL允许本地访问。
最后养成一个习惯。每次修改配置文件,先执行 nginx -t 校验语法,校验通过再重载。不校验直接重载,一旦配置写错,Nginx拒绝加载,站点直接受影响。修改前备份原配置文件,出错方便回滚。这个操作耗时很短,能规避大量麻烦。