Score:0

ใช้ Reverse Proxy Nginx ในคอนเทนเนอร์นักเทียบท่า

ธง cn

ดังนั้นพยายามตั้งค่า Nginx เป็นพร็อกซีย้อนกลับโดยใช้นักเทียบท่า - ฉันมีคอนเทนเนอร์โหนด js สามรายการ (หนึ่งส่วนหน้าและบริการส่วนหลังสองส่วน) บริการส่วนหน้าเรียกใช้บริการส่วนหลังสองส่วน ดังนั้นฉันต้องการให้ nginx เปลี่ยนเส้นทางไปยังส่วนหน้า (ซึ่งเป็นเว็บแอปพลิเคชัน) แต่ทุกครั้งที่ฉันพยายามส่งบางอย่าง ฉันได้รับข้อผิดพลาด 502 เกตเวย์ที่ไม่ถูกต้อง เมื่อฉันเรียกใช้โดยตรงไปยังคอนเทนเนอร์นักเทียบท่า ฉันสามารถ ping คอนเทนเนอร์อื่นผ่าน dns_hostname หรือที่อยู่ IP (ซึ่งฉันคว้าจากการตรวจสอบนักเทียบท่า) นี่คือเวอร์ชันที่แก้ไขของทั้งนักเทียบท่าและนักแต่งเพลงและ nginx.conf ของฉัน

    รุ่น: "3.8"
บริการ:
  ส่วนหน้า:
    รูป: ส่วนหน้า
    ชื่อโฮสต์: ส่วนหน้า
    env_file:
      /.env
    เครือข่าย:
      - เครือข่าย
    รีสตาร์ท: เมื่อล้มเหลว
    เปิดเผย:
      - "3000"
    container_name: ส่วนหน้า
    แบ็กเอนด์บริการ-01:
      รูปภาพ: แบ็กเอนด์-บริการ-01
        ชื่อโฮสต์: แบ็กเอนด์-บริการ-01
        env_file:
            ./backend-service-01/.env
        เครือข่าย:
            - เครือข่าย
        รีสตาร์ท: เมื่อล้มเหลว
        container_name: แบ็กเอนด์-บริการ-01
   แบ็กเอนด์บริการ-02:
        รูปภาพ: แบ็กเอนด์-บริการ-02
        ชื่อโฮสต์: แบ็กเอนด์-บริการ-02
        env_file:
            ./backend-service-02/.env
        เครือข่าย:
            - เครือข่าย
        รีสตาร์ท: เมื่อล้มเหลว
        container_name: แบ็กเอนด์-บริการ-02
        
   พร็อกซี nginx:
     รูปภาพ: nginx:stable-alpine
     ชื่อโฮสต์: nginx-proxy
     เครือข่าย:
       - เครือข่าย
     รีสตาร์ท: เมื่อล้มเหลว
        ปริมาณ:
          - /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
          - /data/nginx/certs/crt_file.crt:/etc/nginx/crt_file.crt
          - /data/nginx/certs/priv_key.key:/etc/nginx/priv_key.key:ro
        พอร์ต:
            - 80:80
            - 443:443
        container_name: nginx-พร็อกซี
        ขึ้นอยู่กับ: 
          - ส่วนหน้า
          - แบ็กเอนด์บริการ-01
          - แบ็กเอนด์-บริการ-02
เครือข่าย:
    เครือข่าย:

และนี่คือไฟล์ nginx conf ที่ฉันใช้:

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

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

http {

  ส่วนหน้าต้นน้ำ {
    ส่วนหน้าของเซิร์ฟเวอร์: 3000;
  }
    
  เซิร์ฟเวอร์ {
        
        # ฟัง Directive บนพอร์ต 443 (TLS)
        ฟัง 443 ssl; 
        ฟัง [::]:443 ssl;

        ssl_certificate /etc/nginx/crt_file.crt;
        ssl_certificate_key /etc/nginx/priv_key.key;

        # ที่เราจัดเก็บ error.log และ access.log ของเรา
        error_log /var/log/nginx/error.log;
        access_log /var/log/nginx/access.log;

        ที่ตั้ง / {
            รูท /usr/src/app/public/;
            proxy_pass https://ส่วนหน้า;
        }
  }
}

ฉันเกือบทำทุกอย่างเพื่อตัดปัญหาเครือข่าย เนื่องจากฉันสามารถ ping ทั้งที่อยู่ ip และชื่อโฮสต์ของนักเทียบท่าส่วนหน้าจากด้านในของคอนเทนเนอร์ nginx (โดยใช้ docker exec -it nginx-proxy sh) ใครมีข้อเสนอแนะเกี่ยวกับ จะลองทำอะไรต่อไปหรือพวกเขาจะเห็นได้ชัดเจนว่าฉันทำอะไรผิด มันจะเป็นความชื่นชมมาก

djdomi avatar
za flag
1) `proxy_pass` อย่างใดอย่างหนึ่ง 2) หรือ `root /path` 3) ฉันขอแนะนำให้ใช้ IP ฉันยังขาด `server_name` และ `proxy_set_header Host $http_host;`
Score:0
ธง cn

แก้ไขปัญหาแล้ว - ปัญหานี้ไม่ใช่ทั้ง Docker และ Nginx ปัญหาคืออดีตนักพัฒนาที่พยายามช่วยเหลือซึ่งจบลงด้วยการเตะตูดของเราในระยะยาว พวกเขาสร้างการเปลี่ยนเส้นทางในรหัสของพวกเขาที่หากมีคนพยายามใช้โปรโตคอล HTTP มันจะเปลี่ยนเส้นทางไปยังโปรโตคอล HTTPS โดยอัตโนมัติ เมื่อเราแสดงความคิดเห็นโค้ดสองสามบรรทัดที่น่ารำคาญนี้และสร้างคอนเทนเนอร์ใหม่ แปลกใจ แปลกใจ... Nginx ทำเหมือนเดิม บอก. บทเรียนที่ได้รับ: รับ Nginx เพื่อทำการเปลี่ยนเส้นทางของคุณ ไม่ใช่รหัสของคุณ

โพสต์คำตอบ

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