1. 环境准备与系统更新
在开始搭建Web服务器之前,我们需要确保Ubuntu系统处于最新状态。我建议使用Ubuntu 22.04 LTS版本,这是目前最稳定的长期支持版本,能够获得5年的安全更新支持。
首先打开终端,执行以下命令更新软件包列表:
sudo apt update这个命令会从Ubuntu官方仓库获取最新的软件包信息。我强烈建议在执行任何安装操作前都先运行这个命令,因为软件仓库的索引可能会随时更新。
接下来升级已安装的软件包:
sudo apt upgrade -y这里的-y参数表示自动确认所有提示,避免安装过程中需要手动确认。在实际操作中,我遇到过因为忘记加这个参数而导致安装过程中断的情况,特别是在自动化脚本中要特别注意。
提示:如果系统中有需要保留的本地修改配置文件,升级时可能会提示是否覆盖。这种情况下建议先备份原有配置,再选择覆盖。
2. Apache安装与基础配置
2.1 安装Apache服务器
Apache是世界上最流行的Web服务器软件之一,在Ubuntu上安装非常简单:
sudo apt install apache2 -y安装完成后,系统会自动创建apache2服务并启动。我们可以通过以下命令验证Apache是否正常运行:
systemctl status apache2如果看到"active (running)"状态,说明Apache已经成功启动。我第一次搭建时犯的错误是直接访问服务器IP却没看到Apache欢迎页面,后来发现是防火墙没开80端口。
2.2 防火墙配置
Ubuntu默认使用ufw防火墙,需要开放HTTP和HTTPS端口:
sudo ufw allow 'Apache Full'这条命令相当于同时开放了80(HTTP)和443(HTTPS)端口。在实际生产环境中,我建议只开放必要的端口,并考虑使用更严格的防火墙规则。
2.3 测试Apache
在浏览器中输入服务器IP地址,应该能看到Apache的默认欢迎页面。如果是在本地虚拟机测试,可以直接访问http://localhost。
如果看不到页面,可以尝试以下排查步骤:
- 检查Apache服务状态:
sudo systemctl status apache2 - 检查80端口监听:
sudo netstat -tulnp | grep 80 - 检查防火墙规则:
sudo ufw status
3. MySQL数据库安装与安全配置
3.1 安装MySQL服务器
MySQL是LAMP栈中的数据库组件,安装命令如下:
sudo apt install mysql-server -y安装完成后,MySQL服务会自动启动。我们可以验证安装版本:
mysql --version3.2 运行安全脚本
MySQL安装后默认配置不安全,必须运行安全脚本:
sudo mysql_secure_installation这个交互式脚本会引导你完成以下安全设置:
- 设置root密码强度验证策略
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
我在第一次安装时就因为没有运行这个脚本,导致数据库存在安全隐患,后来不得不重新配置。
3.3 创建数据库用户
建议为每个Web应用创建专用数据库用户,而不是使用root账户:
sudo mysql -u root -p登录MySQL后执行:
CREATE DATABASE webdb; CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'strong_password'; GRANT ALL PRIVILEGES ON webdb.* TO 'webuser'@'localhost'; FLUSH PRIVILEGES; EXIT;注意:在实际生产环境中,'strong_password'应该替换为强密码,并考虑定期更换。
4. PHP安装与Apache集成
4.1 安装PHP及相关模块
现代Web应用通常需要PHP与MySQL交互,因此需要安装php-mysql模块:
sudo apt install php libapache2-mod-php php-mysql -y这个命令会安装PHP核心、Apache的PHP模块以及MySQL支持。根据应用需求,可能还需要安装其他扩展:
sudo apt install php-curl php-gd php-mbstring php-xml php-zip -y4.2 配置PHP处理优先级
默认情况下,Apache会优先处理.html文件而非.php文件。我们需要修改优先级:
sudo nano /etc/apache2/mods-enabled/dir.conf将index.php移到最前面:
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule>然后重启Apache使更改生效:
sudo systemctl restart apache24.3 测试PHP配置
创建一个测试PHP文件:
sudo nano /var/www/html/info.php添加以下内容:
<?php phpinfo(); ?>在浏览器中访问http://your_server_ip/info.php,应该能看到PHP配置信息页面。测试完成后,记得删除这个文件,因为它会暴露服务器信息:
sudo rm /var/www/html/info.php5. 虚拟主机配置(可选)
5.1 创建目录结构
对于生产环境,建议为每个网站配置独立的虚拟主机:
sudo mkdir -p /var/www/example.com/public_html sudo chown -R $USER:$USER /var/www/example.com/public_html sudo chmod -R 755 /var/www5.2 创建虚拟主机配置文件
sudo nano /etc/apache2/sites-available/example.com.conf添加以下内容:
<VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>5.3 启用虚拟主机
sudo a2ensite example.com.conf sudo a2dissite 000-default.conf sudo systemctl restart apache26. 常见问题排查
6.1 服务启动失败
如果Apache或MySQL无法启动,首先检查日志:
sudo tail -n 50 /var/log/apache2/error.log sudo tail -n 50 /var/log/mysql/error.log6.2 权限问题
Web文件权限设置不当是常见问题。我建议采用以下权限结构:
- 目录:755
- 文件:644
- 上传目录:775(如果PHP需要写入)
6.3 PHP扩展缺失
如果应用报告缺少特定PHP函数,可能需要安装相应扩展。使用以下命令搜索可用扩展:
apt search php- | grep 扩展名7. 性能优化建议
7.1 Apache优化
编辑Apache配置文件:
sudo nano /etc/apache2/mods-available/mpm_prefork.conf根据服务器内存调整以下参数:
StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 07.2 MySQL优化
创建MySQL优化配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf添加或修改以下参数:
innodb_buffer_pool_size = 1G # 根据服务器内存调整 query_cache_size = 64M query_cache_limit = 2M7.3 PHP优化
编辑PHP配置文件:
sudo nano /etc/php/8.1/apache2/php.ini建议修改的参数:
memory_limit = 256M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 120 opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=40008. 安全加固措施
8.1 定期更新
设置自动安全更新:
sudo apt install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades8.2 文件权限
限制敏感文件访问:
sudo chmod 640 /etc/mysql/my.cnf sudo chmod 750 /var/www8.3 禁用危险PHP函数
编辑php.ini文件,在disable_functions中添加:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source8.4 安装Fail2Ban
防止暴力破解:
sudo apt install fail2ban -y sudo systemctl enable fail2ban sudo systemctl start fail2ban9. 备份策略
9.1 数据库备份
创建自动备份脚本:
sudo nano /usr/local/bin/mysqlbackup.sh内容如下:
#!/bin/bash DATE=$(date +%Y%m%d%H%M) mysqldump -u root -p[password] --all-databases > /backup/mysql/db_backup_$DATE.sql find /backup/mysql/ -type f -mtime +7 -exec rm {} \;设置定时任务:
sudo crontab -e添加:
0 3 * * * /usr/local/bin/mysqlbackup.sh9.2 网站文件备份
类似的备份脚本:
#!/bin/bash DATE=$(date +%Y%m%d%H%M) tar -czf /backup/web/web_backup_$DATE.tar.gz /var/www find /backup/web/ -type f -mtime +7 -exec rm {} \;10. 监控与维护
10.1 安装监控工具
sudo apt install htop sysstat -y10.2 日志轮转
配置日志自动轮转:
sudo nano /etc/logrotate.d/apache210.3 定期检查
设置每月安全检查:
sudo apt install lynis -y sudo lynis audit system在实际运维中,我发现定期检查服务器安全状态可以预防很多潜在问题。建议至少每月执行一次完整的安全审计。