از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش ایجاد تغییر مسیرهای موقت و دائمی NGINX
سرفصلهای مطلب
ریدایرکت NGINX پیکربندی است که ترافیک وب را از یک URL به URL دیگر هدایت می کند، بنابراین بازدیدکنندگان و موتورهای جستجو می توانند فرود آیند. روی مقصد صحیح تغییر مسیرها برای حفظ رتبه سئو، اجتناب از محتوای تکراری و بهبود تجربه کاربر مهم هستند.
NGINX از دو نوع تغییر مسیر پشتیبانی می کند: تغییر مسیرهای دائمی (HTTP 301) که نشان دهنده تغییرات دائمی URL هستند و تغییر مسیرهای موقت (HTTP 302) که برای تغییر مسیرهای کوتاه مدت استفاده می شوند.
در این مقاله، شما را از طریق راهاندازی تغییر مسیرهای موقت و دائمی در NGINX راهنمایی میکنیم. شما یاد خواهید گرفت که از دستورالعمل هایی مانند بازگشت، بازنویسی، و try_files، موارد استفاده رایج را بررسی کنید و بهترین شیوه ها را برای جلوگیری از مشکلاتی مانند حلقه های تغییر مسیر اجرا کنید.
در پایان، می توانید پیکربندی وب سایت خود را برای مدیریت ترافیک بهتر اصلاح کنید.
پیش نیازهای ایجاد ریدایرکت های NGINX
قبل از راهاندازی تغییر مسیرهای URL در NGINX، مطمئن شوید که سرور شما شرایط زیر را برآورده میکند:
- مجوز برای تغییر تنظیمات سرور – شما نیاز به اداری یا sudo امتیاز دسترسی و ویرایش فایل های پیکربندی NGINX. اگر از برنامه سرور خصوصی مجازی (VPS) استفاده می کنید هاستینگer، نگران نباشید؛ ما به شما کامل می دهیم root دسترسی به تغییر سرور خود در صورت نیاز.
- NGINX نصب شده است – بررسی کنید که NGINX نصب و اجرا شده است روی سرور شما استفاده کنید sudo وضعیت systemctl nginx دستور برای تایید وضعیت آن. اگر NGINX وجود ندارد، آن را با:
sudo apt update sudo apt install nginx
- دسترسی به فایل پیکربندی – فایل پیکربندی اصلی NGINX را که معمولاً در /etc/nginx/nginx.conf دایرکتوری برای سایت های جداگانه، فایل های پیکربندی را در آن پیدا خواهید کرد /etc/nginx/sites-available/.
- درک اولیه از نحو NGINX – با ساختار اصلی دستورالعمل ها و متغیرهای NGINX از جمله:
- سرور – یک بلوک سرور را تعریف می کند که درخواست های دریافتی را برای یک دامنه یا آدرس IP خاص مدیریت می کند.
- مکان – پیکربندی ها را برای URI های خاص یا مسیرهای فایل مشخص می کند.
- $request_uri – URI اصلی کامل را از درخواست مشتری دریافت می کند.
- $host – به نام میزبان یا دامنه درخواستی اشاره دارد.
- $query_string – هر پارامتر پرس و جو را در URL نشان می دهد.
- راه اندازی دامنه و DNS – مطمئن شوید که دامنه شما با استفاده از سوابق دقیق DNS به آدرس IP سرور صحیح اشاره می کند.
- پشتیبان گیری از فایل های پیکربندی – همیشه از فایل های پیکربندی موجود خود نسخه پشتیبان تهیه کنید تا در صورت بروز خطا از از دست رفتن داده ها جلوگیری کنید. از دستور زیر استفاده کنید:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
پیاده سازی تغییر مسیرهای NGINX
برای پیکربندی تغییر مسیرهای NGINX، از سه دستورالعمل کلیدی استفاده خواهید کرد: بازگشت، بازنویسی، و try_files. هر کدام هدف خاصی را برای تغییر مسیر موثر URL انجام می دهند.
با استفاده از دستورالعمل بازگشت
این بازگشت دستورالعمل ساده ترین و کارآمدترین راه برای ایجاد تغییر مسیر است. این برای سناریوهایی مانند تغییر مسیر یک URL یا کل دامنه ایده آل است. این دستورالعمل همچنین تغییر مسیرها را سریعتر پردازش می کند زیرا از پیچیدگی های غیر ضروری جلوگیری می کند.
بازگشت بلافاصله پردازش دستورالعمل های بیشتر را متوقف می کند و کد وضعیت HTTP مشخص شده و URL مقصد را برای مشتری ارسال می کند. نحو اصلی آن به شرح زیر است:
return [status code] [URL];
- [status code] – مشخص کنید 301 برای دائمی یا 302 برای تغییر مسیرهای موقت
- [URL] – URL مورد نظر را از جمله متغیرهای NGINX مربوطه را تعریف کنید $request_uri یا $host.
به عنوان مثال، برای تغییر مسیر از یک دامنه قدیمی به یک دامنه جدید:
server { listen 80; server_name www.old-domain.tld; return 301 https://www.new-domain.tld$request_uri; }
- 301 به طور دائم بازدیدکنندگان را از www.old-domain.tld به https://www.new-domain.tld.
- $request_uri مسیر اصلی و رشته پرس و جو را حفظ می کند.
همچنین می توانید استفاده کنید بازگشت برای تغییر مسیر یک تک page مانند این:
location /old-page { return 301 /new-page; }
- 301 دسترسی کاربران را تغییر مسیر می دهد /قدیمی-page به /جدید-page در همان دامنه
با استفاده از دستورالعمل بازنویسی
این بازنویسی دستورالعمل به شما امکان می دهد با استفاده از عبارات منظم، تغییر مسیرهای پیچیده تری انجام دهید (regex) که الگوهای موجود در URL اصلی را مطابقت می دهد و آنها را به URL های جدید تبدیل می کند.
برای مواردی که بازگشت کافی نیست، مانند تغییر مسیر پویا URL های مبتنی بر روی الگوها یا شرایط خاص در حالی که بازنویسی قدرتمند است، استفاده نادرست می تواند منجر به مشکلاتی مانند حلقه های تغییر مسیر شود، بنابراین با دقت از آن استفاده کنید.
در اینجا نحو اصلی آن است:
rewrite regex replacement [flag];
- regex – الگو را برای مطابقت با URL اصلی تعریف می کند.
- جایگزینی – آدرس یا مسیر مورد نظر را مشخص می کند.
- پرچم – اختیاری؛ کنترل ها بازنویسیرفتار پرچم های رایج عبارتند از:
- آخرین – پردازش قوانین بازنویسی بیشتر را متوقف می کند.
- تغییر مسیر – یک تغییر مسیر موقت ارسال می کند.
- دائمی – یک تغییر مسیر دائمی ارسال می کند.
به عنوان مثال، برای تغییر مسیر یک URL مبتنی بر روی یک الگو:
location / { rewrite ^/old/(.*)$ /new/$1 permanent; }
- رژکس ^/قدیمی/(.*)$ با هر URL که با آن شروع می شود مطابقت دارد /قدیمی/ و بقیه مسیر را می گیرد.
- 1 دلار اشاره به گروه اسیر شده، پیوست به /جدید/.
مثال دیگری یک اسلش انتهایی به URL ها اضافه می کند:
rewrite ^([^.]*[^/])$ $1/ permanent;
- ^([^.]*[^/]) دلار URL ها را بدون اسلش انتهایی مطابقت می دهد.
- $1/ یک اسلش به URL مطابقت داده شده اضافه می کند.
در مقابل، شما می توانید URL ها را با اسلش انتهایی به نسخه های غیر اسلش خود هدایت کنید:
rewrite ^/(.*)/$ /$1 permanent;
- ^/(.*)/$ URL ها را با اسلش انتهایی مطابقت می دهد.
با استفاده از دستورالعمل try_files
با try_files، می توانید وجود فایل ها یا دایرکتوری های خاص را قبل از ارائه پاسخ یا هدایت مجدد ترافیک بررسی کنید. این برای وبسایتهای پویا، پیکربندیهای بازگشتی، یا تغییر مسیر درخواستها در مواقعی که فایلها از دست میروند، مفید است.
این try_files دستورالعمل از این نحو استفاده می کند:
try_files path1 path2 ... fallback;
- مسیر 1 مسیر 2 – مسیرهای فایل یا دایرکتوری را که NGINX بررسی می کند به ترتیب تعریف کنید.
- بازگشتی – اقدام یا URL را که در صورت عدم وجود مسیرهای تعریف شده انجام می شود، مشخص می کند.
در اینجا نمونه ای از تغییر مسیر درخواست برای فایل های موجود به یک خطای سفارشی آورده شده است page:
location / { try_files $uri $uri/ /404.html; }
- $uri بررسی می کند که آیا فایل درخواستی وجود دارد یا خیر.
- $uri/ بررسی می کند که آیا دایرکتوری با نام درخواستی وجود دارد یا خیر.
- /404.html در صورتی که هیچ کدام وجود نداشته باشد ارائه می شود.
به طور مشابه، تمام فایل های از دست رفته را به وب سایت خود هدایت کنید homepage:
location / { try_files $uri $uri/ /index.html; }
- /index.html اگر فایل یا دایرکتوری منطبق با درخواست وجود نداشته باشد، به عنوان بازگشتی عمل می کند.
اگر می خواهید تغییر مسیر دهید گم شده است PHP فایل ها به یک کنترل کننده خطا:
location ~ \.php$ { try_files $uri /error-handler.php; }
- این regex ~ \.php$ با همه مطابقت دارد PHP درخواست ها
- /error-handler.php رسیدگی به درخواست های گمشده PHP فایل ها
موارد استفاده تغییر مسیر NGINX
تغییر مسیرهای NGINX اهداف مختلفی را دنبال میکنند، از تقویت امنیت گرفته تا بهبود تجربه کاربر. در اینجا پنج مورد و دستورالعمل استفاده رایج آورده شده است روی روش اجرای آنها
تغییر مسیر از HTTP به HTTPS
هدایت ترافیک HTTP به HTTPS امنیت وب سایت شما را بهبود می بخشد و اعتماد کاربران را ایجاد می کند. همچنین اطمینان حاصل می کند که موتورهای جستجو سایت شما را ایمن می شناسند، که می تواند رتبه بندی SEO را افزایش دهد.
مثال زیر روش تنظیم تغییر مسیر HTTP به HTTPS را با استفاده از بازگشت بخشنامه:
server { listen 80; server_name domain.tld www.domain.tld; return 301 https://$host$request_uri; }
- گوش کن 80 به ترافیک ورودی HTTP گوش می دهد روی بندر 80.
- server_name domain.tld www.domain.tld نام دامنه هایی را که این بلوک سرور کنترل می کند را مشخص می کند.
تغییر مسیر غیر WWW به WWW
هدایت ترافیک غیر WWW به نسخه WWW وب سایت شما، ساختار URL ثابتی را حفظ می کند و از مشکلات محتوای تکراری جلوگیری می کند. میتوانید با افزودن یک بلوک سرور اختصاصی برای رسیدگی به درخواستهای غیر WWW، در NGINX به این مهم دست یابید. به عنوان مثال:
server { listen 80; server_name domain.tld; return 301 http://www.domain.tld$request_uri; }
- server_name domain.tld با درخواست های نسخه غیر WWW دامنه مطابقت دارد.
اگر سایت شما از HTTPS استفاده می کند، پیکربندی مشابهی برای هدایت ترافیک غیر WWW روی HTTPS اضافه کنید:
server { listen 443 ssl; server_name domain.tld; return 301 https://www.domain.tld$request_uri; }
- گوش کن 443 ssl به ترافیک HTTPS گوش می دهد.
تغییر مسیر به یک تعمیر و نگهداری page
هدایت ترافیک به تعمیر و نگهداری page در طول به روز رسانی سایت یا خرابی موقت رایج است. با استفاده از a مکان مسدود کردن، شما به راحتی می توانید یک تغییر مسیر URL NGINX را برای اطلاع بازدیدکنندگان از تعمیر و نگهداری مداوم پیکربندی کنید.
به عنوان مثال، برای تغییر مسیر تمام ترافیک به یک تعمیر و نگهداری page:
server { listen 80; server_name domain.tld www.domain.tld; location / { return 302 /maintenance.html; } location /maintenance.html { root /var/www/html; } }
- مکان / تمام درخواست های دریافتی را مطابقت می دهد و آنها را به آن هدایت می کند /maintenance.html با استفاده از موقت (302) تغییر مسیر.
- مکان /maintenance.html تعمیر و نگهداری را مشخص می کند page مکان فایل در این مورد، آن را در /var/www/html دایرکتوری
تنظیم تغییر مسیرهای مشروط
تغییر مسیرهای مشروط در NGINX به شما امکان می دهد ترافیک را بر اساس هدایت کنید روی شرایط خاص، مانند عوامل کاربر یا آدرس های IP. استفاده کنید اگر دستورالعمل در سرور یا بلوک مکان برای انجام این کار.
مثال زیر کاربران موبایل را به نسخه موبایلی سایت شما هدایت می کند:
server { listen 80; server_name domain.tld www.domain.tld; if ($http_user_agent ~* "Mobile") { return 302 https://m.domain.tld$request_uri; } }
- $http_user_agent با رشته عامل کاربر مرورگر یا دستگاه بازدیدکننده مطابقت دارد.
- این ~* “موبایل” شرایط منطبق بر عوامل کاربر حاوی موبایل، که به حروف بزرگ و کوچک حساس نیست.
مثال دیگری روش مسدود کردن یا تغییر مسیر IP های خاص را نشان می دهد:
server { listen 80; server_name domain.tld; if ($remote_addr = 192.168.1.1) { return 403; } }
- $remote_addr با آدرس IP بازدیدکننده مطابقت دارد.
- این بازگشت 403 دستورالعمل با برگرداندن a دسترسی را مسدود می کند ممنوع (403) کد پاسخ.
تغییر مسیر با پارامترهای پرس و جو
با تغییر مسیر URL ها با پارامترهای پرس و جو، می توانید درخواست های پویا را با حفظ یا تغییر داده های خاص در URL مدیریت کنید. NGINX این امکان را با استفاده از اگر یا بازنویسی دستورالعمل ها، همراه با متغیرهایی مانند $request_uri و $arg_.
به عنوان مثال، برای تغییر مسیر یک URL با حفظ پارامترهای پرس و جو:
location /old-page { return 301 /new-page?$query_string; }
- $query_string پارامترهای پرس و جو اصلی را در URL هدایت شده حفظ می کند.
- به عنوان مثال، /قدیمی-page؟promo=true تغییر مسیر می دهد به /جدید-page؟promo=true.
در همین حال، برای تغییر مسیر بازدید کنندگان بر اساس روی یک پارامتر پرس و جو خاص:
server { listen 80; server_name domain.tld; if ($arg_promo = "true") { return 301 /promo-page; } }
- $arg_promo مطابقت دارد تبلیغاتی رشته پرس و جو در URL.
- اگر رشته کوئری برابر با true باشد، بازدیدکنندگان به هدایت می شوند /تبلیغات-page.
NGINX بهترین شیوه ها را هدایت می کند
برای دستیابی به عملکرد مطلوب، اجتناب از خطاها و حفظ یک تجربه کاربری روان، هنگام راهاندازی تغییر مسیرهای NGINX، این بهترین شیوهها را دنبال کنید:
از حلقه های تغییر مسیر خودداری کنید
حلقههای تغییر مسیر زمانی رخ میدهند که یک قانون ناخواسته ترافیک را به سمت خود هدایت کند یا با قوانین دیگر همپوشانی داشته باشد. این حلقه ها می توانند سرعت سرور شما را کاهش دهند و کاربران را ناامید کنند. با استفاده از شرایط دقیق در سرور یا بلوکهای مکان خود، برای جلوگیری از تضاد، از حلقههای تغییر مسیر جلوگیری کنید.
این مثال امن نیست زیرا ترافیک را به خودش هدایت می کند:
server { listen 80; server_name domain.tld; return 301 https://domain.tld$request_uri; }
برعکس، در زیر نمونه ای از تغییر مسیر ایمن آورده شده است:
server { listen 80; server_name www.domain.tld; return 301 https://domain.tld$request_uri; }
فقط در صورت لزوم از حروف عام یا regex استفاده کنید
در حالی که عبارات عام و عبارات منظم انعطافپذیری را ارائه میکنند، میتوانند پیکربندیها را پیچیده کنند و بر عملکرد تأثیر بگذارند. از آنها فقط زمانی استفاده کنید که گزینه های ساده تر، مانند بازگشت دستورالعمل، نمی تواند نیازهای شما را رسیدگی کند.
به عنوان مثال، از الگوهای بیش از حد گسترده مانند این اجتناب کنید:
location ~ .* { return 301 /new-page; }
در عوض، از الگوها یا شرایط خاص استفاده کنید، همانطور که در زیر نشان داده شده است:
location ~ ^/old-page[0-9]+$ { return 301 /new-page; }
قوانین تغییر مسیر را در صورت امکان ترکیب کنید
ادغام تغییر مسیرهای مشابه در یک بلوک واحد، دستورالعمل ها را به حداقل می رساند و وضوح را بهبود می بخشد. به عنوان مثال:
location ~ ^/(old-page1|old-page2|old-page3)$ { return 301 /new-page; }
تغییر مسیرهای زنجیره ای را به حداقل برسانید
زنجیرهای کردن چندین تغییر مسیر کند میشود page بارگذاری می شود و بر سئو تأثیر منفی می گذارد. همیشه ترافیک را مستقیماً به مقصد نهایی هدایت کنید. به عنوان مثال، به جای زنجیر کردن:
/page1 -> /page2 -> /page3
از یک تغییر مسیر مستقیم مانند زیر استفاده کنید:
/page1 -> /page3
قوانین تغییر مسیر را قبل و بعد از استقرار آزمایش کنید
همیشه تغییر مسیرهای خود را تأیید کنید تا همانطور که می خواهید رفتار کنند. از این دستورات برای بررسی خطاهای نحوی قبل از بارگیری مجدد پیکربندی خود استفاده کنید:
sudo nginx -t sudo systemctl reload nginx
روش دیگر، ابزارهایی مانند curl می توانند کدهای وضعیت HTTP و URL های هدایت شده را تأیید کنند:
curl -I http://domain.tld/old-page
پس از استقرار، از ابزارهای سئو مانند کنسول جستجوی گوگل یا قورباغه جیغ برای اطمینان از عدم وجود پیوندهای شکسته یا حلقه های تغییر مسیر.
نتیجه گیری
در این مقاله روش راه اندازی ریدایرکت های مختلف NGINX از جمله تغییر مسیر از HTTP به HTTPS و از غیر WWW به WWW را توضیح داده ایم. شما همچنین بهترین روشها را کشف کردهاید، مانند روش اجتناب از حلقههای تغییر مسیر، استفاده عاقلانه از regex و آزمایش کامل تغییر مسیرها.
علاوه بر این، ما پیکربندی تغییر مسیرها را با پارامترهای پرس و جو و حفظ بلوک های سرور تمیز پوشش داده ایم. با این دانش، می توانید ترافیک را به طور موثر مدیریت کنید و تنظیمات سرور خود را برای عملکرد و سئو بهینه کنید.
اگر هنوز در مورد تغییر مسیرهای سمت سرور NGINX سؤالی دارید، از کادر نظر زیر استفاده کنید.
سوالات متداول تغییر مسیر NGINX
ریدایرکت NGINX چیست؟
ریدایرکت NGINX یک دستورالعمل سمت سرور است که بازدیدکنندگان را از یک URL به URL دیگر ارسال می کند. این به مدیریت ترافیک، بهبود سئو و حفظ مسیریابی صحیح کمک می کند، معمولاً با استفاده از کدهای وضعیت مانند 301 (دائمی) یا 302 (موقت).
چگونه یک تغییر مسیر ساده را در NGINX پیکربندی کنم؟
برای پیکربندی یک تغییر مسیر ساده در NGINX، از بازگشت بخشنامه در داخل مربوطه سرور مسدود کردن به عنوان مثال:
سرور {
گوش کن 80;
server_name old-domain.tld;
بازگشت 301 https://new-domain.tld$request_uri;
}
برای تغییر مسیر 301 از چه نحوی استفاده کنم؟
برای یک 301 تغییر مسیر در NGINX، از نحو زیر استفاده کنید:
بازگشت 301 https://new-domain.tld$request_uri;
این به طور دائم بازدیدکنندگان را از URL قدیمی به مقصد جدید هدایت می کند.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1403-12-27 23:44:18