Я запускаю Docker в Windows через WSL.
Я пытаюсь прокси-запросы от моего клиентского приложения, работающего на порту 4200, на мой сервер, работающий в том же домене на порту 80. Однако, когда он пытаетсяэто, я получаю следующую ошибку в журналах:
[HPM] GET /api/test -> http://mysite.local/api/
client_1 | [HPM] Error occurred while trying to proxy request /api/test from mysite.local:4200 to http://mysite.local/api/ (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)
Я могу получить доступ к http://mysite.local/api/
напрямую без проблем. Кажется, что только прокси из :4200
не работает.
У меня есть докер-контейнер приложения Angular, контейнер nginx, который обслуживает PHP API, и контейнер php-fpm для PHP API.
Все выполняются через docker compose.
Вот весь соответствующий код и конфигурация.
Запись хоста Windows
127.0.0.1 mysite.local
URL-адреса
proxy.conf.json
{
"/api/*" : {
"target" : "http://mysite.local/api",
"secure" : false,
"logLevel" : "debug",
"changeOrigin": true
}
}
Команда Angular ng serve черезnpm run start
ng serve --proxy-config proxy.conf.json --host 0.0.0.0 --port 4200 --poll 1 --disableHostCheck
--host
должно быть 0.0.0.0
, чтобы приложение Angular было доступно.
docker-compose.yml
version: '3'
services:
client:
image: angular-cli:1.1
volumes:
- ./src/client:/var/www
ports:
- "4200:4200"
command: >
bash -c "cd /var/www && npm run start"
api:
image: laravel-app:1.5
volumes:
- ./src/server:/var/www
- ./opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
- ./xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
- "DB_DATABASE=..."
- "DB_USERNAME=..."
- "DB_PASSWORD=..."
depends_on:
- database
- web
working_dir: /var/www
web:
image: nginx:1.10
volumes:
- ./src/server:/var/www
- ./vhost.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
- "443:443"
database:
image: mysql:5.7.28
volumes:
- dbdata:/var/lib/mysql
environment:
- "MYSQL_DATABASE=mysite"
- "MYSQL_USER=..."
- "MYSQL_PASSWORD=..."
- "MYSQL_ROOT_PASSWORD=..."
ports:
- 33061:3306
volumes:
dbdata:
Изображения Docker
Ни одно из изображений Docker, используемых в файле docker-compose, не предоставляет никаких портов. Все сопоставление портов выполняется через сам файл docker-compose.
nginx vhost.conf
server {
listen 80;
index index.php index.html;
root /var/www/public;
server_name mysite.local www.mysite.local;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass api:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Я не уверен, в чем проблема (например, конфигурация прокси, конфигурация nginx или конфигурация докера).