Score:0

ปัญหา Nginx, Cloudflare, โดเมนย่อย

ธง bd

NGINX Newbie ที่นี่ ฉันกำลังพยายามกำหนดค่าสิ่งที่ฉันพบว่าเป็นงานที่ท้าทายเล็กน้อย ฉันต้องการโครงสร้างต่อไปนี้:

  • www.example.com -- เว็บไซต์สำหรับบริษัท สำหรับตอนนี้ทั้งคู่ www.example.com และ example.com ต้องเปลี่ยนเส้นทางไปที่ project.example.com

  • project.example.com เว็บไซต์สำหรับโครงการ

  • project.example.com/app1 -- แอป 1 สำหรับโครงการ

  • project.example.com/app2 -- แอป 2 สำหรับโครงการ

  • api.example.com -- API สำหรับโครงการที่ฟังพอร์ต 3001 ฉันต้องการเส้นทางเช่น: www.api.example.com หรือ api.example.com เพื่อเปลี่ยนเส้นทางโดยอัตโนมัติ https://api.example.com.

หมายเหตุ: ฉันกำลังพยายามเปลี่ยนเส้นทางบล็อกทั้งหมดไปที่ https

ฉันได้ลองสิ่งต่อไปนี้แล้วและมีตัวแปรมากมายที่นี่:

เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง [::]:80;
    server_name example.com www.example.com;
    ส่งคืน 302 https://project.$server_name$request_uri;
}

# API เปลี่ยนเส้นทางไปยัง SSL
เซิร์ฟเวอร์ {
    ฟัง 80;
    ฟัง [::]:80;
    server_name api.example.com www.api.example.com;
    ส่งคืน 302 https://api.example.com$request_uri;
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl http2;
    ฟัง [::]:443 ssl http2;
    server_name www.api.example.com;
    ส่งคืน 302 https://api.example.com$request_uri;

    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    ssl_client_certificate /etc/ssl/cloudflare.crt;
    เปิด ssl_verify_client;
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl http2;
    ฟัง [::]:443 ssl http2;
    server_name example.com www.example.com;
    รูท /var/www/html/example-website;
    ดัชนี index.html index.htm index.nginx-debian.html;
    ส่งคืน 302 https://project.$server_name$request_uri;

    # การกำหนดค่า SSL
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    ssl_client_certificate /etc/ssl/cloudflare.crt;
    เปิด ssl_verify_client;

    ที่ตั้ง / {
      try_files $uri $uri/ =404;
    }
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl http2;
    ฟัง [::]:443 ssl http2;
    server_name project.example.com www.project.example.com;
    รูท /var/www/html/project-website;
    ดัชนี index.html index.htm index.nginx-debian.html;

    # การกำหนดค่า SSL
    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;
    ssl_client_certificate /etc/ssl/cloudflare.crt;
    เปิด ssl_verify_client;

    ที่ตั้ง / {
      try_files $uri $uri/ =404;
    }

    ตำแหน่ง /app1 {
       นามแฝง /var/www/html/project-app1;
       try_files $uri /project-app1/index.html;
    }

    ตำแหน่ง /app2 {
       นามแฝง /var/www/html/project-app2;
       try_files $uri /project-app2/index.html;
    }
}

เซิร์ฟเวอร์ {
  ฟัง 443 ssl http2;
  ฟัง [::]:443 ssl http2;
  server_name api.example.com www.api.example.com;
  ตัวแก้ไข 127.0.0.1;

  ssl_certificate /etc/ssl/cert.pem;
  ssl_certificate_key /etc/ssl/key.pem;
  ssl_client_certificate /etc/ssl/cloudflare.crt;
  เปิด ssl_verify_client;

    ที่ตั้ง / {
    เขียนใหม่ ^/api/?(.*) /$1 ตัวแบ่ง;
    proxy_pass https://127.0.0.1:3001; #เซิร์ฟเวอร์ API
    ปิด proxy_redirect;
    proxy_set_header โฮสต์ $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }  
}

ฉันค่อนข้างใหม่กับ NGINX ดังนั้นฉันจึงไม่แน่ใจว่าสิ่งที่ฉันทำไปนั้นโอเคหรือใกล้เคียงกับสิ่งที่คนส่วนใหญ่ถือว่าเป็นแนวทางปฏิบัติที่ดีจากระยะไกล

สิ่งที่ฉันประสบความสำเร็จ:

  • www.example.com และ example.com เปลี่ยนเส้นทางไปยังเว็บไซต์ project.example.com ตามค่าเริ่มต้น
  • และ... ฉันเคยมี app1 และ app2 ที่เกี่ยวข้องกัน แต่ฉันไม่รู้ว่าฉันทำอะไรผิดพลาดไปจนใช้งานไม่ได้อีกต่อไป :(

อย่างไรก็ตาม สิ่งที่ต้องพูดถึงเพิ่มเติม:

  • สภาพแวดล้อม: อินสแตนซ์ AWS EC2
  • ใบรับรองและ DNS: Cloudflare

รูปภาพของ DNS ที่ประกาศและพร็อกซีผ่าน Cloudflare

  • แอพ: นี่คือแอพเชิงมุมและฉันมีปัญหาเกี่ยวกับเส้นทางลูกเช่น:
    • project.example.com/app1 -- สามารถเข้าถึงได้ (ในบางจุด ไม่อีกต่อไป)
    • project.example.com/app1/home -- จะค้นหา 404 ไม่พบ เท่าที่ฉันรู้ฉันสามารถแก้ไขปัญหาดังกล่าวบนเซิร์ฟเวอร์ Apache ได้เมื่อไม่นานมานี้ ดังนั้นฉันเดาว่าฉันสามารถแก้ไขปัญหาที่คล้ายกันกับกรณีนี้สำหรับ NGINX ได้
  • api.example.com -- อันนี้ไม่ถูกเปลี่ยนเส้นทางด้วยซ้ำ www.api.example.comและฉันไม่สามารถเชื่อมต่อกับ API ผ่านจุดสิ้นสุดได้โดยตรง โยน 502 ในกรณีที่ดีที่สุด ขออภัยสำหรับการโพสต์ที่ยาวเช่นนี้ แต่ต้องการให้ชัดเจนที่สุดเท่าที่จะเป็นไปได้ และขอบคุณมากสำหรับความช่วยเหลือเพิ่มเติมที่คุณสามารถให้ฉันเพื่อให้บรรลุประเด็นเหล่านี้ ขอขอบคุณจริงๆ

โพสต์คำตอบ

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