بیشتر خطاهای مسیریابی از تصور نادرست دربارهٔ location می‌آیند. امشب URL را تا مسیر فایل دنبال می‌کنیم و precedence یا ترتیب اولویت را با مثال می‌سنجیم.

این جلسه بخشی از دورهٔ انجین‌اکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.

محیط: سایت www روی HTTP؛ محتوای ثابت root-owned و بدون PHP.

ترتیب انتخاب#

location دقیق با = می‌تواند انتخاب را تمام کند. سپس بلندترین prefix بررسی می‌شود؛ regexها معمولاً به‌ترتیب config سنجیده می‌شوند، مگر prefix منتخب ^~ بررسی regex همان سطح را کنار بگذارد. ترتیب regex برای حفاظت upload در WordPress مهم خواهد بود.

در server:

location = /health.txt {
    try_files $uri =404;
}
location /downloads/ {
    alias /var/www/nginx-lab/downloads/;
    autoindex off;
}

پوشهٔ downloads را با یک readme.txt بساز. alias prefix تطبیق‌خورده را با مسیر معرفی‌شده جایگزین می‌کند؛ root کل URI را به مسیر پایه اضافه می‌کند. slash دو طرف alias باید سازگار باشد. در این مثال لازم نیست try_files پیچیده را با alias ترکیب کنیم.

درخواست /downloads/readme.txt باید فایل بیرون از DocumentRoot را بدهد. /downloads/ بدون index نباید فهرست فایل‌ها را نمایش دهد. فایل health.txt را نیز زیر root اصلی بساز و از URL دقیق بخوان.

redirect داخلی#

پارامتر پایانی try_files می‌تواند درخواست را به URI دیگری یا named location بفرستد و انتخاب location را دوباره آغاز کند. برای WordPress از /index.php?$args استفاده می‌کنیم؛ روی سایت بدون handler PHP این fallback را نگذار.

تمرین: تفاوت مسیر فایل در root و alias را برای یک URI بنویس، سپس با لاگ و درخواست واقعی مقایسه کن. ^~ را روی مسیر حساس بی‌دلیل اضافه نکن؛ ممکن است regex حفاظتی سراسری دیگر اجرا نشود.

بازگشت: locationهای اضافه را بردار و پاسخ صفحهٔ اصلی و 404 را دوباره بگیر. alias به پوشهٔ config، کلید یا backup ایجاد نکن.

منبع: location و try_files ، alias .