پارامتر port_in_redirect در NGINX

nginx port in redirect
18 بهمن 1403

آشنایی با پارامتر port_in_redirect در NGINX


وقتی که با وب‌سرور معروف NGINX کار می‌کنیم، ممکن است با سناریوهایی مواجه شویم که در آنها به تغییرات پیکربندی خاصی نیاز است. یکی از این تغییرات مهم، مدیریت ریدایرکت‌ها و ترسیم آدرس‌های URL با استفاده از پورت‌هاست. به‌طور ویژه، پارامتر port_in_redirect در ماژول ngx_http_core_module به ما این امکان را می‌دهد که کنترلی بر نحوه‌ی نمایش پورت‌ها در ریدایرکت‌ها داشته باشیم.


این پارامتر به‌طور پیش‌فرض به on تنظیم شده است، که به این معناست که NGINX در ریدایرکت‌هایش پورت جاری را در URL نهایی که به کاربر برمی‌گردد نشان می‌دهد. این رفتار می‌تواند تغییر کند و به حالت off برگردد؛ در این حالت، پورت در URL نمایش داده نمی‌شود. به‌عبارت دیگر، اگر ریدایرکت به یک آدرس IP یا نام دامنه با پورت خاصی انجام شود، با تنظیم این پارامتر می‌توان تعیین کرد که آیا پورت در آدرس نهایی گنجانده شود یا خیر.


فرض کنید که شما وب‌سایتی دارید که با استفاده از پورت 8080 بر روی سرور شما اجرا می‌شود. اگر کاربری به آدرس http://example.com مراجعه کند و شما بخواهید این درخواست را به http://example.com:8080 ریدایرکت کنید، با استفاده از port_in_redirect می‌توانید این کار را به راحتی انجام دهید. اگر این پارامتر را off کنید، استفاده از پورت 8080 در ریدایرکت‌ها نادیده گرفته خواهد شد.


استفاده از این ویژگی می‌تواند برای کاربرانی که نمی‌خواهند پورت‌ها در URL نهایی نشان داده شوند، بسیار مفید باشد. در برخی موارد، حذف پورت از URL می‌تواند به بهبود تجربه کاربری و افزایش زیبایی URLها کمک کند. همچنین وقتی که شرایط خاص SSL و HTTPS وجود دارد، مدیریت پورت‌ها می‌تواند در کاهش پیچیدگی‌ها کمک کند.


کد مثال استفاده از port_in_redirect


server {
listen 80;
server_name example.com;

# فعال کردن port_in_redirect
port_in_redirect on;

location / {
return 301 http://example.com:8080$request_uri;
}
}

توضیحات کد


server {

بخش آغازین تعریف یک سرور جدید در NGINX.

listen 80;

تنظیم NGINX برای گوش دادن به پورت 80.

server_name example.com;

مشخص کردن نام دامنه که این سرور برای آن تنظیم شده است.

port_in_redirect on;

فعال‌سازی نمایش پورت در ریدایرکت‌ها.

location / {

تعریف یک مکان خاص (در این مثال همه نشانه‌گذاری‌ها) برای مدیریت ریدایرکت‌ها.

return 301 http://example.com:8080$request_uri;

ایجاد یک ریدایرکت دائمی به URL جدید که شامل پورت 8080 است.

}

بخش انتهایی کدهای موقعیت.

سوالات متداول

؟

چرا باید از port_in_redirect استفاده کنم؟

؟

آیا می‌توانم port_in_redirect را غیرفعال کنم؟

؟

چگونه می‌توانم پورت را در ریدایرکت‌ها نمایش دهم؟

؟

ریدایرکت دائمی چه فرقی با ریدایرکت موقت دارد؟