Score:0

server_name เดียวกันกับแอปพลิเคชันต่าง ๆ ที่เสียบเป็นบล็อกตำแหน่งแยกต่างหากใน nginx

ธง bq
s.k

เป็นไปได้หรือไม่ที่จะ "เสียบ" บริการเว็บต่างๆ (เปิดเผยจากคอนเทนเนอร์นักเทียบท่าที่แตกต่างกัน) ในเซิร์ฟเวอร์ nginx เดียวกัน

ต่อไปนี้คือตัวอย่างง่ายๆ เพื่อให้เข้าใจแนวคิดทั่วไป:

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

    client_max_body_size 10M;
    ชุดอักขระ utf-8;

    server_name my.server.org;

    access_log /var/log/nginx/reverse-access.log;
    error_log /var/log/nginx/reverse-error.log;

    ที่ตั้ง / {
        รวม proxy_params;
        proxy_pass http://127.0.0.1:8081/;
    }
    ตำแหน่ง / คงที่ / {
        รวม proxy_params;
        รวม /etc/nginx/mime.types;
        นามแฝง /var/www/app/static/;
    }
    ที่ตั้ง ^~ /app2/ {
        รวม proxy_params;
        proxy_pass http://127.0.0.1:8082;
    }
    ที่ตั้ง ^~ /app3/ {
        รวม proxy_params;
        ปิด proxy_redirect;
        proxy_set_header โฮสต์ $http_host;
        proxy_pass http://127.0.0.1:8083;
    }
}

ที่ไหน ที่ตั้ง / เป็นรูทของแอปพลิเคชันแรกพร้อมกับไฟล์สแตติกในบล็อกตำแหน่งถัดไป
แอปพลิเคชั่นแรกนี้ทำงานที่ http://my.server.org/.

ฉันต้องการเข้าถึงแอปพลิเคชันอีกสองรายการที่ http://my.server.org/app2/ และ http://my.server.org/app3/ โดยยังคงชื่อเซิร์ฟเวอร์เดิมไว้ my.server.org.
แอปพลิเคชันเหล่านี้เกี่ยวข้องกับแอปพลิเคชันหลัก แต่เป็นอิสระจากกันโดยสิ้นเชิง กล่าวคือ แอปพลิเคชันเหล่านี้ให้บริการจากองค์ประกอบนักเทียบท่าอื่นๆ โดยพอร์ตของแอปพลิเคชันเหล่านี้จะถูกเปิดเผยตามลำดับที่ 8082 และ 8083

เป็นไปได้ไหมที่จะบรรลุภารกิจง่ายๆ เซิร์ฟเวอร์ บล็อก?

ในขณะนี้ฉันได้รับ 404 เมื่อไปถึง URL อีกสองรายการนั้น

โดยพื้นฐานแล้วฉันต้องการแมปพอร์ต URL ที่ใช้งานได้และองค์ประกอบย่อยทั้งหมดไปยังตำแหน่งที่มีชื่อ:

http://my.server.org:8081/... -> http://my.server.org/...
http://my.server.org:8082/... -> http://my.server.org/app2/...
http://my.server.org:8083/... -> http://my.server.org/app3/...

แก้ไข:
ไม่ว่าจะเป็น:

    ตำแหน่ง /app3/ {
        ถ้า ($http_referer ~ "^$scheme://$http_host/app3/") {
            เขียนใหม่ ^/app3/(.*) $scheme://$http_host/app3/$1 redirect;
        }
        รวม proxy_params;
        ปิด proxy_redirect;
        proxy_set_header โฮสต์ $http_host;
        proxy_pass http://127.0.0.1:8083;
    }

หรือสิ่งนี้:

    ตำแหน่ง ~*/app3/(.*)$ {
        รวม proxy_params;
        ปิด proxy_redirect;
        proxy_set_header โฮสต์ $http_host;
        proxy_pass http://127.0.0.1:8083/$1;
    }

"ใช้งานได้" เหมือนเดิม แต่ยังไม่สมบูรณ์เพราะยังเหลืออีกสองประเด็นคือ

  1. ให้บริการเฉพาะ HTML ดิบเท่านั้น (เช่น ไม่มีสไตล์: "502 เกตเวย์ที่ไม่ดี" ในไฟล์ css เป็นต้น)
  2. ลิงก์ภายในหน้าชี้ไปที่ เช่น http://my.server.org/subfeature/subitem แทน http://my.server.org/app3/subfeature/subitem. ดังนั้นพวกเขาจึง "ขาด" /app3 คำนำหน้าและฉันไม่รู้ว่าจะเพิ่มได้อย่างไรหากไม่อยู่ในตำแหน่งที่ควรจะเป็น
Score:0
ธง za

นี่เป็นงานทั่วไป แต่คุณลืมสองสิ่ง:

  • กูเกิลคำถามของคุณ
  • การเพิ่ม เขียนใหม่ ข้อในแต่ละ ที่ตั้ง {} บล็อก
s.k avatar
bq flag
s.k
ปัญหาคือไฟล์สแตติกจะให้บริการโดยอัตโนมัติที่ระดับรูท โดยไม่มี `/app3` นำหน้า ดังนั้น เนื่องจากไฟล์เหล่านี้ไม่ได้ "รับรู้" ตำแหน่งนั้นจากภายในคอนเทนเนอร์นักเทียบท่าที่พวกเขาเริ่มต้น พวกเขาจึงไม่เคยป้อน ` /app3` บล็อกตำแหน่งและเส้นทางการค้นหาจะเป็นค่าเริ่มต้นของ nginx ฉันไม่รู้ว่างานนั้นเป็นเรื่องปกติหรือไม่ แต่ดูเหมือนจะไม่สามารถแก้ไขได้ภายใน nginx :/

โพสต์คำตอบ

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