Score:0

การเชื่อมต่อ Nginx ถูกปฏิเสธ

ธง ng

ฉันใช้คอนเทนเนอร์นักเทียบท่าเพื่อโฮสต์เว็บแอป ฉันมีสามคอนเทนเนอร์หลัก: MySQL, flask และ Nginx สองอันแรกทำงานตามที่คาดไว้และอันหลังดูเหมือนจะทำงานได้ดีเนื่องจากไม่มีข้อผิดพลาดปรากฏขึ้นในการเริ่มต้นใช้งาน docker-compose

เอาต์พุตการเริ่มต้นคอนเทนเนอร์ Nginx:

nginx | /docker-entrypoint.sh: /docker-entrypoint.d/ ไม่ว่างเปล่า จะพยายามดำเนินการกำหนดค่า
nginx | /docker-entrypoint.sh: ค้นหาเชลล์สคริปต์ใน /docker-entrypoint.d/
nginx | /docker-entrypoint.sh: เปิดตัว /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf ไม่ใช่ไฟล์หรือไม่มีอยู่
nginx | /docker-entrypoint.sh: เปิดตัว /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx | /docker-entrypoint.sh: เปิดตัว /docker-entrypoint.d/30-tune-worker-processes.sh
nginx | /docker-entrypoint.sh: การกำหนดค่าเสร็จสมบูรณ์; พร้อมสำหรับการเริ่มต้น
nginx | 2022/04/07 13:09:13 [ประกาศ] 1#1: ใช้วิธีเหตุการณ์ "epoll"
nginx | 2022/04/07 13:09:13 [ประกาศ] 1#1: nginx/1.21.6
nginx | 2022/04/07 13:09:13 [ประกาศ] 1#1: สร้างโดย gcc 10.2.1 20210110 (Debian 10.2.1-6) 
nginx | 2022/04/07 13:09:13 [ประกาศ] 1#1: OS: Linux 4.19.130-boot2docker
nginx | 2022/04/07 13:09:13 [ประกาศ] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
nginx | 2022/04/07 13:09:13 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน
nginx | 2022/04/07 13:09:13 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 21

ไฟล์นักเทียบท่า Nginx

# Dockerfile-nginx
จาก nginx: ล่าสุด
# Nginx จะฟังพอร์ตนี้
# เปิดเผย 80
# ลบไฟล์กำหนดค่าเริ่มต้นที่
# /etc/nginx/nginx.conf รวมถึง
RUN rm /etc/nginx/conf.d/default.conf
# เราคัดลอกไฟล์ข้อกำหนดเพื่อติดตั้ง
# การพึ่งพา Python
สำเนา nginx.conf /etc/nginx/conf.d/

คอนเทนเนอร์หลังจากปรับใช้และพอร์ตที่เกี่ยวข้อง:

รหัสคอนเทนเนอร์ IMAGE คำสั่งสร้างสถานะชื่อพอร์ต
bffffcfe2f70 sc_server_nginx "/docker-entrypoint.â¦" 14 วินาทีที่แล้ว อัพ 13 วินาที 0.0.0.0:80->80/tcp nginx
a73d958c1407 sc_server_flask "uwsgi app.ini" 9 ชั่วโมงที่แล้ว สูงสุด 9 ชั่วโมง 8080/tcp flask
d273db5f80ef mysql:5.7 "docker-entrypoint.sâ¦" 21 ชั่วโมงที่แล้ว ขึ้น 9 ชั่วโมง (ปกติ) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

ฉันยังใหม่กับเซิร์ฟเวอร์ Nginx ดังนั้นฉันเดาว่ามันอาจเป็นข้อผิดพลาดของมือใหม่ ฉันกำลังพยายามเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดจากพอร์ต 80 ของเครื่องโฮสต์ไปยัง 80 ของนักเทียบท่า ซึ่งเปลี่ยนเส้นทางการรับส่งข้อมูลไปยังคอนเทนเนอร์ WSGI ผ่านซ็อกเก็ต

ฉันใช้การกำหนดค่า Nginx ต่อไปนี้ (ไม่มีอะไรใกล้เคียงกับแฟนซี):

เซิร์ฟเวอร์ {
  ฟัง 80;
  ที่ตั้ง / {
    รวม uwsgi_params;
    uwsgi_pass กระติกน้ำ:8080;
  }
}

อย่างที่คุณเห็นเซิร์ฟเวอร์รับฟังที่พอร์ต 80 และเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดผ่านซ็อกเก็ต uwsgi_pass กระติกน้ำ:8080; ไปยังคอนเทนเนอร์ WSGI ที่โฮสต์แอป

อย่างไรก็ตาม เมื่อใดก็ตามที่ฉันพิมพ์ 127.0.0.1:80 หรือ 0.0.0.0:80 ในเบราว์เซอร์ การเชื่อมต่อจะถูกปฏิเสธ ฉันไม่ได้ติดตั้งไฟร์วอลล์ ดังนั้นฉันเดาว่าไม่มีปัญหากับพอร์ต 80 ที่หยุดทำงาน

นี่คือไฟล์การกำหนดค่า app.ini ของฉัน ซึ่งมีการระบุพารามิเตอร์เริ่มต้นและการปรับใช้:

[uwsgi]
ไฟล์ wsgi = wsgi.py
; นี่คือชื่อของตัวแปร
; ในสคริปต์ของเราที่จะถูกเรียก
โทรได้ = แอพ
; เราใช้พอร์ต 8080 ซึ่งเราจะ
; จากนั้นเปิดเผยบน Dockerfile ของเรา
ซ็อกเก็ต = :8080
; ตั้งค่า uWSGI เพื่อเริ่มต้น 4 คนงาน
กระบวนการ = 4
เธรด = 2
มาสเตอร์ = จริง
chmod-socket = 660
สุญญากาศ = จริง
ตายตามกำหนด = จริง

นอกจากนี้ ฉันยังรวม docker-compose.yml (ฉันเดาว่ามันอาจมีประโยชน์):

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

บริการ:
  กระติกน้ำ:
    สร้าง: ./ขวด
    container_name: กระติกน้ำ
    รีสตาร์ท: เสมอ
    สิ่งแวดล้อม:
      - APP_NAME=MyFlaskApp
      - YOURAPPLICATION_SETTINGS=docker_config.py
    เปิดเผย:
      - 8080
    ขึ้นอยู่กับ:
      มายเอสคิวแอล:
          เงื่อนไข: service_healthy
  มายเอสคิวแอล:
    รูป: mysql:5.7
    ชื่อคอนเทนเนอร์: mysql
    พอร์ต:
      - "3306:3306"
    สิ่งแวดล้อม:
      MYSQL_ROOT_PASSWORD:
      MYSQL_DATABASE:
      MYSQL_USER:
      MYSQL_PASSWORD:
    ปริมาณ:
      - ./db/init.sql:/data/application/init.sql
    ตรวจสุขภาพ:
      ทดสอบ: mysql -u -p --database -e "แสดงตาราง"
      ช่วงเวลา: 3 วินาที
      ลองใหม่: 5
      start_period: 30 วินาที
  จิงซ์:
    สร้าง: ./nginx
    ชื่อคอนเทนเนอร์: nginx
    รีสตาร์ท: เสมอ
    ขึ้นอยู่กับ:
      - มายเอสคิวแอล
      - กระติกน้ำ
    พอร์ต:
      - "80:80"

ใครก็ได้ช่วยที

อัปเดต

ฉันใช้ Wireshark เพื่อสแกนอินเทอร์เฟซย้อนกลับเพื่อดูการตอบสนองของเซิร์ฟเวอร์ที่ 0.0.0.0:80 (ฉันสงสัยว่าอาจมีปัญหากับพอร์ต 80) และฉันได้รับเพย์โหลดต่อไปนี้:

ไวร์ชาร์ค

drookie avatar
za flag
ตรวจสอบบันทึกคอนเทนเนอร์ nginx คำตอบอยู่ที่นั่น

โพสต์คำตอบ

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