Как я могу проксировать веб-сайт из Docker через Nginx, не действуя как локальный хост?
Моя текущая установка состоит из хоста Ubuntu с парой контейнеров Docker с открытыми портами.Контейнеры Docker доступны только локально. Доступность в Интернете состоит из сервера Nginx, который проксирует контейнеры Docker на определенные поддомены.
В одном контейнере Docker я запускаю Wordpress. я вытащил его из Докер Хаб используя этот файл YML:
версия: «3.1»
Сервисы:
вордпресс:
имя_контейнера: myapp-cms
изображение: вордпресс
перезапуск: всегда
порты:
- 8087:80
среда:
WORDPRESS_DB_HOST: дб
WORDPRESS_DB_USER: пример пользователя
WORDPRESS_DB_PASSWORD: пример передачи
WORDPRESS_DB_NAME: пример БД
тома:
- /srv/wordpress/cms:/var/www/html
дБ:
имя_контейнера: myapp-db
изображение: MySQL: 5.7
перезапуск: всегда
среда:
MYSQL_DATABASE: пример БД
MYSQL_USER: пример пользователя
MYSQL_PASSWORD: пример передачи
MYSQL_RANDOM_ROOT_PASSWORD: '1'
тома:
- /srv/wordpress/db:/var/lib/mysql
Этот контейнер Docker предоставляет внутренний порт 8087, который я затем проксирую мой поддомен.мойдомен.com
. Это файл конфигурации Nginx:
сервер {
корень /var/www/mysubdomain.mydomain.com;
индекс index.html index.htm index.nginx-debian.html;
имя_сервера mysubdomain.mydomain.com;
client_max_body_size 1000M;
место расположения / {
# try_files $uri $uri/ =404;
proxy_pass http://localhost:8087;
}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.com-0003/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0003/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
сервер {
если ($ host = mysubdomain.mydomain.com) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80;
имя_сервера mysubdomain.mydomain.com;
вернуть 404; # под управлением Certbot
}
Проблема в том, что страница (в данном случае Wordpress) по-прежнему использует локальный: 8087
для каждой ссылки. Это уничтожает любую возможность щелкнуть что-либо, а также уничтожает загрузку библиотек CSS и JavaScript.
РЕДАКТИРОВАТЬ 1:
Я добавил следующие две строки в wp-config.php
:
определить('WP_HOME','https://mysubdomain.mydomain.com');
определить('WP_SITEURL','https://mysubdomain.mydomain.com');
Он успешно загружает страницу настройки, а также адаптирует доменное имя. Я могу успешно настроить WordPress, но как только я сохраняю настройки (имя пользователя, пароль, адрес электронной почты), браузер загружает пустую страницу. Вызов curl -X ПОЛУЧИТЬ https://mysubdomain.mydomain.com
возвращает пустой ответ.