nginx รองรับกฎ. htaccess / rewrite หรือไม่ ความแตกต่างจาก Apache?


16

ฉันทำงานกับเซิร์ฟเวอร์ Apache http มาระยะหนึ่งแล้วและในที่สุดก็ย้ายไปยังเซิร์ฟเวอร์เนื้อหาคงที่ควบคู่ไปกับเครื่องเนื้อหาไดนามิกอื่น ๆ

ฉันสงสัยว่า nginx รองรับไฟล์ ".htaccess" และสิ่งต่าง ๆ เช่น mod_rewrite หรือไม่

ในขณะที่ฉันคุ้นเคยกับไวยากรณ์ฉันสงสัยว่าความแตกต่าง (ไวยากรณ์) คืออะไรและเส้นโค้งการเรียนรู้นั้นเหมือนกับการย้ายจาก Apache configs ไปยัง nginx

คำตอบ:


15

ไวยากรณ์การเขียนซ้ำของ nginx นั้นสะอาดกว่ามากและเป็นคู่ใน mod_rewrite:

กฎ mod_rewrite:

 RewriteRule ^[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 [QSA,L,NC]

กลายเป็นใน nginx:

rewrite ^/[a-z0-9_-]*-f([0-9]+)/?(p([0-9]+)\.html)?$ /viewforum.php?f=$1&start=$3 last;

แต่ไม่รองรับ. htaccess ...

แก้ไข: อีกตัวอย่างหนึ่งวิธีการสนับสนุนhttp://example.com/~username/ urls ใน nginx:

location ~ /~([a-zA-Z0-9]*)/(.*) {
    root /home/;
    autoindex on;
    index index.html;
    rewrite ^/~([a-zA-Z0-9]*)/(.*)$ /$1/www/$2 break;
}

5

nginx จัดเตรียมฟังก์ชันการทำงานใหม่ให้ตรวจสอบNginxHttpRewriteModule

คุณต้องการทำอะไรกับ. htaccess คุณสามารถตั้งค่า nginx สำหรับการพิสูจน์ตัวตนพื้นฐานด้วยNginxHttpAuthBasicModuleแต่คำสั่งกำหนดค่า AFAIK สามารถเก็บไว้ใน nginx.conf เท่านั้น


2
เป็นหลักฉันสงสัยเกี่ยวกับการตั้งค่าต่อไดเรกทอรี ฉันจะไป R the FM ทันที =)
คนขี้ขลาดนิรนาม

4

มันจะปรากฏ Nginx ที่ไม่มีเทียบเท่า mod_rewrite และเอกสารที่สามารถพบได้ที่นี่ ฉันไม่ได้ใช้ nginx ด้วยตัวเอง แต่เอกสารดูเหมือนว่าการกำหนดค่าจะแตกต่างกันโดยสิ้นเชิง แต่ไม่ควรยากเกินไปที่จะเข้าใจว่ามันทำอะไรอยู่ วิกิมีตัวอย่างมากมาย

ฉันไม่สามารถตอบได้ถ้าคุณมีต่อไฟล์การกำหนดค่าไดเรกทอรีเช่นเดียวกับที่คุณทำได้ด้วย Apache มันคงไม่ทำให้ฉันประหลาดใจถ้าคุณทำได้เพราะมีคนคาดหวังจากการใช้ apache


0

NGINX รองรับการกำหนดค่าในไฟล์จำนวนมากผ่านคำสั่ง 'include' โดยทั่วไปจะโหลดการกำหนดค่าย่อยและวางไว้ในสถานที่ นอกจากนี้ยังรองรับตัวละครโจ๊กเกอร์ดังนั้นจึงง่ายต่อการโหลดหลาย ๆ ตัวในช็อตเดียว

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

/etc/ini.d/nginx force-reload (บน centos)

ฉันไม่รู้จริง ๆ ว่ามีวิธีที่จะหลีกเลี่ยงสิ่งนั้นหรือทำสิ่งที่แตกต่างเพราะฉันใช้ NGINX บนเซิร์ฟเวอร์จำนวนมากที่มีแอปมากมาย (โฮสต์เสมือน) ซึ่งเป็นของฉันเอง หมายความว่า NGINX ไม่เหมาะสำหรับการโฮสต์ร่วม

อย่างไรก็ตามฉันรัก NGINX มากเพราะการกำหนดค่านั้นอ่านง่ายกว่าไฟล์ XML ที่น่ารังเกียจ คำถามเกี่ยวกับรสนิยมฉันเดา ข้อดีอีกอย่างคือความเร็วถ้าเห็นว่าสำคัญในกรณีของคุณ

ขอให้โชคดี

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