Tengo una API backend.mysite.local
y puedo acceder a ella directamente desde el navegador. Pero cuando intento llamar a la API desde el contenedor Node, aparece 502 Bad Gateway con el siguiente error:
connect() falló (113: El host es inaccesible) al conectarse al flujo ascendente, cliente: 172.20.0.1, servidor:www.misitio.local, solicitud: "GET /api/items HTTP/1.1", ascendente: "http://172.20.0.3:3000/api/items", host: "www.mysite.local"
Esta es mi configuración de nginx (soy nuevo en nginx, así que podría hacerlo de una manera más breve, pero en su mayoría son bloques para la redirección del puerto 80 al puerto 443, por lo que le agradecería que también la revise)
server {
listen 443 ssl;
server_name backend.mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
index index.php index.html;
server_name backend.mysite.local;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
set $METHODS 'GET, POST, OPTIONS, HEAD';
set $HEADERS 'Authorization, Origin, X-Requested-With, Content-Type, Accept';
if ( $request_method = POST ){
add_header 'Access-Control-Allow-Origin' 'https://www.mysite.local';
add_header 'Access-Control-Allow-Credentials' 'true';
}
}
}
server {
listen 80;
server_name http.backend.mysite.local;
return 301 https://backend.mysite.local$request_uri;
}
server {
listen 80;
server_name nginx;
return 301 https://backend.mysite.local$request_uri;
}
server {
listen 80;
server_name www.mysite.local;
return 301 https://www.mysite.local$request_uri;
}
server {
listen 80;
server_name mysite.local;
return 301 https://www.mysite.local$request_uri;
}
server {
listen 443 ssl;
server_name mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
return 301 https://www.mysite.local$request_uri;
}
server {
listen 443 ssl;
server_name www.mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
location / {
proxy_pass http://node:3000;
}
}
Editar: Esto es docker-compose.yml
:
networks:
mysite:
driver: bridge
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8088:8088"
- "80:80"
- "443:443"
networks:
- mysite
php:
build:
context: ./laravel
dockerfile: Dockerfile
container_name: php
ports:
- "9000:9000"
networks:
- mysite
node:
build:
context: ./react
dockerfile: Dockerfile
container_name: react
ports:
- "3000:3000"