在Linux服务器环境中,LNMP(Nginx + MySQL + PHP)组合因其高性能、稳定性和轻量级特性,被广泛应用于网站部署,当需要在同一台服务器上托管多个网站时,合理配置多域名就显得尤为重要,本文将详细介绍LNMP环境下多域名的配置方法,包括环境准备、虚拟主机创建、数据库配置及安全注意事项等内容。

环境准备与基础检查
在开始配置多域名前,需确保LNMP环境已正确安装,可通过以下命令检查Nginx、MySQL和PHP的运行状态:
systemctl status nginx:确认Nginx服务已启动并开机自启。systemctl status mysql:验证MySQL服务运行正常,若未安装可执行apt install mysql-server(Ubuntu/Debian)或yum install mysql-server(CentOS/RHEL)。php -v:检查PHP版本是否与项目需求匹配,建议安装PHP-FPM以提升Nginx与PHP的交互效率。
确保服务器已解析多个域名到同一公网IP,可通过ping 域名验证DNS解析是否生效。
创建网站目录及数据库
为每个域名独立创建网站目录和数据库,是隔离多站点的关键步骤,以域名example.com和test.com为例:
-
创建网站根目录
在/var/www/下为每个域名建立专属目录,并设置正确的权限:sudo mkdir -p /var/www/example.com /var/www/test.com sudo chown -R www-data:www-data /var/www/example.com /var/www/test.com sudo chmod -R 755 /var/www/example.com /var/www/test.com
将网站文件上传至对应目录,或通过
wget/curl下载默认测试页面(如index.php)。 -
创建MySQL数据库及用户
登录MySQL控制台(mysql -u root -p),为每个站点创建独立的数据库和用户,并赋予相应权限:
CREATE DATABASE example_db; CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE test_db; CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'AnotherPassword456!'; GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost'; FLUSH PRIVILEGES;
注意:密码需包含大小写字母、数字及特殊字符,确保安全性。
配置Nginx虚拟主机
Nginx通过虚拟主机(Server Block)实现多域名解析,需为每个域名创建独立的配置文件。
-
创建配置文件
在/etc/nginx/sites-available/下创建配置文件,如example.com.conf和test.com.conf:# example.com.conf server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据实际PHP版本调整 } location ~ /\.ht { deny all; } }test.com.conf的配置类似,仅需修改server_name、root及数据库连接信息。 -
启用配置并测试
创建软链接将配置文件链接到sites-enabled目录,并重启Nginx:sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置语法 sudo systemctl reload nginx # 重新加载配置
访问
http://example.com和http://test.com,若显示对应网站内容,则配置成功。
配置PHP与数据库连接
在网站的PHP文件中,需修改数据库连接信息以匹配对应的数据库和用户,在example.com的config.php中:
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'example_user');
define('DB_PASS', 'StrongPassword123!');
define('DB_NAME', 'example_db');
?>
确保PHP代码中无硬编码敏感信息,建议使用环境变量或配置文件管理凭据。
SSL证书配置(可选)
为保障数据传输安全,建议为每个域名申请免费SSL证书(如Let’s Encrypt),通过Certbot工具自动配置:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d example.com -d www.example.com
执行后,Certbot会自动修改Nginx配置,启用HTTPS(443端口),并设置自动续期。
安全与优化建议
- 权限控制:定期检查目录权限,确保
/var/www/及其子目录所有者为www-data,避免777权限滥用。 - 防火墙配置:使用
ufw或firewalld仅开放必要端口(如80、443、22),禁止外部访问MySQL默认端口3306。 - 日志监控:通过
/var/log/nginx/access.log和error.log分析访问情况,及时发现异常请求。 - 定期备份:配置数据库自动备份(如
mysqldump)和网站文件增量备份,防止数据丢失。
常见问题排查
- 404错误:检查
root路径是否正确,index文件是否存在。 - 502错误:确认PHP-FPM服务运行状态(
systemctl status php8.1-fpm),检查fastcgi_pass路径是否匹配。 - 数据库连接失败:验证用户权限、密码及数据库主机是否为
localhost。
通过以上步骤,即可在LNMP环境下实现多域名的安全、高效配置,合理规划目录结构、数据库隔离及权限管理,不仅能提升服务器资源利用率,还能为后续扩展和维护奠定坚实基础。


















