Поскольку я не могу подробно описать свое текущее состояние в комментариях выше, я напишу это как частичный ответ, к которому я могу получить доступ, когда я укажу порт в своем URL.Резюме моего окружения таково:
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 \
-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
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/conf.d/default.conf
# 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;
}
}
Запущенные контейнеры:
[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
Журнал из nginx, когда я звоню http://ldap.company.com в браузере: - FAILED
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"
Вход в nginx, когда я звоню https://ldap.company.com:6443 в браузере - УСПЕХ
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 ~] $
Вопросы, которые приходят мне в голову:
- Правильно ли я создаю контейнеры?
- Нужно ли мне при создании контейнера ldapуказать некоторые порты -p XXX: XX?
- Нужно ли экспортировать порты также в ldap и ldapadmin, как я это делал с помощью ключа -expose?
- Что я делаю неправильно?
Заранее благодарим всех, кто может помочь, и особенно вас, weibeld, за ваше время и ценные комментарии.
Дополнительная информация:
На контейнере NGINX я получаю эти ошибки:
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:
[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, и я обнаружил, что упоминание в двух местах:
1.
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.
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-папку или редактировать этот файл на месте 2 и указать путь к файлу конфигурации phpadmin: root @ d65a1005d5aa: / container / service / phpldapadmin / assets / config # lsconfig.php README.md
Или, может быть, указать путь к / var / www / phpldapadmin_bootstrap / htdocs?