Score:1

Docker Nginx ส่งคืน 404 สำหรับปลายทาง proxy_pass

ธง us

บน พีซีแยกต่างหาก (ซึ่งมี IP ที่เข้าถึงได้ในเครื่องเท่านั้น 192.168.1.148) ฉันมี 3 คอนเทนเนอร์: นักเทียบท่า_compose_ui, นักเทียบท่า_compose_web_console & จิงซ์

คอนเทนเนอร์สองรายการกำลังฟังพอร์ต แต่ยังไม่ได้ส่งต่อ ถึงโฮสต์:

นักเทียบท่า_compose_ui 5000/tcp
นักเทียบท่า_compose_web_console 8888/tcp

Nginx ถูกส่งต่อ:

nginx 0.0.0.0:80->80/tcp, :::80->80/tcp

นักเทียบท่า_compose_ui & นักเทียบท่า_compose_web_console อยู่ในเครือข่าย กระดูกสันหลัง.

จิงซ์ อยู่บนเครือข่าย กระดูกสันหลัง และ ภายนอก.

อะไรก็ได้ กระดูกสันหลัง ไม่ได้หมายถึงการส่งต่อโฮสต์จึงไม่สามารถเข้าถึงได้โดยสาธารณะ

อะไรก็ได้ ภายนอก มีไว้เพื่อส่งต่อโฮสต์ประชาชนจึงเข้าถึงได้

แก้ไข: เพื่อชี้แจง เมื่อฉันพูดว่าสาธารณะ ฉันหมายถึงภายนอกจากเครื่องโฮสต์ ฉันยังไม่ได้ส่งต่อพอร์ตใด ๆ ไปยังอินเทอร์เน็ตผ่านเราเตอร์เลย

ถ้าฉัน ตรวจสอบ เครือข่าย กระดูกสันหลัง ฉันสามารถดูที่อยู่ IP:

nginx 172.21.0.4/16
นักเทียบท่า_compose_ui 172.21.0.2/16
นักเทียบท่า_compose_web_console 172.21.0.3/16

ถ้าฉัน ตรวจสอบ เครือข่าย ภายนอก ฉันสามารถดูที่อยู่ IP สำหรับ มิลค์กี้, 172.22.0.2/16.

ถ้าผมหยิกจาก จิงซ์ ถึง นักเทียบท่า_compose_ui:

 นักเทียบท่า exec nginx curl http://docker_compose_ui:5000

ฉันได้รับการตอบกลับ html และ ตกลง, ดังนั้น นักเทียบท่า_compose_ui สามารถเข้าถึงได้จาก จิงซ์ และแก้ไขได้

ถ้าฉันทำ นักเทียบท่า exec nginx nginx -T ฉันเห็นว่ากำลังโหลดการกำหนดค่าโดย nginx (last เซิร์ฟเวอร์ คำสั่ง).

nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conf ไวยากรณ์ใช้ได้
nginx: การทดสอบไฟล์การกำหนดค่า /etc/nginx/nginx.conf สำเร็จ
# ไฟล์กำหนดค่า /etc/nginx/nginx.conf:
# /etc/nginx/nginx.conf

ผู้ใช้ nginx;

# กำหนดจำนวนกระบวนการของผู้ปฏิบัติงานโดยอัตโนมัติตามจำนวนแกน CPU
worker_processes อัตโนมัติ

# เปิดใช้งานการใช้ JIT สำหรับนิพจน์ทั่วไปเพื่อเพิ่มความเร็วในการประมวลผล
pcre_jit บน;

# กำหนดค่าตัวบันทึกข้อผิดพลาดเริ่มต้น
error_log /var/log/nginx/error.log เตือน;

# รวมไฟล์พร้อมคำสั่งในการโหลดโมดูลไดนามิก
รวม /etc/nginx/modules/*.conf;

# ยกเลิกการแสดงความคิดเห็นเพื่อรวมไฟล์ที่มีตัวอย่างการกำหนดค่าในบริบทรูท
# หมายเหตุ: สิ่งนี้จะเปิดใช้งานตามค่าเริ่มต้นใน Alpine 3.15
#include /etc/nginx/conf.d/*.conf;

เหตุการณ์ {
        # จำนวนการเชื่อมต่อพร้อมกันสูงสุดที่สามารถเปิดได้
        #กระบวนการทำงาน
        worker_connections 1024;
}

http {
    # ตัวแก้ไข DNS ของนักเทียบท่า
    ตัวแก้ไข 127.0.0.11 ipv6=ปิด;
        # รวมการแมปนามสกุลไฟล์กับประเภทการตอบสนอง MIME
        # และกำหนดประเภทเริ่มต้น
        รวม /etc/nginx/mime.types;
        แอปพลิเคชัน default_type/octet-stream;

        # เนมเซิร์ฟเวอร์ใช้เพื่อแก้ไขชื่อของเซิร์ฟเวอร์อัพสตรีมเป็นที่อยู่
        # จำเป็นเช่นกันเมื่อใช้ tcpsocket และ udpsocket ในโมดูล Lua
        #resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;

        # อย่าบอกเวอร์ชัน nginx แก่ลูกค้า ค่าเริ่มต้นคือ 'เปิด'
        ปิด server_tokens;

        # ระบุขนาดเนื้อหาที่ยอมรับได้สูงสุดของคำขอของลูกค้า เช่น
        # ระบุโดยส่วนหัวของคำขอความยาวเนื้อหา หากระบุเนื้อหา
        # ความยาวมากกว่าขนาดนี้ ลูกค้าจะได้รับ HTTP
        # รหัสข้อผิดพลาด 413 ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน ค่าเริ่มต้นคือ '1m'
        client_max_body_size 1m;

        # Sendfile คัดลอกข้อมูลระหว่างหนึ่ง FD และอื่น ๆ จากภายในเคอร์เนล
        # ซึ่งมีประสิทธิภาพมากกว่าการอ่าน () + เขียน () ค่าเริ่มต้นปิดอยู่
        ส่งไฟล์บน;

        # ทำให้ nginx พยายามส่งส่วนหัวตอบกลับ HTTP ในแพ็กเก็ตเดียว
        # แทนการใช้เฟรมบางส่วน ค่าเริ่มต้นคือ 'ปิด'
        tcp_nopush บน;


        # เปิดใช้งานโปรโตคอลที่ระบุ ค่าเริ่มต้นคือ TLSv1 TLSv1.1 TLSv1.2
        # เคล็ดลับ: หากคุณไม่จำเป็นต้องสนับสนุนไคลเอนต์เก่า ให้ลบ TLSv1.1
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

        # เส้นทางของไฟล์ที่มีพารามิเตอร์ Diffie-Hellman สำหรับรหัส EDH
        # เคล็ดลับ: สร้างด้วย: `openssl dhparam -out /etc/ssl/nginx/dh2048.pem 2048`
        #ssl_dhparam /etc/ssl/nginx/dh2048.pem;

        # ระบุว่าควรใช้ชุดรหัสของเรามากกว่ารหัสไคลเอนต์
        # ค่าเริ่มต้นคือ 'ปิด'
        เปิด ssl_prefer_server_ciphers;

        # เปิดใช้งานแคช SSL ที่ใช้ร่วมกันที่มีขนาดที่สามารถเก็บได้ประมาณ 8,000 เซสชัน
        # ค่าเริ่มต้นคือ 'ไม่มี'
        ssl_session_cache ที่ใช้ร่วมกัน: SSL:2m;

        # ระบุช่วงเวลาที่ไคลเอนต์อาจใช้พารามิเตอร์เซสชันซ้ำ
        # ค่าเริ่มต้นคือ '5m'
        ssl_session_timeout 1 ชั่วโมง;

        # ปิดใช้งานตั๋วเซสชัน TLS (ไม่ปลอดภัย) ค่าเริ่มต้นคือ 'เปิด'
        ปิด ssl_session_tickets;


        # เปิดใช้งาน gzipping ของการตอบสนอง
        เปิด gzip;

        # ตั้งค่าส่วนหัว Vary HTTP ตามที่กำหนดใน RFC 2616 ค่าเริ่มต้นคือ 'ปิด'
        gzip_vary บน;


        # ตัวแปรตัวช่วยสำหรับ proxying websockets
        แผนที่ $http_upgrade $connection_upgrade {
                อัพเกรดเริ่มต้น;
                '' ปิด;
        }


        # ระบุรูปแบบบันทึกหลัก
        log_format main '$remote_addr - $remote_user [$time_local] "$request"'
                        '$สถานะ $body_bytes_sent "$http_referer"'
                        '"$http_user_agent" "$http_x_forwarded_for"';

        # กำหนดเส้นทาง รูปแบบ และการกำหนดค่าสำหรับการเขียนบันทึกบัฟเฟอร์
        access_log /var/log/nginx/access.log หลัก;


        # รวมการกำหนดค่าโฮสต์เสมือน
        รวม /etc/nginx/sites-enabled/*;
}

# เคล็ดลับ: เลิกแสดงความคิดเห็นหากคุณใช้โมดูลสตรีม
#include /etc/nginx/stream.conf;

# ไฟล์กำหนดค่า /etc/nginx/mime.types:

ประเภท {
    ข้อความ/html html htm shtml;
    ข้อความ/css css;
    ข้อความ/xml xml;
    รูปภาพ/gif gif;
    รูปภาพ/jpeg jpeg jpg;
    แอปพลิเคชัน/จาวาสคริปต์ js;
    แอ็พพลิเคชัน/atom+xml อะตอม;
    แอปพลิเคชัน/rss+xml rss;

    ข้อความ/mathml mml;
    ข้อความ/ธรรมดา txt;
    text/vnd.sun.j2me.app-descriptor jad;
    ข้อความ/vnd.wap.wml wml;
    ข้อความ/x-คอมโพเนนต์ htc;

    รูปภาพ/png png;
    ภาพ/svg+xml svg svgz;
    รูปภาพ/tiff tif tiff;
    ภาพ/vnd.wap.wbmp wbmp;
    รูปภาพ/เว็บเพจ เว็บเพจ;
    ไอคอนรูปภาพ/x-icon;
    ภาพ/x-jng jng;
    ภาพ/x-ms-bmp bmp;

    ตัวอักษร/woff woff;
    ตัวอักษร/woff2 woff2;

    แอปพลิเคชัน / java-archive jar war ear;
    แอปพลิเคชัน/json json;
    แอปพลิเคชัน/mac-binhex40 hqx;
    เอกสารแอปพลิเคชัน/msword;
    ใบสมัคร/pdf pdf;
    ใบสมัคร/postscript ps eps ai;
    แอปพลิเคชัน/rtf rtf;
    แอปพลิเคชัน/vnd.apple.mpegurl m3u8;
    application/vnd.google-earth.kml+xml kml;
    แอปพลิเคชัน/vnd.google-earth.kmz kmz;
    แอปพลิเคชัน/vnd.ms-excel xls;
    application/vnd.ms-fontobject eot;
    แอปพลิเคชัน/vnd.ms-powerpoint ppt;
    แอปพลิเคชัน/vnd.oasis.opendocument.graphics odg;
    แอปพลิเคชัน/vnd.oasis.opendocument.presentation odp;
    application/vnd.oasis.opendocument.spreadsheet ods;
    แอปพลิเคชัน/vnd.oasis.opendocument.text odt;
    แอปพลิเคชัน/vnd.openxmlformats-officedocument.presentationml.presentation
                                                     pptx;
    แอปพลิเคชัน/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                     xlsx;
    แอปพลิเคชัน/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                     docx;
    แอปพลิเคชัน/vnd.wap.wmlc wmlc;
    แอปพลิเคชัน/x-7z-บีบอัด 7z;
    ใบสมัคร/x-cocoa cco;
    แอปพลิเคชัน/x-java-archive-diff jardiff;
    แอปพลิเคชัน/x-java-jnlp-file jnlp;
    เรียกใช้แอปพลิเคชัน / x-makeself;
    แอปพลิเคชัน/x-perl pl pm;
    แอปพลิเคชัน/x-pilot prc pdb;
    แอปพลิเคชั่น/x-rar-บีบอัด rar;
    แอปพลิเคชั่น / x-redhat-package-manager รอบต่อนาที;
    ใบสมัคร / ทะเล x-sea;
    แอปพลิเคชั่น/x-shockwave-แฟลช swf;
    แอปพลิเคชั่น / นั่ง x-stuffit;
    ใบสมัคร/x-tcl tcl tk;
    ใบสมัคร/x-x509-ca-cert จาก pem crt;
    แอปพลิเคชัน/x-xpinstall xpi;
    แอปพลิเคชัน/xhtml+xml xhtml;
    แอปพลิเคชัน/xspf+xml xspf;
    แอปพลิเคชั่น / ซิปซิป;

    แอปพลิเคชัน / octet-stream bin exe dll;
    แอ็พพลิเคชัน/octet-stream deb;
    แอปพลิเคชัน/octet-stream dmg;
    แอปพลิเคชั่น/octet-stream iso img;
    แอปพลิเคชัน/ออคเต็ตสตรีม msi msp msm;

    เสียง/midi กลาง midi kar;
    เสียง/mpeg mp3;
    เสียง/ogg ogg;
    เสียง/x-m4a m4a;
    เสียง/x-realaudio ra;

    วิดีโอ/3gpp 3gpp 3gp;
    วิดีโอ/mp2t ts;
    วิดีโอ/mp4 mp4;
    วิดีโอ/mpeg mpeg mpg;
    วิดีโอ/quicktime mov;
    วิดีโอ/เว็บเอ็ม เว็บเอ็ม;
    วิดีโอ/x-flv flv;
    วิดีโอ/x-m4v m4v;
    วิดีโอ/x-mng mng;
    วิดีโอ/x-ms-asf asx asf;
    วิดีโอ/x-ms-wmv wmv;
    วิดีโอ/x-msvideo avi;
}

# ไฟล์การกำหนดค่า /etc/nginx/sites-enabled/_default.conf:
# นี่คือการกำหนดค่าเริ่มต้นของไซต์ซึ่งจะส่งคืน 404 เพื่อป้องกัน
# โอกาสเข้าถึง virtualhost อื่น ๆ

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

        # ทุกอย่างคือ 404
        ที่ตั้ง / {
                กลับ 404;
        }

        # คุณอาจต้องใช้สิ่งนี้เพื่อป้องกันการเรียกซ้ำ 404
        สถานที่ = /404.html {
                ภายใน;
        }
}

# ไฟล์กำหนดค่า /etc/nginx/sites-enabled/docker_compose_ui.conf:
เซิร์ฟเวอร์ {
    ฟัง 80;
    #server_name localhost;
    ชื่อเซิร์ฟเวอร์  _;

    access_log /var/log/nginx/docker_compose_ui.access.log หลัก;

    ตำแหน่ง /นักเทียบท่า-compose-ui/ {
        proxy_pass http://docker_compose_ui:5000;
    }

    ตำแหน่ง /เว็บคอนโซล/ {
        proxy_pass http://docker_compose_web_console:8888;
    }

    ตำแหน่ง /web-console/exec {
        proxy_pass http://docker_compose_web_console:8888;
        proxy_http_version 1.1;
        proxy_set_header อัพเกรด $http_upgrade;
        proxy_set_header การเชื่อมต่อ "อัพเกรด";
    }
}

การกำหนดค่านักเทียบท่าเขียน (สองไฟล์แยกกัน):

--- # นักเทียบท่า-compose-ui.yml

รุ่น: "3.9"

บริการ:
  นักเทียบท่า_compose_ui:
    ภาพ: francescou/docker-compose-ui
    ชื่อคอนเทนเนอร์: docker_compose_ui
    ชื่อโฮสต์: docker_compose_ui
    รีสตาร์ท: เว้นแต่จะหยุด
    working_dir: /opt/docker-compose-projects
    สิ่งแวดล้อม:
      - 'WEB_CONSOLE_PATTERN=/web-console/?cid={containerName}&cmd={command}'
    ปริมาณ:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/docker-compose-pojects:/data/docker/docker-compose-ui
    เครือข่าย:
      - กระดูกสันหลัง
  เว็บ_คอนโซล:
    รูปภาพ: bitbull/docker-exec-web-console
    ชื่อคอนเทนเนอร์: นักเทียบท่า_compose_web_console
    ชื่อโฮสต์: docker_compose_web_console
    รีสตาร์ท: เว้นแต่จะหยุด
    สิ่งแวดล้อม:
      - 'CONTEXT_PATH=/เว็บคอนโซล/'
    อ่านอย่างเดียว: จริง
    ปริมาณ:
      - /var/run/docker.sock:/var/run/docker.sock
    เครือข่าย:
      - กระดูกสันหลัง

เครือข่าย:
  กระดูกสันหลัง:
    ภายนอก: จริง

--- # nginx.yml

รุ่น: "3.9"

บริการ:
  จิงซ์:
    รูปภาพ: nginx:mainline-alpine
    ชื่อคอนเทนเนอร์: nginx
    รีสตาร์ท: เว้นแต่จะหยุด
    ปริมาณ:
      - /data/docker/nginx:/etc/nginx
      - /var/log/nginx:/var/log/nginx
      - /var/run:/var/run
      - /var/cache/nginx
    พอร์ต:
      - "80:80"
    เครือข่าย:
      - กระดูกสันหลัง
      - ภายนอก

เครือข่าย:
  กระดูกสันหลัง:
    ภายนอก: จริง
  ภายนอก:
    ภายนอก: จริง

ทำ http://192.168.1.148/ จากแล็ปท็อปของฉันส่งคืนข้อความมาตรฐาน "ติดตั้ง Nginx แล้ว"

ทำไมถึงเป็นเช่นนั้น http://192.168.1.148/docker-compose-ui/ จากแล็ปท็อปของฉัน ส่งคืนเฉพาะข้อผิดพลาด HTTP 404 หน้าหนังสือ?

โพสต์คำตอบ

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