รักษาการเปลี่ยนเส้นทางใน nginx จากแหล่งภายนอก


15

ฉันอยู่ในสถานการณ์ที่จะให้โอกาสทางการตลาดแก่ฝ่ายการตลาดของพวกเขาในการรักษาการเปลี่ยนเส้นทางด้วยตนเอง nginx.confจนถึงขณะนี้พวกเขาผ่านข้อมูลไปยังแผนกไอทีและเราเก็บรักษามันสำหรับพวกเขาใน

พวกเหล่านี้บางคนค่อนข้างคุ้นเคยกับการเปลี่ยนเส้นทางใน IIS หรือแม้กระทั่งใน Apache แต่ก็ไม่มีตัวเลือกให้พวกเขาเข้าถึงการกำหนดค่า nginx โดยตรง

ฉันเห็นว่าไม่มีการสนับสนุน nginx สำหรับ.htaccessไฟล์ที่ฉันสามารถให้การเข้าถึงได้และฉันก็ไม่ต้องการให้สิทธิ์การเขียนเพื่อเข้าถึงไฟล์ conf ที่ nginx รวมอยู่ด้วย ฉันคาดว่าการตลาดของเราจะหยุดการตั้งค่า nginx ของเราภายในไม่กี่ชั่วโมง

มีความเป็นไปได้ที่ปลอดภัยโดยไม่ให้พวกเขาเข้าถึงหัวใจของเครื่องถ่วงโหลดของเราหรือไม่?

คำตอบ:


24

ไม่มีวิธีการในตัวเพื่อแยกการตั้งค่าการเขียนใหม่อย่างถูกต้อง มีสามวิธีที่คุณสามารถทำได้

โมดูลแผนที่รวมถึง

โมดูลแผนที่ช่วยให้คุณสามารถที่จะรวมแมปจากแฟ้มที่แยกต่างหาก Nginx ยังคงต้องมีการโหลดซ้ำหลังจากที่ไฟล์มีการเปลี่ยนแปลงและไฟล์การแมปจะต้องถูกต้องทางไวยากรณ์ แต่จะ จำกัด สิ่งที่สามารถทำได้

nginx.conf:

map $uri $new {
    include /etc/nginx/marketing.map;
}

server {
    ...
    if ($new) {
        rewrite ^ $new redirect;
    }
    ...
}

marketing.map:

/about  /company/about-us;
~^/people/(?<person>.*)$    /company/people/$person;

การกำหนดค่าล่วงหน้ากระบวนการ

สิ่งแรกคือการเขียนสคริปต์ที่แปลงการเปลี่ยนเส้นทางจากบางรูปแบบที่คุณกำหนดเป็นการกำหนดค่า nginx ตัวอย่างเช่นให้รายการของการเปลี่ยนเส้นทางที่คั่นด้วยพื้นที่

/foo/(.*) /bar/$1

และสคริปต์:

#!/bin/sh
while read SOURCE DEST; do
    echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf

เพื่อจัดรูปแบบการกำหนดค่าต่อไปนี้:

rewrite /foo/(.*) /bar/$1 permanent;

จากนั้นคุณต้องการเรียกใช้nginx -tการกำหนดค่าทั้งหมดเพื่อตรวจสอบว่าถูกต้องก่อนที่จะโหลดซ้ำ

การประมวลผลแบบทันทีทันใด

ตัวเลือกที่สองคือการใช้ngx_lua , ngx_perlหรือngx_jsเพื่อดำเนินการอ่านและประมวลผลการกำหนดค่าการเปลี่ยนเส้นทางของคุณใน nginx เอง ตัวอย่างเช่นrewrite_by_luaคำสั่งอนุญาตให้คุณรันโค้ดLuaเพื่อสร้างการเขียนซ้ำ คุณต้องระมัดระวังเกี่ยวกับ preformance แต่เนื่องจากคุณจะตีความรหัสสำหรับทุกคำขอ


1
โมดูลแผนที่จะให้วิธีที่ จำกัด เล็กน้อยในการกำหนดค่าการเปลี่ยนเส้นทาง
mgorven

1
วิธีการแผนที่ดูมีแนวโน้มมาก! ดังนั้นฉันจะเริ่มเขียนเว็บไซต์อย่างง่ายเพื่อรักษาไฟล์แผนที่ ขอขอบคุณ!
Sascha

2
น่าเสียดายที่ ณ จุดนี้ (ฤดูใบไม้ร่วงปี 2014) โครงการ ngx_js ถูกสัมผัสเมื่อสองปีที่แล้ว อย่างไรก็ตาม ngx_lua นั้นทำงานมากและได้รับการดูแลอย่างดี
วิลล์

ขณะนี้มีnginScript (คุณภาพอัลฟา) ที่อนุญาตให้ใช้ชุดย่อยของ js
lifeisfoo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.