前期准备阶段
硬件资源规划表
| 项目 | 推荐配置 | 作用说明 |
|---|---|---|
| CPU核心数 | ≥2核 | 支撑并发请求处理 |
| 内存容量 | 2GB+ (建议4GB以上) | 同时运行系统+Web服务+数据库 |
| 存储类型 | SSD硬盘 | 提升文件读写速度 |
| 公网IP地址 | 固定静态IP | 确保域名解析稳定性 |
| 操作系统选择 | Ubuntu Server LTS/Debian | 社区支持度高,文档丰富 |
系统初始化关键操作
# 查看当前系统信息 lsb_release -a # 修改主机名为自定义名称(例:webserver) hostnamectl set-hostname webserver # 编辑/etc/hosts文件添加解析记录 echo "192.168.1.100 webserver" >> /etc/hosts # 同步时间源(以阿里云NTP为例) timedatectl set-ntp true && timedatectl set-timezone Asia/Shanghai
核心服务搭建流程
▶️ 方案A:LAMP架构(Linux+Apache+MySQL+PHP)
Step 1: 安装基础组件
# 更新软件源并升级系统 apt update && apt upgrade -y # 安装Apache Web服务器 apt install apache2 -y # 验证安装结果 systemctl status apache2 curl http://localhost
Step 2: 配置虚拟主机(多站点管理)
编辑/etc/apache2/sites-available/default-ssl.conf,新增以下内容:
<VirtualHost :80>
ServerAdmin admin@example.com
DocumentRoot /var/www/html/mysite
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/html/mysite">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
执行a2ensite default-ssl启用配置,重启服务systemctl restart apache2
Step 3: 安装MariaDB数据库
# 安装数据库及管理工具 apt install mariadb-server mariadb-client -y # 初始化数据库 systemctl start mariadb mysql_secure_installation # 按提示设置root密码及安全策略 # 创建业务数据库 mysql -u root -p -e "CREATE DATABASE mydb; GRANT ALL PRIVILEGES ON mydb. TO 'user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;"
Step 4: PHP环境配置
# 安装PHP及相关扩展 apt install libapache2-mod-php8.1 php-mysql php-gd php-xml php-mbstring -y # 测试PHP版本 php -v # 创建info.php测试文件 echo "<?php phpinfo(); ?>" > /var/www/html/info.php
▶️ 方案B:LEMP架构(Linux+Nginx+MySQL+PHP)
优势对比表
| 特性 | Apache | Nginx |
|————-|———————|———————|
| 性能 | 中等 | 高并发处理能力更强 |
| 配置复杂度 | 语法直观易读 | 基于事件驱动模型 |
| 反向代理 | 需额外模块 | 原生支持 |
| 静态资源压缩| 依赖第三方插件 | 内置gzip模块 |
Nginx安装示例
# 添加Nginx官方仓库
echo "deb http://nginx.org/packages/mainline/ubuntu $(lsb_release -sc) nginx" | tee /etc/apt/sources.list.d/nginx.list
# 导入GPG密钥
wget http://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# 安装最新稳定版
apt update && apt install nginx -y
# 配置服务器块
nano /etc/nginx/sites-available/default
# 写入如下内容后保存退出
server {
listen 80;
server_name your_domain.com;
root /var/www/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
# 创建符号链接并重启服务
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
systemctl restart nginx
安全防护配置
防火墙设置(UFW)
# 允许常用端口 ufw allow OpenSSH # SSH默认22端口 ufw allow 'Apache Full' # HTTP(80)+HTTPS(443) # 启用防火墙 ufw enable # 查看当前规则 ufw status numbered
SSL证书部署(Let’s Encrypt)
# 安装Certbot客户端 apt install python3-certbot-apache -y # 申请证书(自动配置Apache) certbot --apache -d your_domain.com -m your_email@example.com --agree-tos # 自动续期测试 certbot renew --dry-run
用户权限管理
# 创建专用运行用户
adduser --system --shell /bin/bash --gecos "Web Service User" --group --disabled-password --home /opt/webapp webuser
# 修改文件所有权
chown -R webuser:webuser /var/www/html
# 限制PHP执行权限
find /var/www/html -type f -exec chmod 640 {} ;
find /var/www/html -type d -exec chmod 750 {} ;
进阶优化措施
性能调优参数表
| 子系统 | 优化项 | 推荐值 |
|---|---|---|
| Linux内核 | dirty_ratio | vm.dirty_ratio=15% |
| Apache | MaxKeepAliveRequests | 100 |
| Nginx | worker_connections | 1024 |
| PHP-FPM | pm.max_children | 服务器CPU核心数×2+4 |
| MySQL | innodb_buffer_pool_size | 物理内存的70%-80% |
日志监控方案
# 安装日志分析工具
apt install goaccess -y
# 生成每日访问统计
goaccess /var/log/nginx/access.log --log-format=COMBINED --output=report.html
# 配置日志轮转
nano /etc/logrotate.d/nginx
# 添加以下内容
/var/log/nginx/.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
故障排查手册
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 浏览器显示500错误 | .htaccess语法错误 | 检查.htaccess文件格式 |
| 数据库连接失败 | 防火墙阻断3306端口 | ufw allow 3306/tcp |
| PHP脚本不执行 | FastCGI未正确配置 | 检查/etc/php/8.1/fpm/pool.d/www.conf |
| 上传文件大小受限 | PHP上传限制 | 修改upload_max_filesize参数 |
| 页面加载缓慢 | 未开启Gzip压缩 | 在Nginx配置中添加gzip on; |
相关问答FAQs
Q1: 为什么通过公网IP能访问但域名打不开?
解答:该问题通常由DNS解析异常引起,请依次检查:① 域名注册商的控制台是否正确设置A记录指向服务器IP;② 本地hosts文件是否存在旧记录干扰;③ 使用dig your_domain.com命令验证DNS解析结果;④ 清除本机DNS缓存(Windows执行ipconfig /flushdns,Mac/Linux执行sudo killall -HUP mDNSResponder)。
Q2: 如何在不重启服务的情况下应用新配置?
解答:不同服务有不同的优雅重启方式:① Apache使用apachectl graceful;② Nginx使用kill -HUP <主进程号>;③ PHP-FPM使用kill -USR2 <主进程号>,可通过ps aux | grep [服务名]获取进程号,注意:首次修改重要配置建议先备份原文件,必要时仍应完整重启服务
