问题: 无法通过SSH从apache访问远程MySQL
我的目标是通过ssh隧道使用apache和tomcat安全地从APP服务器访问数据库。 APP服务器(Linux)正在运行apache httpd,tomcat。 DB服务器(Linux)正在运行mysql服务器(端口3306)。 在两台服务器上为用户设置SSH:sshUser。启动数据库上的MySQL。
SSH连接: 在APP服务器上,我运行了以下sshUser。 (sshUser是APP和DB服务器的登录用户)
ssh -p 22 -f -N -L 3307:localhost:3306 sshUser@DB_ip_address
然后我在APP服务器上启动了httpd和tomcat。
测试用例: 1. APP服务器(httpd)(localhost:3307)>(3306)数据库服务器(MySQL)失败: 在APP服务器上,在apache中,我运行test.php作为以下php代码
<?php
$db_host = "localhost:3307";
$db_name = "dbname";
$db_user = "dbuser";
$db_pass = "dbpassword";
GLOBAL $errors;
GLOBAL $successes;
$errors = array();
$successes = array();
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
GLOBAL $mysqli;
if(mysqli_connect_errno()) {
echo "Conn Error = " . mysqli_connect_error(); exit();
}else{
echo "Pass"; exit();
}
?>
错误讯息: 警告:mysqli :: mysqli():( HY000 / 2005):第10行的/$site_path/test.php中的未知MySQL服务器主机'localhost:3307'(1),Conn错误=未知MySQL服务器主机'localhost:3307 '(1) (使用joomla和wordpress也失败了)
APP服务器(tomcat)(localhost:3307)&gt;(3306)数据库服务器(MySQL)很好:
windows 8(httpd)(localhost:3307)&gt;(3307)APP服务器(3307)&gt;(3306)DB服务器(MySQL)是好的: 在Windows 8客户端上,putty目标是APP服务器,SSH隧道设置转发端口3307(源端口)localhost:3307(目标)。 如果我在Windows 8.1上从我的apache服务器运行相同的test.php,它没有问题。 Joomla也有效。 (配置如下)
windows 8(tomcat)(localhost:3307)&gt;(3307)APP服务器(3307)&gt;(3306)DB服务器(MySQL)是好的:
配置细节: 在APP服务器上: Tomcat由“tomcat”用户启动 httpd由“apache”用户启动 mysqld由“root”启动 ssh由“sshUser”启动 sshd由“root”启动
/ etc / passwd中的(在APP服务器和数据库服务器上相同) 阿帕奇:X:48:48:的Apache:/无功/网络:/ sbin目录/ nologin的 Tomcat的:X:501:501 :: /家庭/ Tomcat的:/ sbin目录/ nologin的
答案 0 :(得分:1)
localhost:3307
不是有效的主机名。
http://php.net/manual/en/mysqli.construct.php
mysqli::__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )(...)
的宿主
可以是主机名或IP地址。 (...)
(...)
端口
指定尝试连接MySQL服务器的端口号。
答案 1 :(得分:0)
您必须将端口号作为参数添加到构造函数
$db_host="localhost";
$db_port=3307;
.....
new mysqli ( ....,$db_port);
....