Apache与MySQL作为Web应用中最常用的服务器软件,常被部署在不同服务器上以提高系统的安全性和可扩展性,本文将详细介绍如何配置Apache与MySQL不在同一台服务器上的环境,包括网络配置、安全设置、连接验证及常见问题解决。
网络环境准备
在开始配置前,需确保两台服务器之间网络互通,假设Apache服务器IP为192.168.1.100,MySQL服务器IP为192.168.1.200,通过在Apache服务器执行ping 192.168.1.200
测试连通性,若无法通信,需检查防火墙设置和网络路由。
MySQL服务器配置
- 创建远程用户
登录MySQL服务器,执行以下命令为Apache服务器创建专用用户:CREATE USER 'apache_user'@'192.168.1.100' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'apache_user'@'192.168.1.100'; FLUSH PRIVILEGES;
- 修改配置文件
编辑MySQL配置文件my.cnf
(通常位于/etc/mysql/
),在[mysqld]
部分添加:bind-address = 0.0.0.0 # 允许所有IP连接(生产环境建议指定IP) port = 3306
- 防火墙设置
开放MySQL端口3306:sudo ufw allow 3306/tcp # Ubuntu系统 sudo firewall-cmd --add-port=3306/tcp --permanent # CentOS系统
Apache服务器配置
- 安装PHP扩展
确保安装了mysqli
或PDO
扩展:sudo apt-get install php-mysql # Ubuntu sudo yum install php-mysqlnd # CentOS
- 测试连接脚本
在Apache网站根目录创建test.php
:<?php $servername = "192.168.1.200"; $username = "apache_user"; $password = "StrongPassword123!"; $dbname = "test_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die(“连接失败: ” . $conn->connect_error);
}
echo “连接成功”;
$conn->close();
?>
通过浏览器访问`http://192.168.1.100/test.php`验证连接。
### 四、安全加固建议
1. **限制访问IP**
在MySQL中创建用户时,使用更具体的IP范围替代`192.168.1.100`,如`'apache_user'@'192.168.1.0/24'`。
2. **启用SSL连接**
在MySQL配置中添加:
```ini
[mysqld]
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
- 定期更新密码
设置密码策略并定期更换MySQL用户密码。
常见问题排查
问题现象 | 可能原因 | 解决方案 |
---|---|---|
连接超时 | 防火墙拦截 | 检查两台服务器防火墙规则 |
拒绝访问 | 用户权限不足 | 确认GRANT命令执行正确 |
连接数过多 | MySQL连接池未优化 | 调整max_connections 参数 |
性能优化建议
- 启用连接池
在PHP中使用PDO持久连接:$dsn = "mysql:host=192.168.1.200;dbname=test_db"; $options = [PDO::ATTR_PERSISTENT => true]; $conn = new PDO($dsn, $username, $password, $options);
- 网络延迟处理
确保两台服务器位于同一局域网或通过低延迟网络连接。 - 读写分离
对于高并发场景,可配置MySQL主从复制,Apache根据读写类型连接不同服务器。
通过以上步骤,即可实现Apache与MySQL跨服务器的安全稳定通信,实际部署中需结合具体业务需求调整参数,并定期进行安全审计和性能监控。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/23330.html