۲۸ تیر ۱۴۰۴
با مودیفایرهای لوکیشن آشنا میشیم و نحوه استفاده از آنها رو بررسی میکنیم.
دستور location در NGINX برای تعریف نحوه پردازش درخواستهای HTTP بر اساس URI (نه URL کامل) استفاده میشود.
زمانی که Nginx یک درخواست را دریافت میکند، ابتدا URL کامل از کلاینت دریافت میشود. سپس تنها بخش URI (یعنی قسمت path آدرس) از آن جدا شده و با بلاکهای location مقایسه میشود تا تطابق مناسب پیدا شود.
به همراه دستور location میتوان یک مودیفایر (modifier) استفاده کرد که نحوه تطبیق با URI را مشخص میکند, در ادامه هرکدام از مودیفایر ها را بررسی میکنیم.
اگر از =
برای تطبیق URI استفاده کنیم, تطابق به صورت دقیق انجام خواهد شد. یعنی URI باید دقیقا برابر با مقداری باشد که ما مشخص کرده ایم:
با استفاده از ~
میتوان URI را با یک عبارت باقاعده حساس به بزرگ یا کوچک بودن حروف تطبیق داد.
در صورتی که نخواهیم عبارت باقاعده ی ما نسبت به حروف کوچک یا بزرگ حساس باشد میتوانیم تطبیق را با استفاده از *~
انجام دهیم.
استفاده از پرانتز باعث ایجاد یک capture group ایجاد می شود و میتوان با استفاده از علامت $
به همراه یک عدد که نشانگر شماره ی capture group است, به مقداری که با این capture group تطبیق داده شده است دسترسی داشت.
با توجه به مثال بالا اگر به مسیر /age/123
بروید (بعد از age باید یک عدد قرار دهید تا مسیر وارد شده تطبیق داده شود) درون صفحه مقداری که توسط capture group تطبیق داده شده است در صفحه نمایش داده میشود.
اگر بخواهیم تمام مسیرهایی که با یک پیشوند خاص شروع می شوند را تطبیق دهیم میتوانیم از تطابق پیشوندی استفاده کنیم تطابق پیشوندی به دو صورت وجود دارد.
^~
در صورتی که از ^~
استفاده کنیم تطابق پیشوندی با اولویت بالا انجام خواهد شد. بدین صورت اگر URI با این پیشوند شروع شود، مستقیم این location
بلاک انتخاب تطبیق داده میشود.
نوع دیگری از تطابق پیشوندی وجود دارد که به صورت زیر انجام میشود:
در این نوع تطابق از هیچ نوع مودیفایری استفاده نمیشود! این نوع تطبیق پایین ترین اولویت را دارد.
اولویت انتخاب بلاکها توسط nginx به صورت زیر است:
=
(تطابق دقیق)^~
(پیشوندی با اولویت)~
یا *~
) و انتخاب بهترین تطابقبرای اطلاعات بیشتر مستندات مربوط به دستور location رو بررسی کنید. همچنین به مثال هایی که در این قسمت بررسی کردیم رو میتونید از طریق گیت هاب دسترسی داشته باشید.
قسمت قبل: فشرده سازی پاسخ ها | Nginx from scratch