Score:1

การเชื่อมต่อ () ล้มเหลว (111: การเชื่อมต่อถูกปฏิเสธ) ขณะเชื่อมต่อกับอัปสตรีมด้วยเว็บไซต์แบบคงที่

ธง cn

เป้าหมายของฉันคือมี 2 docker container:

  • คอนเทนเนอร์ nginx (อิงตาม nginx:latest) เพื่อทำงานเป็นพร็อกซีย้อนกลับ
  • คอนเทนเนอร์ที่มีเว็บไซต์คงที่ (อ้างอิงจาก nginx:alpine)

ในภายหลังฉันจะเพิ่มบริการแบ็กเอนด์หลัก 1+ .net (ยังไม่สำคัญสำหรับตอนนี้) ขณะนี้เมื่อฉันพยายามเข้าถึงเว็บเซิร์ฟเวอร์ของฉันโดยใช้ที่อยู่ IP สาธารณะ ฉันได้รับเกตเวย์ 502 ไม่ถูกต้อง นี่คือการกำหนดค่าปัจจุบันของฉัน:

นักเทียบท่า-compose.yaml

รุ่น: '3'
บริการ:
  พร็อกซีย้อนกลับ:
    ภาพ: nginx: ล่าสุด
    ชื่อคอนเทนเนอร์: reverse_proxy
    ขึ้นอยู่กับ:
      - เว็บไซต์คงที่
    ปริมาณ:
      - ./reverse_proxy/nginx.conf:/etc/nginx/nginx.conf
    พอร์ต:
      - 80:80
  เว็บไซต์คงที่:
    ภาพ: เว็บไซต์ sm-static
    สร้าง:
      บริบท: ./เว็บไซต์
    ชื่อคอนเทนเนอร์: sm_static_website
    พอร์ต:
      - "8080:80"

nginx.conf สำหรับพร็อกซีย้อนกลับ:

worker_processes อัตโนมัติ
รวม /etc/nginx/modules-enabled/*.conf;

เหตุการณ์ {
    worker_connections 1024;
}

http {
    เซิร์ฟเวอร์ {
            ฟัง 80 default_server;
            ฟัง [::]:80 default_server;

            ชื่อเซิร์ฟเวอร์ x.x.x.x; #my_public_ip

            ที่ตั้ง / {
                    proxy_pass http://sm_static_website:8080;
                    proxy_set_header X-ส่งต่อ-สำหรับ $remote_addr;
            }
    }
}

Dockerfile สำหรับเว็บไซต์คงที่:

จาก nginx:อัลไพน์
เวิร์กดีอาร์ /html
สำเนา /var/www/html
เปิดเผย 8080

จากคอนเทนเนอร์เว็บไซต์ของฉัน ฉันเห็นว่า nginx กำลังทำงาน / กำลังฟังอยู่ที่ 80:

netstat -tulpn | ฟัง
tcp 0 0 127.0.0.11:41389 0.0.0.0:* ฟัง -
tcp 0 0 0.0.0.0:80 0.0.0.0:* ฟัง 1/nginx: มาสเตอร์โปร
tcp 0 0 :::80 :::* LISTE 1/nginx: มาสเตอร์โปร

จากเซิร์ฟเวอร์ของฉัน ฉันเห็นว่าทั้งคอนเทนเนอร์ remote_proxy และเว็บไซต์กำลังฟัง 80/8080 ตามลำดับ:

netstat -tulpn | ฟัง
tcp 0 0 0.0.0.0:80 0.0.0.0:* ฟัง 13936/docker-proxy
tcp 0 0 0.0.0.0:8080 0.0.0.0:* ฟัง 13797/docker-proxy
tcp6 0 0 :::80 :::* ฟัง 13942/docker-proxy
tcp6 0 0 :::8080 :::* ฟัง 13804/docker-proxy

ps -aux เมื่อเซิร์ฟเวอร์ส่งคืน:

ราก 13936 0.0 0.0 1075140 3580 ? Sl 00:24 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.3 -container-port 80
ราก 13797 0.0 0.0 1148872 3624 ? Sl 00:24 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.18.0.2 -container-port 80

บันทึกของคอนเทนเนอร์เว็บไซต์ไม่แสดงข้อผิดพลาด กระบวนการของผู้ปฏิบัติงานกำลังทำงานอยู่ อย่างไรก็ตาม บันทึกพร็อกซีย้อนกลับแสดง:

2022/05/20 01:20:29 [ข้อผิดพลาด] 31#31: *1 การเชื่อมต่อ() ล้มเหลว (111: การเชื่อมต่อถูกปฏิเสธ) ขณะเชื่อมต่อกับอัปสตรีม ไคลเอ็นต์: x.x.x.x เซิร์ฟเวอร์: x.x.x.x คำขอ: "GET / HTTP/1.1 ", ต้นน้ำ: "http://172.19.0.2:8080/", โฮสต์: "x.x.x.x"

ความคิดใดที่ฉันทำผิด? ถ้าฉันลบ Volumes: line ออกจาก docker-compose.yml ฉันจะได้รับหน้า nginx เริ่มต้นจากคอนเทนเนอร์ reverse-proxy สิ่งนี้บ่งชี้ว่ากำลังฟังอย่างถูกต้อง ยอมรับคำขอ แต่ไม่ได้เปลี่ยนเส้นทางไปยังคอนเทนเนอร์ของเว็บไซต์

Score:0
ธง in

เดอะ ท่า คำสั่งใน docker-compose กำหนดพอร์ตที่เปิดเผยสู่ภายนอก คอนเทนเนอร์พร็อกซีย้อนกลับของคุณสามารถเข้าถึงบริการภายใน เว็บไซต์คงที่ โดยตรงเมื่อเชื่อมโยงเข้าด้วยกัน ดังนั้นคุณจึงไม่ใช้พอร์ตที่เปิดเผยที่นี่

เนื่องจากเว็บไซต์ของคุณอยู่ในคอนเทนเนอร์ เว็บไซต์คงที่ กำลังฟังพอร์ต 80 คุณต้องใช้มันแทนพอร์ตที่เปิดเผย

ก่อนอื่นคุณต้องเชื่อมโยงคอนเทนเนอร์เข้าด้วยกัน โดยเพิ่มลงใน พร็อกซีย้อนกลับ บล็อก:

ลิงค์:
  - เว็บไซต์คงที่

ของคุณ proxy_pass คำสั่งควรเป็น:

proxy_pass http://sm_static_website;

หากคุณไม่ต้องการเปิดเผยจริง เว็บไซต์คงที่ คอนเทนเนอร์ไปข้างนอกคุณสามารถเอา พอร์ต คำสั่งที่นั่น

ดังนั้น นักเทียบท่า-compose.yml ควรมีลักษณะดังนี้:

รุ่น: '3'
บริการ:
  พร็อกซีย้อนกลับ:
    ภาพ: nginx: ล่าสุด
    ชื่อคอนเทนเนอร์: reverse_proxy
    ขึ้นอยู่กับ:
      - เว็บไซต์คงที่
    ปริมาณ:
      - ./reverse_proxy/nginx.conf:/etc/nginx/nginx.conf
    พอร์ต:
      - 80:80
    ลิงค์:
      - sm_static_website
  เว็บไซต์คงที่:
    ภาพ: เว็บไซต์ sm-static
    สร้าง:
      บริบท: ./เว็บไซต์
    ชื่อคอนเทนเนอร์: sm_static_website

TBH: ฉันไม่เคยพบว่ามีประโยชน์ในการใช้ ตู้คอนเทนเนอร์_name คำสั่ง ฉันไม่แน่ใจว่าคุณต้องใช้ container_name ที่กำหนดไว้หรือไม่ sm_static_website หรือเพียงแค่ เว็บไซต์คงที่ ใน ลิงค์ และใน proxy_pass คำสั่ง ถ้าปล่อยไว้ก็คงเฉยๆ เว็บไซต์คงที่.

cn flag
ขอบคุณ Gerald การเปลี่ยนเป็นพอร์ต 80 ใช้งานได้ ครั้งแรกที่ต้องจัดการกับ linux และ coker นั่นคือสาเหตุที่มือใหม่ถามคำถามนี้ ป.ล. ลิงค์ใช้ , ดังนั้น

โพสต์คำตอบ

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