首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Docker nginx代理,打开ldap和phpldapadmin -无法通过nginx访问ldap管理。

Docker nginx代理,打开ldap和phpldapadmin -无法通过nginx访问ldap管理。
EN

Stack Overflow用户
提问于 2018-11-16 06:47:09
回答 3查看 2.3K关注 0票数 0

我想我在我的环境中有错误配置问题,我想听听你对此的看法。解决这个问题的建议或帮助是非常受欢迎的。

描述:使用jwilder/nginx代理容器访问LDAP (通过虚拟主机名访问)有问题,而通过带有暴露端口的真实linux进行访问很好。使用有效的通配符证书访问HTTPS。

环境:我正在linux上运行 (CentOS 7),我想设置一个带有jwilder/nginx代理的对接容器和另外两个对接容器:一个用于openLdap,另一个用于phpLdapAdmin。因此,对我的ldapadmin的访问将通过nginx进行,而不公开端口。

迄今已采取的步骤:

1.创建容器- nginx代理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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配置中。

码头重启代理

然后我得到了暴露的端口:

图像端口名称

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

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

现在出现了奇怪的部分,我的Linux服务器的主机名是带有一些公共地址的dev.company.com,我可以使用https://dev.company.com:6443访问ldapadmin,但是我不能通过URL: ldap.company.com访问,而不公开端口。我不能在Linux主机上平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 -- nj jenkins

对于工匠来说:

船坞运行-名称为-d -d -v -e VIRTUAL_HOST=artifactory.company.com -e VIRTUAL_PORT=8081

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

我不能在Linux主机上平ldap.company.com.key。

EN

回答 3

Stack Overflow用户

发布于 2018-11-16 16:26:50

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker logs -f CONTAINER_ID

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
host ldap.company.com

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

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

票数 0
EN

Stack Overflow用户

发布于 2018-11-19 05:35:48

由于我无法在上面的注释中详细描述我的当前状态,所以当我在我的URL中指定端口时,我将把它写成部分答案,因为我可以访问它。我的环境概述如下:

1.创建容器- nginx代理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name ldap \
 -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 \
 --expose 443 \
 --env LDAP_ORGANISATION='Company ltd' \
 --env LDAP_DOMAIN='company.com' \
 --env LDAP_ADMIN_PASSWORD='Password' \
 -e VIRTUAL_HOST=ldap.company.com \
 -e VIRTUAL_PORT=443 \
 --detach osixia/openldap:1.2.2

3.创建容器- PHPLDAPADMIN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name ldapadmin \
 -p 6443:443 \
 --env PHPLDAPADMIN_LDAP_HOSTS=ldap.company.com \
 -e VIRTUAL_HOST=ldap.company.com \
 -e VIRTUAL_PORT=443 \
 --expose 443 \
 --hostname ldap.company.com \
 --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中的配置: cat /etc/nginx/con.d/default.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ldap.company.com
upstream ldap.company.com {
            ## Can be connected with "bridge" network
        # ldapadmin
        server 172.17.0.5:443;
            ## Can be connected with "bridge" network
        # ldap
        server 172.17.0.4:443;
}
server {
server_name ldap.company.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
return 301 https://$host$request_uri;
}
server {
  server_name ldap.company.com;
  listen 443 ssl http2 ;
  access_log /var/log/nginx/access.log vhost;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-******************';
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 5m;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets off;
  ssl_certificate /etc/nginx/certs/ldap.company.com.crt;
  ssl_certificate_key /etc/nginx/certs/company.com.key;
  add_header Strict-Transport-Security "max-age=31536000" always;
  location / {
    proxy_pass http://ldap.company.com;
  }
}

正在运行的集装箱:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[admin@dev ~]$ docker ps
CONTAINER ID  IMAGE                      COMMAND                  CREATED          STATUS         PORTS                                   NAMES
4c021b9f85e4  osixia/phpldapadmin:0.7.2  "/container/tool/run"    9 minutes ago    Up 9 minutes   80/tcp, 0.0.0.0:6443->443/tcp            ldapadmin
53963bfe8fdc  osixia/openldap:1.2.2      "/container/tool/run"    10 minutes ago   Up 10 minutes  389/tcp, 443/tcp, 636/tcp                   ldap
c9576b8c1b72  jwilder/nginx-proxy        "/app/docker-entrypo…"   10 days ago      Up 21 minutes  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   proxy

当我在浏览器中调用http://ldap.company.com/:-失败时,从nginx登录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nginx.1    | 2018/11/19 12:46:11 [error] 32#32: *1 upstream prematurely closed connection while reading response header from upstream, client: X:X:X:X, server: ldap.company.com, request: "GET / HTTP/2.0", upstream: "http://172.17.0.5:443/", host: "ldap.company.com"
nginx.1    | 2018/11/19 12:46:11 [error] 32#32: *1 connect() failed (111: Connection refused) while connecting to upstream, client: X:X:X:X, server: ldap.company.com, request: "GET / HTTP/2.0", upstream: "http://172.17.0.4:443/", host: "ldap.company.com"

当我在browser - SUCCESS中调用时,从nginx登录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nginx.1    | ldap.company.com X:X:X:X - - [19/Nov/2018:12:46:11 +0000] "GET / HTTP/2.0" 502 575 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"

admin@dev ~$

我脑海中闪现的问题是:

  1. 我用正确的方式创造容器吗?
  2. 在创建ldap容器期间,是否需要指定某些端口( -p XXX:XX )?
  3. 我是否也需要像使用-expose交换机那样在ldap和ldapadmin上导出端口?
  4. 我做错什么了?

提前感谢所有能帮助和特别帮助你的人,谢谢你的时间和宝贵的意见。

附加信息:

在NGINX容器上,我得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nginx.1    | ldap.bitconex.de 62.216.206.17 - - [20/Nov/2018:15:52:49 +0000] "GET / HTTP/2.0" 403 209 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"

因为我在ldapadmin上得到了错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Tue Nov 20 15:18:23.807278 2018] [authz_core:error] [pid 1019:tid 140081490781952] [client 172.17.0.3:59916] AH01630: client denied by server configuration: /var/www/html
172.17.0.3 - - [20/Nov/2018:15:18:23 +0000] "GET / HTTP/1.1" 403 373 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"

我搜索了ldap-admin容器,以检查在哪些文件中提到了/var/www/html,并且我发现在两个地方提到了taht:

1.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@d65a1005d5aa:/# grep -rnw '/var/' -e '/var/www/html'
/var/lib/dpkg/info/apache2.postinst:111:        for dir in /var/www 
/var/www/html ; do
/var/lib/dpkg/info/apache2.postinst:124:            cp 
/usr/share/apache2/default-site/index.html /var/www/html/index.html
/var/lib/dpkg/info/apache2.postinst:128:        for dir in /var/www 
/var/www/html ; do
/var/lib/dpkg/info/apache2.postrm:70:   if is_default_index_html 
/var/www/html/index.html ; then
/var/lib/dpkg/info/apache2.postrm:71:       rm -f 
/var/www/html/index.html
/var/lib/dpkg/info/apache2.list:223:/var/www/html

2.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@d65a1005d5aa:/container/service/:apache2/assets/sites-available# 
ls
000-default.conf
root@d65a1005d5aa:/container/service/:apache2/assets/sites-available# 
cat 000-default.com
<VirtualHost *:80>
     # The ServerName directive sets the request scheme, hostname and port that
     # the server uses to identify itself. This is used when creating
     # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
   #ServerName www.example.com

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html

   # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
   # error, crit, alert, emerg.
   # It is also possible to configure the loglevel for particular
   # modules, e.g.
   #LogLevel info ssl:warn

   # For most configuration files from conf-available/, which are
   # enabled or disabled at a global level, it is possible to
   # include a line for only one particular virtual host. For example the
   # following line enables the CGI configuration for this host only
   # after it has been globally disabled with "a2disconf".
   #Include conf-available/serve-cgi-bin.conf

   <Directory /var/www/html >
       Require all granted
   </Directory>

</VirtualHost>

因此,我不确定是否需要手动创建这个html文件夹,还是在第二个位置编辑这个文件,并将路径放置到phpadmin配置文件: root@d65a1005d5aa:/container/service/phpldapadmin/assets/config# ls config.php README.md。

或者将路径放置到/var/www/phpldapadmin_ path /htdocs?

票数 0
EN

Stack Overflow用户

发布于 2019-09-07 11:46:22

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
environment:
  - PHPLDAPADMIN_TRUST_PROXY_SSL=true
  - PHPLDAPADMIN_HTTPS=false

当nginx代理在内部处理所有网络时,您不会公开坞映像的任何端口。

是有同样的问题,但这个问题解决了,考虑这样做,因为这是让加密代理同伴建立“高级设置”的方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53340099

复制
相关文章
Archiva 2.2.3 安装运行的时候出现协议版本错误
但是远程仓库不能同步数据到你的本地仓库中, 同时服务器上有上面的错误。但是 Archiva 的安装和运行是没有问题的。
HoneyMoose
2019/04/16
8430
JeecgBoot升级Nacos至 2.2.3 版本解决raft漏洞问题
Nacos是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序。
JEECG
2023/07/17
5780
Android Studio Gradle问题集合
1.开发环境:android studio,项目gradle文件添加ndk代码后配置构建出现问题 externalNativeBuild{ ndkBuild{ path "$projectDir/jni/Android.mk" } } 问题:Could not find method externalNativeBuild() for arguments 解决方案:gradle is set to at least version 2.2.0:,gradle版本最低需要2.2
用户1148881
2018/01/15
1.6K0
Android Studio Gradle问题集合
刚装上的打印机就无法打印,显示为脱机状态,看我如何快速解决
从多次的经验来看,我认为直到目前为止,WSD协议,仍旧是个灾难,虽然它的初衷是方便安装打印机,几乎全自动的安装也确实挺不错,但是时不时无法打印却实在是讨人嫌,很显然,安装再简便又有什么用呢。
IT狂人日志
2022/12/08
8970
刚装上的打印机就无法打印,显示为脱机状态,看我如何快速解决
Silverlight:xap包(或本地缓存)下载版本更新的解决思路
在SL开发中,通常会将项目按模块分成多个xap实现按需下载,但是由于浏览器的缓存,就算某个模块代码修改过并重新发布到服务器,如果这个xap已经在浏览器缓存中,实际加载时,仍然有可能调用的是本地缓存,而
菩提树下的杨过
2018/01/23
1K0
Silverlight:xap包(或本地缓存)下载版本更新的解决思路
错误代码502,网页无法打开?教你如何解决!
在使用互联网的过程中,我们时常会遇到各种错误代码,其中502错误代码是最为常见的一种。502 Bad Gateway错误表示,网关或代理服务无法将请求发送到上游服务器。那么,错误代码502是什么意思?
德迅云安全--陈琦琦
2023/10/08
10.1K0
修复 Ubuntu 无法进行版本更新的错误
将 Ubuntu 服务器从 18.04 升级到 20.04 , 在执行 do-release-upgrade 时提示无法检查新版本, 完整的错误信息如下:
beginor
2021/01/12
7.3K0
S如何解决安卓DK无法下载Package问题
安装一些用户Android SDK后。打开Android SDK Manager下载API当总是显示“Done loading packages”却迟迟不能前进。自己也出现了这样的情况。把自己成功解决此问题的方法分享给大家。 方法/步骤
全栈程序员站长
2022/07/06
7260
[PHP]解决500错误问题-nginx以及fpm没有任何错误日志
但是php-fpm下定义的www-error.log的错误日志以及nginx定义的error日志都没有任何显示
唯一Chat
2021/03/27
2.8K0
解决GitHub文件无法下载的问题
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
恬静的小魔龙
2022/08/07
13.9K0
解决GitHub文件无法下载的问题
Mac版AppStore无法下载、升级错误处理
在mac版本AppStore下载软件的时候,有时会出现“This item is temporarily unavailable, Try again later”错误提示,当然等一会儿或者不断重新尝试都是无法下载的。 StackOverFlow上找到一个解法: Mac App Store --> Store --> Check for Unfinished Downloads... 通常是因为软件原来下载的时候,跟现在登录的账号不是同一个并且不再同一个国家,所以当前国家的AppStore中很可能
俺踏月色而来
2018/06/20
7650
如何解决缓存雪崩、缓存穿透和缓存击穿?
上一期视频,我跟大家聊了我对缓存雪崩、缓存穿透和缓存击穿的理解。那官方又是如何解释的呢?另外,往期面试题解析中配套的文档我已经准备好,想获得的可以在我的煮叶简介中找到。
Tom弹架构
2022/08/22
5650
如何解决缓存雪崩、缓存穿透和缓存击穿?
解决wp-super-cache无法(预)缓存问题
突然发现 WP-SUPER-CACHE 无法预缓存,点击【立即加载预缓存】后没有任何效果,并且垃圾回收定时器也失效了,缓存文件全是几天前的,感觉很奇怪! 闲下来的时候,突然想起前些天对博客做的一些优化
张戈
2018/03/23
1.7K0
解决wp-super-cache无法(预)缓存问题
使用MDS无法下载macOS解决办法
最近macOS更新了,我之前制作的U盘部署版本太老了,每次都要再更新一次,所以我重新通过MDS制作U盘
繁华是客
2023/03/03
8030
Android Studio升级到2.3的编译问题解决办法
2017年3月2日,谷歌发布了Android Studio 2.3,想必不少朋友已经兴冲冲把Android Studio更新到了2.3。博主这几天也赶紧升级到Android Studio 2.3,孰料升级之后发现原来的项目反而变得不能编译了。2.3升级完毕后,Android Studio跳出下面一个提示框,说是为了充分发挥新特性的优势,建议开发者把Gradle升级到3.3。
aqi00
2019/01/18
6690
IDM无法下载.ts文件解决方案
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161222.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
6.4K1
什么是缓存击穿、缓存穿透、缓存雪崩?如何解决?
概念:指缓存和数据库中都没有用户想要查询到的数据,并且不断进行请求,造成数据库承载部分压力。
闫同学
2022/10/31
5060
什么是缓存击穿、缓存穿透、缓存雪崩?如何解决?
redis缓存雪崩 缓存穿透 缓存击穿如何解决_缓存击穿问题
每一个put进来的值会经过几个hash函数运算(预测插入数据的数量和容错率,系统自动推断出来设置几个hash函数合适),然后映射到响应为位上,将响应位的bit置为1。当查询值是否在布隆过滤器中的时候,将该值与上述hash函数运算,如果各个位置的bit均为1,则判断该值极有可能在布隆过滤器中。
全栈程序员站长
2022/09/21
7250
redis缓存雪崩 缓存穿透 缓存击穿如何解决_缓存击穿问题
Android:解决debug版本无法运行的问题
在用Android Studio做开发时,如果将build之后的app-debug版本发给用户,用户会无法安装。这里有两种解决方案:
zstar
2022/06/14
1.2K0
SpringBoot发布了新年版本,v2.2.3发布
今天是小年,农历的腊月二十三号,从今天开始就正式步入了新年倒计时了,提前祝大家新年快乐!!!
恒宇少年
2020/02/18
1.2K0

相似问题

错误:“脱机模式没有缓存版本”

13

无法下载builder.jar (com.android.tools.build:builder:3.2.0):脱机模式下没有缓存的版本

10

错误:无法下载工件'com.android.tools.build:gradle:0.13.2:gradle.jar':没有可用于脱机模式的缓存版本

40

Android给出错误“无法下载builder.jar (com.android.tools.build:builder:3.2.0):没有缓存版本可用于脱机模式”

20

没有缓存版本的com.android.tools.build:gradle:3.3可用于脱机模式

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文