استفاده از 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
را برای کلاینتها حفظ میکند.