Score:0

ส่วนหัวการให้สิทธิ์หายไปเมื่อ NGINX Proxy ส่งผ่านไปยังโดเมนย่อย

ธง ng

สวัสดี ฉันใช้ Laravel บนเซิร์ฟเวอร์ NGINX และฉันต้องการใช้ความสามารถของพร็อกซีย้อนกลับของ NGINX เป็นเกตเวย์ API สำหรับ Laravel และแอปพลิเคชัน API โหนดอื่นๆ ของฉัน นี่คือการกำหนดค่าของฉัน:

URL ของแอปพลิเคชัน: การแสดงละคร app.example.com
จุดสิ้นสุดของแอปพลิเคชัน API: staging-app.example.com/api
URL เกตเวย์ API: api.example.com

สิ่งที่ฉันต้องการทำคือเปลี่ยนเส้นทางคำขอ API ทั้งหมด api.example.com/staging-app ถึง staging-app.example.com/api. ฉันประสบความสำเร็จในการเปลี่ยนเส้นทางคำขอ API แต่อย่างใด ส่วนหัวการให้สิทธิ์ ไม่ถูกส่งต่อไปยังพร็อกซีพาส ส่งผลให้ 401 ไม่ได้รับอนุญาต ในขณะที่ส่วนหัวอื่นๆ ถูกส่งต่อไป

นี่คือปัจจุบันของฉัน api.example.com การกำหนดค่า nginx:

เซิร์ฟเวอร์ {
        server_name api.example.com;


        สถานที่ / การแสดงละครแอป {
                เขียนใหม่ ^/staging-app/(.*)$ /$1 ตัวแตก; 
                proxy_pass http://staging-app.example.com/;
        }

        สถานที่ / ทดสอบ {
                เขียนใหม่ ^/test/(.*)$ /$1 แตก;
                proxy_pass http://127.0.0.1:3333/;
         }

    ฟัง [::]:443 ssl; # จัดการโดย Certbot
    ฟัง 443 ssl; # จัดการโดย Certbot
    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem; # จัดการโดย Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem; # จัดการโดย Certbot
    รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot

}
เซิร์ฟเวอร์ {
    ถ้า ($host = api.example.com) {
        ส่งคืน 301 https://$host$request_uri;
    } # จัดการโดย Certbot


        ฟัง 80;
        ฟัง [::]:80;

        server_name api.example.com;
    กลับ 404; # จัดการโดย Certbot
}

และสำหรับแอปพลิเคชัน laravel ของฉัน ฉันใช้การกำหนดค่าที่กำหนดจาก Laravel เอง

อัปเดต 1: ฉันพยายามเพิ่ม proxy_set_header ทดสอบ ค่าการทดสอบ ในบล็อกตำแหน่งโดยตรง แต่ดูเหมือนว่าจะไม่ทำงานเช่นกัน

Ivan Shatsky avatar
gr flag
ไม่มีอะไรควรป้องกันไม่ให้ nginx ส่งส่วนหัว 'การอนุญาต' ไปยังอัปสตรีมของคุณ แต่คุณไม่ได้ส่งคำขอไปยังปลายทาง `/api` ในการดำเนินการ ให้ใช้ `ตำแหน่ง /staging-app { proxy_pass http://staging-app.example.com/api; }` แทน ที่จริงแล้ว ไม่จำเป็นต้องมีกฎการเขียนซ้ำสำหรับการกำหนดค่าของคุณเพื่อตัดคำนำหน้า URI เลย ตรวจสอบ [สิ่งนี้](https://stackoverflow.com/questions/53649885/a-little-confused-about-trailing-slash-behavior-in-nginx) เธรด SO เพื่อค้นหาสาเหตุ
Kevin Yobeth avatar
ng flag
ฉันได้ติดตั้ง [กล้องโทรทรรศน์](https://laravel.com/docs/9.x/telescope) ซึ่งช่วยให้ฉันเห็นคำขอที่เข้ามา คำขอมาถึงสำเร็จด้วยปลายทางที่ถูกต้อง แต่ไม่มี `ส่วนหัวการให้สิทธิ์` เมื่อฉันลองเพิ่มส่วนหัวอื่นเช่น `authorizationzz` มันจะถูกส่งผ่าน
Score:0
ธง cn

ลองเพิ่มสิ่งต่อไปนี้ในการกำหนดค่าของคุณสำหรับเซิร์ฟเวอร์ที่อยู่ในพอร์ต 443 :

proxy_http_version 1.1;
proxy_set_header "การเชื่อมต่อ" "";

สิ่งนี้จะทำให้การเชื่อมต่อจากมาสเตอร์และตัวแทนมีอยู่ ซึ่งจำเป็นสำหรับการรับรองความถูกต้องในการตั้งค่าบางอย่าง

เอกสารการกำหนดค่า

เอกสารการรักษา nginx

Kevin Yobeth avatar
ng flag
ไม่ ส่วนหัวการให้สิทธิ์ยังคงไม่ผ่าน ฉันลองเพิ่ม `proxy_set_header Test ค่าการทดสอบ` ในบล็อกตำแหน่งที่ตั้งโดยตรง แต่ก็ไม่สามารถเพิ่มค่าลงในคำขอได้

โพสต์คำตอบ

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