【问题标题】:mysqli doesn't connect under apachemysqli在apache下无法连接
【发布时间】:2016-05-23 23:17:16
【问题描述】:

我有一个基于 codeigniter 的 php 应用程序,并且我有一个位于远程主机上的数据库,安装了所需的数据库,设置了适当的 mysql 权限并为远程连接打开了 mysql 端口,但是,当我运行应用程序时它没有'不起作用,它返回 500 错误代码。

当我解决问题时,它给出了以下错误

消息:mysqli::real_connect(): (HY000/2003): 无法连接到 '192.168.6.13' (13) 上的 MySQL 服务器

到目前为止我所尝试的:

1) 确保所有权限设置正确。

2) 确保不存在与网络相关的问题,例如阻塞的端口/主机

3) 确保已安装并启用 mysqli。

4) 创建了一个连接测试 php 脚本并从命令行运行它,它工作得很好。

5) 有趣的部分是当我从命令行运行应用程序时,它作为 root 用户和 su -s /bin/sh apache -c "php index.php". 的 apache 用户正常工作

我的参数:

1) php 版本为 PHP 5.4.16

2) 操作系统版本:CentOS Linux 版本 7.2.1511 (Core) 在 web 和 DB 上

3) 网络服务器版本 Apache/2.4.6 (CentOS)

4) mysql 版本 14.14

5) 我在 ssl 下运行我的应用程序,下面是我的配置

<VirtualHost *:443>

        #### Gloabl config
     DocumentRoot /var/www/bein
     DirectoryIndex index.php
     ServerName beinmob.com
     ServerAlias www.beinmob.com
        #### change basic URL to /index.php/POS_Admin/Session
     RewriteEngine  on
     RewriteRule ^/?$  index.php/POS_Admin/Session [R]
        #### change url to alias for web services
     Alias /web-services /var/www/bein/index.php
     Alias /POS_Admin /var/www/bein/
        #### Basic Authentication for /web-services url
        <Location /POS_Admin>
                RewriteEngine on
                # Hide the application and system directories by redirecting the request to index.php
                RewriteBase /index.php
                RewriteRule ^(application|system|\.svn) index.php/$1 [L]
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^(.*)$ index.php/$1 [QSA,L]
        </Location>
        <Location /web-services>
                AuthName bein
                AuthType Basic
                AuthUserFile /etc/httpd/conf.d/beinServicePass
                Require valid-user
        </Location>
        #### SSL configuration
        SSLEngine on
        SSLCertificateFile /etc/httpd/cert/certs/www_beinmob_com.crt
        SSLCertificateKeyFile /etc/httpd/cert/certs/www_beinmob_com.key
        SSLCertificateChainFile /etc/httpd/cert/certs/DigiCertCA.crt
</VirtualHost>

【问题讨论】:

  • 您的 apache 配置无关紧要。 apache与php尝试连接mysql无关。要么你的 mysql 没有监听 TCP 连接,它没有监听那个特定的 IP,或者你使用了错误的 IP,或者 IP 以某种方式被防火墙。

标签: php mysql apache codeigniter mysqli


【解决方案1】:

检查this应该可以解决您的问题。

更新,因为如果该页面移动或删除,链接可能会失效

以root身份登录并执行

setsebool -P httpd_can_network_connect=1

【讨论】:

  • 检查它应该可以解决您的问题。 ~ 嗨 @Drudge 先生,我认为您有足够的声誉在评论框中提供建议。正确的 ?这不是一个答案。请不要使用答案部分进行评论。
  • 亲爱的@NanaPartykar,我认为这是 OP 想要的,所以我把它写在答案部分。会不会出问题??
  • 这不是答案。这只是对 OP 的建议。我在您的答案中没有看到任何代码。请参阅评论部分,@Bogdan Burim 先生如何提供 OP 的链接。
  • 好的,下次我会改进的,谢谢你的建议。
  • 似乎它的 SElinux 问题,我将它从强制更改为允许并重新启动机器,一切顺利,谢谢,顺便说一句,我刚刚想到它可能是一个 SElinux 问题就在之前我读了你的答案:P
【解决方案2】:

如果可以从终端访问 myslq 服务器,则必须结帐:

mysql -u youruser -h 192.168.0.3 -p

看看能不能登录

你好像没有连接,不是apache的问题。 mysql 服务器默认服务端口:3306 和 apache 80 http,443 https(例如。一些应用程序,如 ispconfig 运行在 8080 和几个应用程序服务器 tomcat 81 上......) 但这似乎不是你的情况

【讨论】:

    【解决方案3】:

    为您的数据库设置权限。

    输入任何用户名

    主机必须是 %

    输入任意密码

    之后在您的数据库配置文件中使用此权限..确保您将获得对远程主机数据库的访问权限

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 2022-01-05
      • 2023-03-11
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2011-01-08
      • 2015-11-20
      相关资源
      最近更新 更多