Я создаю две службы веб-API, назовем их обратным API (
Код: Выделить всё
back.api.devКод: Выделить всё
front.api.devЧто я пробовал до сих пор:
Задний API подключен к базе данных MySQL, а передний API отправляет только запросы cURL к заднему API. Оба API построены на Symfony и обрабатываются докерным контейнером PHP-FPM. Все обслуживается контейнером Docker Apache 2.4.
Отправка запросов через Postman и запросы cURL к back.api.dev и front.api.dev работают отлично. Он работает как с моего хоста, так и с контейнера Apache. Я также добавил 127.0.0.1 back.api.dev и 127.0.0.1 front.api.dev в файл моего хост-компьютера /etc/hosts. Задний API также хорошо подключен к базе данных.
Но когда я отправляю запрос на определенный передний маршрут API, который запускает запрос cURL к заднему API с помощью клиента GuzzleHTTP и отправляет ответ обратно пользователю, я получаю ошибку cURL 7: Не удалось подключиться к порту back.api.dev 80: соединение отклонено (см. https://curl.haxx.se/libcurl/c/libcurl-errors.html) для http://back.api.dev/api/videos/
Я также пытался отправлять запросы cURL из CLI внутри контейнера front_api, но результат тот же. Я также пытался отправить его непосредственно на порт 9000, обрабатываемый php-fpm, но получаю ошибку cURL 56: Ошибка приема: сброс соединения по одноранговому узлу.
Вот файл docker-compose.yml:
Код: Выделить всё
version: "3.8"
networks:
my_api_network:
driver: bridge
# external:
# name: my_api_network_default
services:
apache:
container_name: 'api_apache'
image: bitnami/apache:latest
ports:
- 8080:8080
# - 8443:8443
volumes:
- ./docker/apache/vhosts/back-api-dev.conf:/vhosts/back-api-dev.conf:ro
- ./docker/apache/vhosts/front-api-dev.conf:/vhosts/front-api-dev.conf:ro
volumes_from:
- php_backend_api
- php_frontend_api
depends_on:
- php_backend_api
- php_frontend_api
networks:
- my_api_network
php_backend_api:
hostname: 'back.api.dev'
container_name: 'php_backend_api'
build:
context: docker/php7-fpm
network: host
args:
TIMEZONE: 'UTC'
volumes:
- ./docker/php7-fpm/php.ini:/usr/local/etc/php/php.ini:ro
- ./back_api/:/var/www/back_api:cached
- ./back_api/vendor:/var/www/back_api/vendor:delegated
- /var/www/back_api/var/
networks:
- my_api_network
php_frontend_api:
hostname: 'front.api.dev'
container_name: 'php_frontend_api'
build:
context: docker/php7-fpm
network: host
args:
TIMEZONE: 'UTC'
volumes:
- ./docker/php7-fpm/php.ini:/usr/local/etc/php/php.ini:ro
- ./front_api/:/var/www/front_api:cached
- ./front_api/vendor:/var/www/front_api/vendor:delegated
- /var/www/front_api/var/
networks:
- my_api_network
db:
container_name: 'mysql_db'
image: mysql:5.7
restart: always
volumes:
- ./docker/data/mysql:/var/lib/mysql:delegated
- ./docker/mysql:/etc/mysql/conf.d:ro
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
TZ: ${TIMEZONE}
command: --sql_mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
networks:
- my_api_network
Код: Выделить всё
ServerName back.api.dev
DocumentRoot "/var/www/back_api/public"
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php_backend_api:9000/var/www/back_api/public/$1
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
LogLevel debug
# LogLevel warn
# LogLevel notice
ErrorLog /opt/bitnami/apache2/logs/error-back.log
CustomLog /opt/bitnami/apache2/logs/access-back.log combined
Спасибо за помощь.
Подробнее здесь: https://stackoverflow.com/questions/650 ... on-refused
Мобильная версия