بررسی مشکل sub_filter در Nginx
گاهی اوقات در هنگام راهاندازی و پیکربندی سرور Nginx، ممکن است با مشکلی مواجه شوید، که آن sub_filter در هنگام پردازش جیسونهای فشرده نشده به درستی عمل نمیکند. این امر معمولاً به دلیل تنظیمات نادرست سرور یا سازگاری با اعمال gzip رخ میدهد.
در چنین شرایطی، اولین قدم بررسی تنظیمات gzip در فایل کانفیگ Nginx است. اطمینان از این که این ویژگی به درستی پیکربندی شده است میتواند در رفع مشکل مؤثر باشد. gzip به صورت خودکار فایلهای متنی مانند JSON را برای کاهش حجم و افزایش سرعت بارگذاری فشرده میکند.
راهحل پیشنهادی
در اکثر موارد، غیرفعال کردن فشردهسازی gzip یا اطمینان از بستهبندی صحیح و اعمال gzip بر روی محتوا میتواند مشکل sub_filter را حل کند. اگرچه در حالت ایدهآل، شما نباید gzip را غیرفعال کنید زیرا باعث مزایای عملکردی بسیاری میشود.
با بررسی دقیق فایل کانفیگ Nginx به دنبال دایرکتیوهای مربوط به gzip و sub_filter بگردید. این دایرکتیوها تنظیمات اصلی را برای اعمال فیلترها و فشردهسازیها بر روی خروجی مشخص میکنند.
نمونهای از پیکربندی
در اینجا کدی نمونه از چگونگی تنظیمات پیکربندی برای رفع مشکل ارائه شده است:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
gzip off;
sub_filter 'http://backend_server' 'https://example.com';
sub_filter_once off;
}
}
توضیح کد
server
: این بخش پیکربندی یک سرور جدید را تعریف میکند و مشخص میکند که به روی پورت 80 گوش دهد.
listen 80;
: پورت 80 معمولاً برای درخواستهای بدون SSL استفاده میشود.
server_name example.com;
: نام دامنهای که این تنظیمات برای آن اعمال میشود مشخص میکند.
location /
: این بخش نشاندهنده آدرس اصلی وبسایت است که درخواستها را مدیریت میکند.
proxy_pass http://backend_server;
: آدرس سرور بکاند که درخواستها به آن ارسال میشود.
gzip off;
: فشردهسازی gzip غیرفعال میشود تا sub_filter بتواند به درستی عمل کند.
sub_filter 'http://backend_server' 'https://example.com';
: این خط مشخص میکند که همه موارد 'http://backend_server' به 'https://example.com' فرآیند میشوند.
sub_filter_once off;
: این تنظیم sub_filter را چندین بار بر روی هر پاسخ جستجو و جایگزین میکند.