Docker nginx proxy, open ldap and phpldapadmin - 无法通过nginx访问ldap admin

标签 docker ssl ldap jwilder-nginx-proxy phpldapadmin

我认为我的环境存在配置错误问题,我想听听您对此的意见。非常欢迎提供解决问题的建议或帮助。

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

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

到目前为止完成的步骤:

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”是我真正的公共(public)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 和一些公共(public)地址,我可以使用 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,它们返回我的公共(public) IP 地址,我通过浏览器成功访问了它们: jenkins.company.com 和 artifactory.company.com

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

最佳答案

致那些在黑暗中跌跌撞撞的人: 由于代理正在处理 HTTPS 内容,因此您不需要 apache 因此,您使用以下环境变量运行 phpldapadmin:

environment:
  - PHPLDAPADMIN_TRUST_PROXY_SSL=true
  - PHPLDAPADMIN_HTTPS=false

您不会为 docker 镜像公开任何端口,因为 nginx-proxy 在内部处理所有网络。

有同样的问题,但已解决,考虑过这样做,因为 letsencrypt-proxy-companion 设置“高级设置”的方式

关于Docker nginx proxy, open ldap and phpldapadmin - 无法通过nginx访问ldap admin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340099/

相关文章:

ssl - Slicehost - 如何生成 CSR 以便我可以购买 Thawte SSL 证书?

Java Mission Control - 访问被拒绝连接到远程

python - 如何使用 Python 更改域用户(windows Active Directory)的密码?

mongodb - 更改所有权/data/db、输入/输出错误、Kubernetes Mongo 部署

docker - 使用 Kubernetes 上的卷的挂载路径出现问题

linux - 在没有 IP SAN 的情况下使用带有 SSL 证书的 Docker 注册表

Python SSL : CERTIFICATE_VERIFY_FAILED using Google-Search-API

.net - 查询事件目录以获取 .NET 中的用户角色

docker - 如何更改适用于Mac的New Docker的代理信息?

Docker 和 Gitlab - 如何修改 docker run