Score:2

Nginx เปลี่ยนเส้นทางไปยังโดเมนอื่นโดยไม่ต้องต่อท้าย uri

ธง us

ฉันพยายามที่จะได้รับ http://foo.mydomain.xyz/one/two/three.json โดยการโทร http://bar.mydomain.xyz/cat/one/two/three.json. ฉันใช้การกำหนดค่าต่อไปนี้:

เซิร์ฟเวอร์ {
        ฟัง 80;
        ฟัง [::]:80;
        server_name bar.mydomain.xyz;
        ปิด Absolute_redirect;

        ที่ตั้ง / {
          proxy_pass http://localhost:8080;
        }

        สถานที่ /แมว {
          เขียนใหม่ ^(/cat) http://foo.mydomain.xyz$request_uri ถาวร;
        }
}
เซิร์ฟเวอร์ {
        ฟัง 80;
        ฟัง [::]:80;
        server_name foo.mydomain.xyz;

        ที่ตั้ง / {
          proxy_pass http://localhost:7070;
        }
}

ใช้การกำหนดค่านี้เมื่อฉันโทร: http://bar.mydomain.xyz/cat/ มันกำลังเปลี่ยนเส้นทางฉันไปที่ http://foo.mydomain.xyz/ เรียบร้อยแล้ว แต่เมื่อฉันโทร http://bar.mydomain.xyz/cat/one/two/three.json มันกำลังกลับมา http://foo.mydomain.xyz/cat/one/two/three.json. แจ้งให้ทราบ /แมว ไม่ได้ลบออกจาก url ฉันจะแก้ปัญหานี้ได้อย่างไร

Richard Smith avatar
jp flag
`$request_uri` คือ URI ดั้งเดิม คุณต้องบันทึกส่วนหลังของ URI ใน regex `rewrite` ลอง: `เขียนใหม่ ^/cat/(.*)$ http://foo.mydomain.xyz/$1 ถาวร;`
us flag
@RichardSmith คุณสามารถโพสต์สิ่งนี้เป็นคำตอบ ขอบคุณ
Score:1
ธง jp

ของคุณ เขียนใหม่ คำสั่งกำลังเปลี่ยนชื่อโดเมน แต่ไม่มีอะไรอื่น คุณค่าของ $request_uri เป็น URI ดั้งเดิมรวมถึงส่วนนำหน้า /แมว ส่วนหนึ่ง. คุณต้องจับภาพส่วนหลังของ URI ในนิพจน์ทั่วไป

ตัวอย่างเช่น:

เขียนใหม่ ^/cat/(.*)$ http://foo.example.com/$1 ถาวร;

หรืออาจจะ:

เขียนใหม่ ^/cat(?:/(.*))?$ http://foo.example.com/$1 ถาวร;
us flag
ในกรณีของฉัน ฉันพยายามไปที่ `https://foo.mydomain.xyz/bar/v1/search?text=mytext&size=25` จาก `https://bar.mydomain.xyz/v1/search?text= ข้อความของฉัน&ขนาด=25`เมื่อฉันพยายาม `เขียนใหม่` มันเปลี่ยนเส้นทางไปยังส่วน `https://bar.mydomain.xyz/v1/search` เท่านั้น พารามิเตอร์ไม่ผ่าน
Score:1
ธง us

อีกวิธีหนึ่งคือการจับส่วนใน ที่ตั้ง คำสั่ง:

ที่ตั้ง / {
    proxy_pass http://localhost:8080;
}

ตำแหน่ง ~ ^/cat(/.+)$ {
    ส่งคืน 301 http://foo.example.com$1$is_args$args;
}
us flag
กำลังส่งคืน `จำนวนอาร์กิวเมนต์ที่ไม่ถูกต้องในคำสั่ง "return" ใน /etc/nginx/sites-enabled/mydomain.com:19`
us flag
ขออภัย ความผิดพลาดของฉัน ฉันทิ้งคำ 'ถาวร' ไว้ตรงนั้น
us flag
@tero-kilman ในกรณีของฉัน ฉันพยายามไปที่ `https://foo.mydomain.xyz/bar/v1/search?text=mytext&size=25` จาก `https://bar.mydomain.xyz/v1 /search?text=mytext&size=25` เมื่อฉันลอง `return` มันเปลี่ยนเส้นทางไปยังส่วน `https://bar.mydomain.xyz/v1/search` เท่านั้น พารามิเตอร์ไม่ผ่าน
us flag
ฉันเพิ่มอาร์กิวเมนต์ในการเปลี่ยนเส้นทางในคำตอบของฉัน

โพสต์คำตอบ

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