استفاده از proxy_set_body در NGINX

nginx proxy set body
18 فروردین 1404

استفاده از proxy_set_body در NGINX

شما اگر با NGINX کار کرده باشید، احتمالاً اسم ماژول ngx_http_proxy_module را شنیده‌اید. این ماژول به شما اجازه می‌دهد تا درخواست‌ها را به سرورهای دیگر پروکسی کنید. یکی از ویژگی‌های جالب این ماژول، دستور proxy_set_body است که به شما این امکان را می‌دهد که بدنه‌ی درخواست (body) را قبل از ارسال به سرور مقصد تغییر دهید.

برای مثال، فرض کنید شما یک اپلیکیشن وب دارید که به یک API ارتباط دارد و می‌خواهید قبل از اینکه اطلاعات را به سرور API بفرستید، برخی از مقادیر را اصلاح کنید. با استفاده از proxy_set_body، شما می‌توانید این کار را به سادگی انجام دهید.

نحوه‌ی استفاده از این دستور به گونه‌ای است که می‌توانید درون بلوک `location`، آن را تعریف کنید. این طبیعتاً به شما این اجازه را می‌دهد که کنترل بیشتری بر روی درخواستی که به سرور دیگر ارسال می‌شود، داشته باشید. البته، توجه داشته باشید که این دستور باید بعد از دستورات دیگر پروکسی مانند proxy_pass قرار بگیرد.

در ادامه به بررسی یک مثال ساده از استفاده از proxy_set_body خواهیم پرداخت. با استفاده از این مثال، می‌توانید به وضوح درک کنید که چگونه می‌توانید بدنه‌ی درخواست را تغییر دهید و آن را به سرور مقصد ارسال کنید.

مثال کد

location /api {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_body "{\"key\": \"new_value\"}";
}

توضیح کد

حال با هم به توضیح خطوط کد می‌پردازیم:


location /api {

این خط مشخص می‌کند که تنظیمات درون بلاک، برای مسیر /api اعمال می‌شود.


proxy_pass http://backend;

در این خط درخواست‌ها به سرور با نام backend ارسال می‌شوند.


proxy_set_header Host $host;

این دستور هدر Host را تنظیم می‌کند تا نام میزبان صحیح به سرور مقصد ارسال شود.


proxy_set_body "{\"key\": \"new_value\"}";

در اینجا بدنه‌ی درخواست تغییر داده شده و به یک JSON جدید تبدیل می‌شود که در آن key مقداری جدید دارد.


به این ترتیب می‌توانید به راحتی با استفاده از proxy_set_body بدنه درخواست‌ها را قبل از ارسال تغییر دهید و با این کار به سادگی مدیریت بهتری بر روی پروکسی‌ها داشته باشید!

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

؟

چطور می‌توانم بدنه درخواست را تغییر دهم؟

؟

آیا می‌توانم چندین هدر را تنظیم کنم؟

؟

proxy_set_body فقط برای JSON کاربرد دارد؟

؟

گرافی از روند کار proxy در NGINX چگونه است؟

؟

آیا می‌توانم داده‌های پیچیده‌تری را ارسال کنم؟