У меня есть API в backend.mysite.local
и я могу получить к нему доступ прямо из браузера.
Но когда я пытаюсь вызвать API из контейнера Node, я получаю 502 Bad Gateway со следующей ошибкой:
connect() не удалось (113: хост недоступен) при подключении к
вверх по течению, клиент: 172.20.0.1, сервер: www.mysite.local, запрос: "ПОЛУЧИТЬ
/api/items HTTP/1.1", вверх по течению:
"http://172.20.0.3:3000/api/items", хост: "www.mysite.local"
Это моя конфигурация nginx (я новичок в nginx, поэтому я мог бы сделать это короче, но в основном это блоки для перенаправления с порта 80 на порт 443, поэтому был бы признателен, если бы вы также просмотрели его)
сервер {
слушать 443 ssl;
имя_сервера backend.mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
индекс index.php index.html;
имя_сервера backend.mysite.local;
журнал_ошибок /var/log/nginx/error.log;
журнал_доступа /var/log/nginx/access.log;
корень /var/www/html/public;
место расположения / {
try_files $uri $uri/ /index.php?$query_string;
}
расположение ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass PHP: 9000;
fastcgi_index index.php;
включить fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
установить $METHODS 'GET, POST, OPTIONS, HEAD';
установить $HEADERS 'Авторизация, происхождение, X-Requested-With, Content-Type, Accept';
если ($request_method = POST){
add_header 'Access-Control-Allow-Origin' 'https://www.mysite.local';
add_header 'Access-Control-Allow-Credentials' 'true';
}
}
}
сервер {
слушать 80;
имя_сервера http.backend.mysite.local;
вернуть 301 https://backend.mysite.local$request_uri;
}
сервер {
слушать 80;
имя_сервера nginx;
вернуть 301 https://backend.mysite.local$request_uri;
}
сервер {
слушать 80;
имя_сервера www.mysite.local;
вернуть 301 https://www.mysite.local$request_uri;
}
сервер {
слушать 80;
имя_сервера mysite.local;
вернуть 301 https://www.mysite.local$request_uri;
}
сервер {
слушать 443 ssl;
имя_сервера mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
вернуть 301 https://www.mysite.local$request_uri;
}
сервер {
слушать 443 ssl;
имя_сервера www.mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
место расположения / {
прокси_пасс http://узел:3000;
}
}
Изменить: это докер-compose.yml
:
сети:
мой сайт:
водитель: мост
Сервисы:
нгинкс:
изображение: nginx: стабильный-альпийский
имя_контейнера: nginx
порты:
- "8088:8088"
- "80:80"
- "443:443"
сети:
- мой сайт
php:
строить:
контекст: ./ларавел
докерфайл: Докерфайл
имя_контейнера: php
порты:
- "9000:9000"
сети:
- мой сайт
узел:
строить:
контекст: ./реагировать
докерфайл: Докерфайл
имя_контейнера: реагировать
порты:
- "3000:3000"