ฉันมี API ที่ backend.mysite.local
และฉันสามารถเข้าถึงได้โดยตรงจากเบราว์เซอร์
แต่เมื่อฉันพยายามเรียก API จากภายในคอนเทนเนอร์โหนด ฉันได้รับ 502 Bad Gateway พร้อมข้อผิดพลาดต่อไปนี้:
การเชื่อมต่อ () ล้มเหลว (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;
server_name backend.mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
ดัชนี index.php index.html;
server_name backend.mysite.local;
error_log /var/log/nginx/error.log;
access_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 'รับ, โพสต์, ตัวเลือก, หัว';
ตั้งค่า $HEADERS 'การอนุญาต, ต้นทาง, X-ขอ-ด้วย, ประเภทเนื้อหา, ยอมรับ';
ถ้า ( $request_method = POST ){
add_header 'Access-Control-Allow-Origin' 'https://www.mysite.local';
add_header 'Access-Control-Allow-Credentials' 'จริง';
}
}
}
เซิร์ฟเวอร์ {
ฟัง 80;
server_name http.backend.mysite.local;
ส่งคืน 301 https://backend.mysite.local$request_uri;
}
เซิร์ฟเวอร์ {
ฟัง 80;
server_name nginx;
ส่งคืน 301 https://backend.mysite.local$request_uri;
}
เซิร์ฟเวอร์ {
ฟัง 80;
server_name www.mysite.local;
ส่งคืน 301 https://www.mysite.local$request_uri;
}
เซิร์ฟเวอร์ {
ฟัง 80;
server_name mysite.local;
ส่งคืน 301 https://www.mysite.local$request_uri;
}
เซิร์ฟเวอร์ {
ฟัง 443 ssl;
server_name 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;
server_name www.mysite.local;
ssl_certificate /etc/ssl/mysite.local.crt;
ssl_certificate_key /etc/ssl/mysite.local.key;
ที่ตั้ง / {
proxy_pass http://node:3000;
}
}
แก้ไข: นี่คือ นักเทียบท่า-compose.yml
:
เครือข่าย:
เว็บไซต์ของฉัน:
คนขับ: สะพาน
บริการ:
จิงซ์:
รูปภาพ: nginx:stable-alpine
ชื่อคอนเทนเนอร์: nginx
พอร์ต:
- "8088:8088"
- "80:80"
- "443:443"
เครือข่าย:
- ไซต์ของฉัน
php:
สร้าง:
บริบท: ./laravel
นักเทียบท่าไฟล์: Dockerfile
ชื่อคอนเทนเนอร์: php.ini
พอร์ต:
- "9000:9000"
เครือข่าย:
- ไซต์ของฉัน
โหนด:
สร้าง:
บริบท: ./react
นักเทียบท่าไฟล์: Dockerfile
container_name: ตอบสนอง
พอร์ต:
- "3000:3000"