Score:0

ไม่สามารถเข้าถึงโฮสต์ได้ขณะเชื่อมต่อกับอัปสตรีมจากคอนเทนเนอร์ Node Docker

ธง in

ฉันมี 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"       
Michael Hampton avatar
cz flag
คุณสร้างคอนเทนเนอร์ของคุณอย่างไร แสดงการกำหนดค่าที่เกี่ยวข้อง (เช่น docker-compose.yml)
Stackerito avatar
in flag
ขอบคุณ แก้ไขโพสต์ เพิ่ม `docker-compose.yml` ฉันตระหนักว่าฉันอาจเข้าใจสถาปัตยกรรมแอปทั้งหมดของฉันผิดไปโดยสิ้นเชิง ฉันผสมชื่อโฮสต์เครื่อง Windows โฮสต์ของฉันกับชื่อคอนเทนเนอร์ Docker ภายในและทั้งหมดก็ผสมกัน
Michael Hampton avatar
cz flag
ตู้คอนเทนเนอร์ของคุณหมดจริงหรือไม่? ข้อผิดพลาดที่คุณได้รับคือข้อผิดพลาดที่ฉันคาดไว้หากคอนเทนเนอร์ไม่ทำงาน
Stackerito avatar
in flag
คุณเป็นผู้เชี่ยวชาญตัวจริง node container ปิดตัวเองหลังจากที่ฉันพบข้อผิดพลาดในโค้ด และฉันพูดถูกในความคิดเห็นที่แล้วหรือไม่? ฉันผสมชื่อโฮสต์กับการตั้งชื่อ Docker ภายในหรือไม่ ฉันควรใช้โหมด `host` แทนในกรณีของฉันได้ไหม
Michael Hampton avatar
cz flag
ฉันไม่ได้ใช้ Docker บน Windows ดังนั้นฉันจึงไม่สามารถพูดอะไรเกี่ยวกับเรื่องนี้ได้ จากปัญหาทั้งหมดที่ฉันเคยเห็นผู้คนมีฉันคงไม่แนะนำ มันจะไม่ถูกปรับใช้กับการผลิตด้วยวิธีนั้น
Stackerito avatar
in flag
ขอบคุณ.ถ้านั่นเป็นที่ที่เหมาะสมที่จะถาม: ในกรณีของฉันที่ฉันมีบริการ Node, Nginx, MySQL และ PHP คุณจะแนะนำให้ฉันพัฒนาโครงการอย่างไร โดยตรงบน Windows (อย่างที่ฉันทำในตอนแรก?) ฉันต้องการให้มันใกล้เคียงกับการผลิตมากที่สุด (ถ้านั่นเป็นสิ่งที่ดี?) ฉันเพิ่งเริ่มใช้ Docker เพราะฉันเห็นที่ทำงานบางแห่งขอประสบการณ์ด้วย ฉันเลยอยากเรียนรู้
Michael Hampton avatar
cz flag
เช่นเดียวกับบน Linux โดยตรงโดยไม่มีตัวกลางเช่น WSL2 ซึ่งบางครั้งก็ทำสิ่งแปลกประหลาด เริ่ม Linux VM ของคุณเองและลองเล่นดู
Stackerito avatar
in flag
ขอขอบคุณ. และมีวิธีที่เหมาะสมในการติดตั้ง Nginx บน Windows หรือไม่ ถ้าไม่ฉันอาจจะติดตั้ง Linux เป็นบูตคู่ข้างเครื่อง Windows ของฉัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา