Score:0

คลังสินค้าเกตเวย์ Nginx api พร้อมรองรับโดเมนย่อย

ธง ke

ฉันกำลังทำตามบทช่วยสอนเพื่อตั้งค่าพร็อกซี API ฉันใช้งานแอปเซิร์ฟเวอร์การผลิตและการพัฒนาบน VPS เดียวกัน

https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/

ฉันจัดการโดเมนด้วย SSL ผ่าน certbot ทั้งสองโดเมน live.domain.com และ dev.domain.com

ฉันติดอยู่ที่ "การกำหนด Warehouse API" ปัญหาคือการกำหนดเส้นทางที่อธิบายนั้นอิงตามตำแหน่งเส้นทาง URL แต่ไม่ได้อธิบายวิธีจัดการโดเมนย่อยที่ตั้งค่าไว้ด้านบน

ฉันมีการตั้งค่า: api_gateway

รวมถึง api_backends.conf;
รวมถึง api_keys.conf;

เซิร์ฟเวอร์ {
    access_log /var/log/nginx/api_live.log หลัก; # แต่ละ API อาจเข้าสู่ระบบ 
                                                   #แยกไฟล์

    ฟัง 443 ssl;
    server_name live.domain.com;

    #การกำหนดค่า TLS
    ssl_certificate /etc/letsencrypt/live/live.domain.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/live.domain.com/privkey.pem; # จัดการโดย Certbot
    รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
    ssl_session_cache ที่ใช้ร่วมกัน: SSL:10m;
    ssl_session_timeout 5 นาที;
    ssl_ciphers สูง:!aNULL:!MD5;
    ssl_protocols TLSv1.2 TLSv1.3;

    # คำจำกัดความของ API หนึ่งรายการต่อไฟล์
    รวม api_conf.d/*.conf;

    #ตอบผิด
    error_page 404 = @400; # ถือว่าเส้นทางที่ไม่ถูกต้องเป็นคำขอที่ไม่ถูกต้อง
    เปิด proxy_intercept_errors; # อย่าส่งข้อผิดพลาดส่วนหลังไปยังลูกค้า
    รวมถึง api_json_errors.conf; # ข้อผิดพลาด JSON ที่เป็นมิตรกับไคลเอ็นต์ API
    แอปพลิเคชัน default_type/json; # หากไม่มีประเภทเนื้อหา ให้ถือว่า JSON
}
# *ซ้ำสำหรับ dev.domain.com*

api_backends

ต้นน้ำสด {
โซน live_service 64k;
เซิฟเวอร์ 127.0.0.1:4000
}
ผู้พัฒนาต้นน้ำ {
โซน dev_service 64k;
เซิฟเวอร์ 127.0.0.1:2000
}

ฉันจะจัดการด้วยวิธีใดต่อไปนี้:

ที่ตั้ง / {
    # การกำหนดค่านโยบายที่นี่ (การรับรองความถูกต้อง การจำกัดอัตรา การบันทึก...)
    #
    access_log /var/log/nginx/warehouse_api.log หลัก;

    # การกำหนดเส้นทาง URI
    #
# ถ้าโดเมนย่อยอยู่
    ที่ตั้ง / {
        proxy_pass http://สด;
    }
# อื่นถ้าโดเมนย่อย dev
    ที่ตั้ง / {
        proxy_pass http://dev;
    }

    กลับ 404; #จับทั้งหมด
}

บางทีฉันสามารถใช้ตัวอย่างนี้ที่ฉันพบได้

    ถ้า ($host = live.domain.com) {
        ส่งคืน 301 https://$host$request_uri;
    } # จัดการโดย Certbot

เป็นไปได้ไหม

    ถ้า ($host = live.domain.com){
        ที่ตั้ง /api {
                proxy_pass http://live/api;
        }
# และ/หรือ
        ตำแหน่ง /docs/ {
                proxy_pass https://live$request_uri
        }
    }
Score:1
ธง za

ทุกอย่างเกือบจะดีในการกำหนดค่าของคุณ ยกเว้นว่าคุณหลอกตัวเองด้วยการรวมและ ที่ตั้ง / {} บล็อกและไม่รวมส่วนการกำหนดค่า vhost ที่สอง

คุณเพียงแค่ต้องใส่ live.domain.com และ dev.domain.com ที่ตั้ง / {} บล็อกที่เกี่ยวข้อง เซิร์ฟเวอร์ {} บล็อกและนั่นคือทั้งหมด (อันที่มี proxy_pass http://สด; ในการถ่ายทอดสด เป็นต้น)

อย่าใช้ ถ้า () {} บล็อกในขณะนี้ คุณไม่จำเป็นต้องใช้

และใช่ คุณกำลังขาดสิ่งที่ไม่ใช่ TLS เซิร์ฟเวอร์ {} บล็อก แต่นั่นเป็นคำถามอื่นที่ฉันเดา

ke flag
คุณกำลังบอกว่าฉันเพิ่ม proxy_pass ไปยังบล็อกเซิร์ฟเวอร์ใน "api_gateway" และลบ "warehouse_api.conf" ใช่ไหม
ke flag
คิดออกด้วยการลองผิดลองถูก! น่าเศร้าที่ไม่มีเส้นทาง "ทั้งหมด" ดังนั้นฉันจึงกำหนดเส้นทางเส้นทาง api และเส้นทางเอกสารตามตำแหน่งของฉันในบล็อกเซิร์ฟเวอร์ ฉันต้องการเรียนรู้ Nginx ต่อไปเพื่อที่ฉันจะได้ทำสิ่งนี้ได้ดีขึ้นในอนาคต ขอบคุณสำหรับคำแนะนำ

โพสต์คำตอบ

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