Score:0

เปลี่ยนเส้นทางไปยังเนื้อหาภายนอก nginx

ธง pk

เป้าหมายของฉันคือมีหนึ่ง nginx ที่สามารถ proxy_pass ไปยังเซิร์ฟเวอร์อื่นได้

อินพุตที่ต้องการ

https://example.com/https://assets1.com/image.jpg?utm=อะไร

ผลลัพธ์ที่ต้องการ
https://assets1.com/image.jpg?utm=อะไร

ที่นี่บล็อกตำแหน่งของฉัน

เซิร์ฟเวอร์ {

    ดัชนี index.html index.htm index.nginx-debian.html;
    server_name example.com www.example.com;

    ตำแหน่ง ~/(.*) {
            ถ้า ($request_method = 'GET') {
                    add_header 'การควบคุมการเข้าถึง - อนุญาต - ต้นทาง' '*';
            add_header 'Access-Control-Allow-Credentials' 'จริง';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User->
    }
    proxy_pass https://$1$is_args$args/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header โฮสต์ "www.example.com";
}
ฟัง 80;
ฟัง [::]:442 ssl ipv6only=เปิด;
ฟัง 443 ssl; # จัดการโดย Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot

}

และข้อผิดพลาดที่ฉันได้รับ:

2021/09/21 09:27:32 [ข้อผิดพลาด] 8475#8475: *16 พอร์ตไม่ถูกต้องในอัปสตรีม "https:/assets1.com/image.jpg?utm=whatever", ไคลเอ็นต์: [IP], เซิร์ฟเวอร์: domain.com คำขอ: "GET /https://assets1.com/image.jpg?utm=whatever HTTP/1.1", โฮสต์: "example.com"

Michael Hampton avatar
cz flag
บล็อก `สถานที่' นี้ไม่สอดคล้องกับรายการบันทึกข้อผิดพลาดที่คุณโพสต์ โปรดโพสต์สถานะที่แท้จริงของการกำหนดค่า _complete_ nginx ของคุณโดยใช้ `nginx -T`
Imnl avatar
pk flag
เพิ่มการกำหนดค่าเซิร์ฟเวอร์แบบเต็ม
Score:0
ธง us

URL คำขอดั้งเดิมของคุณมีคำนำหน้าโปรโตคอล: https://example.com/https://assets1.com.

ของคุณ ที่ตั้ง บล็อกจับส่วนหลังจากแรก /, ดังนั้น $1 กลายเป็น https://assets1.com.

ในของคุณ proxy_pass คำสั่งที่คุณมี https://$1$is_args$argsซึ่งกลายเป็น https://https://assets1.com เมื่อมีการขยายตัวแปร

nginx พยายามแยกวิเคราะห์ https://assets1.com เป็นโดเมน:พอร์ตคู่ ดังนั้นส่วนของโดเมนของ URL คือ https และพอร์ตเป็นสตริงว่าง

เพื่อแก้ไขปัญหา ฉันขอเสนอการกำหนดค่าต่อไปนี้:

สถานที่ ~^/https://(.+)$ {
    proxy_pass https://$1$is_args$args;
    ...
}

วิธีนี้ทำให้เราแยกส่วนของโปรโตคอลไม่ให้ถูกเก็บเป็น $1 เพื่อให้เรามี URL ที่ถูกต้อง ฉันยังเพิ่มจุดเริ่มต้นและจุดสิ้นสุดเพื่อทำให้ regex แข็งแกร่งยิ่งขึ้น

โพสต์คำตอบ

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