استفاده از proxy_pass_header در Nginx

nginx proxy pass header
06 اردیبهشت 1404

استفاده از proxy_pass_header در Nginx

وقتی که با Nginx کار می‌کنیم، یکی از مهم‌ترین قابلیت‌هایی که می‌توانیم از آن استفاده کنیم، reverse proxy است. این قابلیت به ما اجازه می‌دهد که درخواست‌ها را از کلاینت‌ها به سرورهای داخلی منتقل کنیم. برای این کار، Nginx می‌تواند به عنوان یک پروکسی عمل کند و در چنین مواقعی نیاز داریم که بعضی سرآیندها (header) را نیز به درخواست‌ها اضافه کنیم یا آن‌ها را در پاسخ‌ها منتقل کنیم. در اینجا می‌خواهیم به جزئیات proxy_pass_header بپردازیم.

proxy_pass_header یک دستور Nginx است که به ما این امکان را می‌دهد که مشخص کنیم کدام سرآیندها از پاسخ پروکسی شده به کلاینت منتقل شوند. به عبارت دیگر، وقتی که Nginx به سرور داخلی درخواست می‌فرستد و پاسخی دریافت می‌کند، با استفاده از این دستور می‌توانیم برخی از سرآیندها را در پاسخ نهایی برای کلاینت حفظ کنیم. این به ویژه زمانی مفید است که بخواهیم اطلاعات خاصی را از سرور اصلی به کلاینت‌ فرستاده و یا بارگذاری کنیم.

به عنوان مثال، فرض کنید که ما یک API داریم که از چند سرور مختلف برای پاسخگویی به درخواست‌ها استفاده می‌کند. در اینجا، ممکن است برخی از سرآیندهای خاص مثل Set-Cookie یا Location حائز اهمیت باشند. با استفاده از proxy_pass_header، می‌توانیم مشخص کنیم که آیا این سرآیندها به کلاینت بازگردانده شوند یا نه.

در نهایت، توجه داشته باشید که در زمانی که سرآیندها به کلاینت بازگردانده می‌شوند، باید از امنیت و حفظ حریم خصوصی کاربران نیز مطمئن شوید تا اطلاعات حساس در معرض دید نماند.

نمونه کد

server {
listen 80;
server_name example.com;

location /api/ {
proxy_pass http://backend-server;
proxy_pass_header Set-Cookie;
proxy_pass_header Location;
}
}

توضیح خط به خط کد

line 1 - 2:server { و listen 80; به Nginx می‌گوید که در پورت 80 به درخواست‌ها گوش دهد.


line 3: server_name example.com; نام دامنه‌ای را که سرور باید به آن پاسخ دهد، مشخص می‌کند.


line 5: location /api/ { بلوکی را برای آدرس‌های شروع با /api/ تعریف می‌کند.


line 6: proxy_pass http://backend-server; درخواست‌ها را به سرور بک‌اند که در اینجا http://backend-server است، منتقل می‌کند.


line 7: proxy_pass_header Set-Cookie; به Nginx می‌گوید که سرآیند Set-Cookie باید به کلاینت‌ها بازگردانده شود.


line 8: proxy_pass_header Location; نیز سرآیند Location را برای کلاینت‌ها حفظ می‌کند.


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

؟

استفاده از proxy_pass_header چه فایده‌ای دارد؟

؟

چطور می‌توانم از چند سرآیند مختلف استفاده کنم؟

؟

آیا می‌توان سری به سرآیندهای دیگری هم اشاره کرد؟