#docker #nginx #configuration #reverse-proxy
Вопрос:
уже несколько дней я играю с NGINX и Докером. Я пытаюсь настроить NGINX в качестве прокси-сервера для других служб, но у меня все сложилось. Позвольте мне объяснить мою проблему. во-первых, у меня есть несколько контейнеров Docker, работающих на сервере Ubuntu 20 LTS вместе, настроенных в пользовательской сети под названием службы.
docker network create -d bridge --subnet=172.18.0.0/16 services
Затем я запускаю контейнер для MySQL, phpMyAdmin, Apache2/PHP7 и Nginx. Вот команды, с помощью которых я создавал контейнеры:
docker run -d --name mysql --restart=always
--net services --ip 172.18.0.3
-e MYSQL_ROOT_PASSWORD=xxxx
-v /home/mysql/data:/var/lib/mysql
-v /home/mysql/conf:/etc/mysql
mysql:5.7.32
docker run -d --name phpmyadmin --restart=always
-p 8000:80 --net services --ip 172.18.0.2
-e PMA_HOST=172.18.0.3
-e MYSQL_ROOT_PASSWORD=xxxx
-v /home/sql:/etc/phpmyadmin/sql
-v /home/phpMyAdmin.config.inc.php:/etc/phpmyadmin/config.user.inc.php
phpmyadmin/phpmyadmin:4.8
docker run -d --name lamp-7.4 --restart=always
-p 8002:80 -p 587 -p 25 -p 465 -p 443 -p 3306 --net services --ip 172.18.0.99
-v /home/htdocs:/var/www/html
-v /home/apache:/etc/apache2
-v /home/php:/usr/local/etc/php
php:7.4.15-apache
docker run -d --name nginx --restart=always
-p 80:80 -p 587 -p 25 -p 465 -p 443 -p 8002 -p 8000 -p 8090 --net services --ip 172.18.0.100
-v /home/nginx:/etc/nginx/conf.d
nginx:1.19.7
Каждый контейнер работает нормально, если я подключаюсь напрямую по IP-адресу сервера (а не по IP-адресу контейнера). Допустим, это я: 213.13.9.121. На сервере Apache запущены 2 установки WordPress под названием site и site2. Это означает, что я достигаю этих установок с помощью URI
До phpMyAdmin можно добраться с помощью URI:
Теперь у меня есть мой домен sample.org доступен с помощью контейнера Nginx. Мой файл конфигурации Nginx по умолчанию.config:
server {
listen 80;
listen [::]:80;
server_name sample.org www.sample.org;
charset UTF-8;
gzip on;
access_log off;
rewrite_log on;
error_log /var/log/nginx/error.log error;
location /dba/ {
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://213.13.9.121:8000/;
proxy_read_timeout 60;
}
}
Я не могу найти конфигурацию, в которой службы доступны по следующему URI:
- http://sample.org/dba (phpmyadmin)
- http://sample.org/site1 (первая страница wordpress)
- http://sample.org/site2 (вторая страница worpress)
Я уже открыл все определенные порты в конфигурации моих провайдеров (IONOS, Облачный сервер), и кэш домена установлен на 1 минуту.
Каждый вариант конфигурации прокси-сервера, который я пробовал, работал не очень хорошо. В лучшем случае я смог увидеть за http://sample.org/dba/ страница входа в систему, но после входа в систему я получил перенаправление на sample.org без пути /dba/. после того, как я добавил это вручную, это работало. Поиграв несколько дней без всякого успеха, я в отчаянии и к тому же немного растерян. Потому что, если я сделал правильное перенаправление, мне нужно включить SSL. Сертификаты, которые я получил от своего провайдера, я действительно надеюсь найти здесь некоторую помощь. Большое спасибо заранее.
Комментарии:
1. Для phpMyAdmin вам, скорее всего, придется установить
PMA_ABSOLUTE_URI
значениеhttp://sample.org/dba
(см. Раздел «Использование обратного прокси-сервера» здесь ).
Ответ №1:
К сожалению, с NGINX у меня ничего не вышло. Попробовав несколько способов, прочитав тонны учебных пособий, я переключился обратно на HTTP-сервер Apache 2. В начале файлы конфигурации NGINX кажутся более удобными для пользователя, но использовать приложение с Docker в качестве обратного прокси-сервера не удалось. Даже я не нашел специалистов для профессиональной поддержки. Мой вывод: Оставайтесь со старыми добрыми хорошо знакомыми вещами, без какого-либо стресса. Может быть, через несколько лет ситуация изменится, но пока для меня это не вариант.