เป้าหมายของฉันคือมี 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 สิ่งนี้บ่งชี้ว่ากำลังฟังอย่างถูกต้อง ยอมรับคำขอ แต่ไม่ได้เปลี่ยนเส้นทางไปยังคอนเทนเนอร์ของเว็บไซต์