我使用 LAMP 堆栈设置了一个 CentOS 7 vm web 服务器。过去几天,我一直在尝试建立与 Windows Server 2008 R2 域控制器的 LDAPS 连接。
ldapsearch -H "ldaps://server.ad.com" -D "domain\user-name" -W
几天来,我能够使用以下命令连接到我的 DC:我还能够使用openssl s_client -connect server.ad.com -prexit
命令来验证 SSL 证书(因为我使用的是自签名证书)。
但是,每当我浏览 /var/www/html/test/index.php 中的 PHP 网页时,我总是在尝试时收到“无法联系 LDAP 服务器”错误ldap_bind()
。昨天我尝试从命令行运行 PHP 文件:php /var/www/html/test/index.php
并发现我的 PHP ldap_bind() 每次使用命令行时都能正常工作。
在互联网上搜索,我发现 PHP-CLI 和 PHP Apache 通常会使用不同的 php.ini 文件,但运行该php --ini
命令只会显示位于 /etc/php.ini 中的单个 php.ini 文件。
我正在尝试弄清楚为什么 PHP 从命令行正确执行,但在浏览/通过 Apache 运行时却不行。任何有助于解决此问题的信息/想法都将不胜感激,谢谢!
答案1
如果它可以通过命令行工作,但不能通过 Apache 工作,那么它就是少数几种情况之一。
- 运行代码的用户(你 vs Apache)
- SELinux 正在阻碍
我猜它们有点相互关联,但我建议尝试禁用 SELinux 的页面,然后从那里开始。
答案2
正如 GregL 所说,这很SELinux
相关,我今天遇到了同样的问题,但我不记得SELinux
已经启用了该功能。
[root@centos7 ~]# getsebool -a | grep http | grep ldap
httpd_can_connect_ldap --> off
因此,如果你不想全局禁用 SELinux,请授权它
setsebool -P httpd_can_connect_ldap on
也许您需要启用其他功能(远程数据库访问,...),请检查
getsebool -a | grep httpd