В своем проекте я использую Django и nginx, но хочу управлять своими облачными базами данных через phpMyAdmin.
Django работает нормально, но я не могу сделать то же самое с phpmyadmin, потому что он запущен в Apache по адресу localhost:8080, тогда как я хочу, чтобы он работал в nginx по адресу localhost/phpmyadmin.
вот docker-compose.yml
version: "3.9"
services:
web:
restart: always
build:
context: .
env_file:
- .env
volumes:
- ./project:/project
expose:
- 8000
nginx:
restart: always
build: ./nginx
volumes:
- ./static:/static
ports:
- 80:80
depends_on:
- web
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
environment:
PMA_HOST: <host_address>
PMA_USER: <user>
PMA_PASSWORD: <password>
PMA_PORT: 3306
UPLOAD_LIMIT: 300M
ports:
- 8080:80
и nginx default.conf
upstream django{
server web:8000;
}
server{
listen 80;
location / {
proxy_pass http://django;
}
location /pma/ {
proxy_pass http://localhost:8080/;
proxy_buffering off;
}
location /static/ {
alias /static/;
}
}
Надеюсь, кто-нибудь сможет мне подсказать, как заставить nginx работать в качестве обратного прокси-сервера для контейнера Docker phpMyAdmin.
Если какая-то важная информация отсутствует, пожалуйста, дайте мне знать.
решение1
Вы не указали, какой именно негативный эффект вы испытываете, но, возможно, phpMyAdmin ожидает заголовок хоста для перенаправления запросов в PMA_HOST
.
Вы можете попробовать передать заголовок хоста в конфигурации прокси-сервера:
location / {
proxy_pass http://localhost:8080/;
proxy_buffering off;
proxy_set_header Host $host;
}
Совет: PhpMyAdmin не славится своей безопасностью, и если вы посмотрите журналы своего веб-сервера, вы увидите постоянные попытки обнаружить установку phpMyadmin и проверить ее на наличие различных уязвимостей.
По моему мнению, phpMyadmin — это сервис уровня разработки, и его не должно быть на сервере производства. Гораздо безопаснее использовать ssh-туннель через ваш хост к вашему SQL-серверу, используя, например, MySQL Workbench или любой другой подходящий SQL-клиент.