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

nginx proxy http version
06 بهمن 1403

اگر بخواهیم به عملکرد Nginx به عنوان یک پروکسی فکر کنیم، باید متوجه شویم که بخش های مختلفی در این فرایند نقش دارند. یکی از این بخش ها، ماژول ngx_http_proxy_module است که مسئولیت انتقال درخواست ها و پاسخ‌ها از یک سرور به سرور دیگر را بر عهده دارد. یکی از ویژگی های جالب این ماژول، دستور proxy_http_version است. به کمک این دستور، می‌توانیم نسخه پروتکل HTTP که در هنگام برقراری ارتباط با سرور اصلی استفاده می‌شود را تعیین کنیم.


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


حال به سراغ کاربرد این دستور می‌رویم. فرض کنید شما یک وب‌سایت دارید که به یک سرور دیگر متصل است و این سرور انتظار دارد که از HTTP/1.1 استفاده شود. در این شرایط، شما باید مطمئن شوید که Nginx درخواست‌ها را با این نسخه ارسال می‌کند تا مشکلات اتصال به حداقل برسد.


به عنوان مثال، با استفاده از دستور proxy_http_version می‌توانیم عبارتی شبیه به کد زیر داشته باشیم. حالا بیایید ببینیم که چطور می‌توانیم این دستور را به کار ببریم و چه تاثیری بر روی عملکرد Nginx دارد.


location /api {
proxy_pass http://backend-server;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
}

در این کد یک بخش از پیکربندی Nginx را مشاهده می‌کنید که دستور proxy_http_version به وضوح در آن مشاهده می‌شود.


location /api {
proxy_pass http://backend-server;
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
}

توضیح کد


location /api

این خط تعیین می‌کند که هر گونه درخواست به آدرس /api باید توسط Nginx پردازش شود.

proxy_pass http://backend-server;

این خط مشخص می‌کند که درخواست‌ها باید به سرور پشت (backend-server) ارسال شوند.

proxy_http_version 1.1;

این دستور به Nginx می‌گوید که برای ارتباط با سرور پشت از پروتکل HTTP/1.1 استفاده کند.

proxy_set_header Connection "upgrade";

این خط سرراست است و به Nginx می‌گوید که یک هدر خاص به درخواست اضافه کند تا در برخی سناریو‌ها همچون WebSocket کار کند.

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

؟

proxy_http_version چیه و چرا باید ازش استفاده کنیم؟

؟

چه نسخه‌های HTTP قابل استفاده هستن؟

؟

چه زمانی باید از HTTP/1.0 به جای HTTP/1.1 استفاده کنم؟

؟

پیکربندی نادرست proxy_http_version چه مشکلاتی را ایجاد می‌کند؟