首页 > 解决方案 > Docker nginx 代理,打开 ldap 和 phpldapadmin - 无法通过 nginx 访问 ldap admin

问题描述

我认为我的环境中存在配置错误的问题,我想听听您对此的看法。解决它的建议或帮助将非常受欢迎。

描述: 我在通过虚拟主机名使用 jwilder/nginx-proxy 容器访问 LDAP Admin 时遇到问题,而通过具有暴露端口的真实 linux 主机名访问工作正常。使用有效的通配符证书通过 HTTPS 访问。

环境: 我在 linux (CentOS 7) 上运行 docker,我想设置一个带有 jwilder/nginx-proxy 的 docker 容器和另外两个 docker 容器:一个用于 openLdap,第二个用于 phpLdapAdmin。因此,对我的 ldapadmin 的访问将通过 nginx,而不会暴露端口。

到目前为止完成的步骤:

1.创建容器——nginx代理

docker run -d -p 80:80 -p 443:443 \
  -v /home/admin/nginx/certs:/etc/nginx/certs \
  -v /var/run/docker.sock:/tmp/docker.sock:ro \
  --name proxy \
  jwilder/nginx-proxy

2.创建容器——ldap

docker run --name ldap -p 636:636 \ 
 -v /home/admin/nginx/certs:/container/service/slapd/assets/certs \
 -v /data/slapd/database:/var/lib/ldap \
 -v /data/slapd/config:/etc/ldap/slapd.d \
 --hostname ldap.company.com \
 --add-host=ldap.company.com:192.168.168.168 \
 --env LDAP_ORGANISATION='Company ltd' \
 --env LDAP_DOMAIN='company.com' \
 --env LDAP_ADMIN_PASSWORD='Password' \
 --detach osixia/openldap:1.2.2 \

而不是“192.168.168.168”是我的真实公共IP地址

然后成功搜索LDAP

docker exec ldap \
  ldapsearch -x -H ldap://ldap.company.com \
  -b dc=company,dc=com \
  -D "cn=admin,dc=company,dc=com" \
  -w Password\

3.创建容器phpldapadmin

docker run \
 --name ldapadmin \
 --env PHPLDAPADMIN_LDAP_HOSTS=ldap.company.com \ 
 --expose 389 \
 -e VIRTUAL_HOST=ldap.company.com \
 -e VIRTUAL_PORT=389 \
 --volume /home/admin/nginx/certs:/container/service/phpldapadmin/assets/apache2/certs \
--env PHPLDAPADMIN_HTTPS_CRT_FILENAME=ldap.company.com.crt \
--env PHPLDAPADMIN_HTTPS_KEY_FILENAME=ldap.company.com.key \
--env PHPLDAPADMIN_HTTPS_CA_CRT_FILENAME=ldap.company.com.crt \
--detach osixia/phpldapadmin:0.7.2

最后重启 nginx 代理容器,自动将 ldap 和 ldapadmin 添加到 nginx 配置中。

docker 重启代理

然后我得到这个暴露的端口:

图像端口名称

osixia/phpldapadmin:0.7.2 80/tcp, 389/tcp, 443/tcp ldapadmin

osixia/openldap:1.2.2 389/tcp, 0.0.0.0:636->636/tcp ldap

现在出现了奇怪的部分,我的 Linux 服务器的主机名是 dev.company.com,带有一些公共地址,我可以使用https://dev.company.com:6443访问我的 ldapadmin ,但我无法通过 URL 访问:ldap .company.com,不暴露端口。我无法在 Linux 主机本身上 ping ldap.company.com.key。

注意: 我为 Jenkins 做了同样的事情:

docker run -d --rm -u root -v /var/run/docker.sock:/var/run/docker.sock -v jenkins-data:/var/jenkins_home -v "$HOME":/home -e VIRTUAL_HOST=jenkins.company.com -e VIRTUAL_PORT=8080 --name nj jenkins

对于神器:

docker run --name artifact -d -v /var/opt/jfrog/artifactory:/var/opt/jfrog/artifactory -e VIRTUAL_HOST=artifactory.company.com -e VIRTUAL_PORT=8081 artifactory-oss

对于这两个我都有可ping通的URL,它们返回我的公共IP地址,我通过浏览器成功访问它们:jenkins.company.com和artifactory.company.com

我无法在 Linux 主机本身上 ping ldap.company.com.key。

标签: dockersslldapjwilder-nginx-proxyphpldapadmin

解决方案


首先,您可以检查jwilder/nginx-proxy它是否实际收到任何请求的日志:

docker logs -f CONTAINER_ID

但是,如果您甚至无法 ping ldap.company.com,则可能无法将域解析为 IP 地址,因为它没有 DNS 记录。您可以使用以下方法进行测试:

host ldap.company.com

如果无法解析域,则在company.comDNS 服务器中创建一个指向ldap.company.com您主机的公共 IP 地址的 DNS A 记录。

或者您可以测试之前是否一切正常,如果您只是向主机的公共 IP 地址而不是ldap.company.com域发出 PHPLDAPAdmin 请求。


推荐阅读