温馨提示×

ubuntu lamp如何部署多站点

小樊
33
2025-11-28 13:15:29
栏目: 智能运维

Ubuntu LAMP 多站点部署指南

一 环境准备

  • 更新系统并安装 LAMP 组件:
    • 命令:sudo apt update && sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
  • 验证安装:
    • Apache:在浏览器访问服务器 IP,出现默认页面即正常
    • PHP:创建 /var/www/html/info.php,内容为 ,访问应显示 PHP 信息页
  • 防火墙(如使用 UFW):
    • 命令:sudo ufw allow ‘Apache Full’(开放 80/443

二 基于域名的多站点配置步骤

  • 规划目录(示例两个站点):
    • 站点1:/var/www/site1,站点2:/var/www/site2
    • 命令:sudo mkdir -p /var/www/site1 /var/www/site2
  • 创建虚拟主机配置(以站点1为例):
    • 新建:sudo nano /etc/apache2/sites-available/site1.conf
    • 示例配置:
      <VirtualHost *:80>
          ServerAdmin webmaster@site1.test
          ServerName site1.test
          ServerAlias www.site1.test
          DocumentRoot /var/www/site1
      
          <Directory /var/www/site1>
              Options Indexes FollowSymLinks
              AllowOverride All
              Require all granted
          </Directory>
      
          ErrorLog ${APACHE_LOG_DIR}/site1_error.log
          CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
      </VirtualHost>
      
    • 站点2 使用相同结构,仅修改 ServerName/ServerAlias/DocumentRoot/日志文件名
  • 启用站点与默认站点处理:
    • 启用:sudo a2ensite site1.conf && sudo a2ensite site2.conf
    • 可选禁用默认站点:sudo a2dissite 000-default.conf
  • 检查语法并重启:
    • 检查:sudo apache2ctl configtest(应返回 Syntax OK)
    • 重启:sudo systemctl restart apache2
  • 本地测试解析(无公网 DNS 时):
    • Ubuntu 客户端:在 /etc/hosts 添加 “服务器IP site1.test site2.test”
    • Windows 客户端:在 C:\Windows\System32\drivers\etc\hosts 添加同样记录

三 基于端口的多站点配置步骤

  • 配置监听端口(如新增 8080):
    • 编辑:sudo nano /etc/apache2/ports.conf,添加或确认:Listen 8080
  • 为站点创建带端口的虚拟主机(示例):
    <VirtualHost *:8080>
        ServerAdmin webmaster@site3.test
        ServerName site3.test
        DocumentRoot /var/www/site3
    
        <Directory /var/www/site3>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/site3_error.log
        CustomLog ${APACHE_LOG_DIR}/site3_access.log combined
    </VirtualHost>
    
  • 启用站点并重启:sudo a2ensite site3.conf && sudo systemctl restart apache2
  • 访问方式:浏览器打开 http://服务器IP:8080
  • 防火墙:如启用 UFW,放行端口 sudo ufw allow 8080

四 常见问题与优化

  • 403 Forbidden(权限被拒):
    • 确保目录属主与权限正确:sudo chown -R www-data:www-data /var/www/siteX
    • 中使用:Require all granted;必要时设置目录权限为 755,文件为 644
  • 目录列表与索引:
    • 生产环境建议关闭目录浏览:Options -Indexes +FollowSymLinks
  • .htaccess 与重写规则不生效:
    • 确认 中 AllowOverride All
    • 启用重写模块:sudo a2enmod rewrite
  • 默认站点冲突:
    • 多站点时建议禁用默认站点:sudo a2dissite 000-default.conf
  • 语法检查与日志排错:
    • 语法:sudo apache2ctl configtest
    • 错误日志:/var/log/apache2/error.log(或虚拟主机自定义日志)

五 可选配置与后续

  • 启用 HTTPS(Let’s Encrypt 免费证书):
    • 安装 Certbot:sudo apt install certbot python3-certbot-apache
    • 获取并自动配置证书:sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
  • 数据库与权限(示例):
    • 登录:mysql -u root -p
    • 建库与授权:
      • CREATE DATABASE db1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      • GRANT ALL ON db1.* TO ‘db1user’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
      • FLUSH PRIVILEGES;
  • 远程数据库(如确有需要):
    • 编辑 MySQL 配置(如 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf),将 bind-address 改为 0.0.0.0
    • 授权远程:GRANT ALL ON db1.* TO ‘db1user’@‘%’ IDENTIFIED BY ‘StrongPass!’; FLUSH PRIVILEGES;
    • 注意:开放远程存在安全风险,务必限制来源 IP 并使用强密码

0