راه اندازی پروکسی معکوس در انجین ایکس

راه اندازی Nginx Reverse Proxy همراه با توضیحات

Nginx Reverse Proxy سرویسی است که درخواست کلاینت را میگیرد، درخواست را به یک یا چند سرور پراکسی ارسال میکند، درخواست را واکشی ( fetch ) میکند و در نهایت پاسخ سرور را به کلاینت برمیگرداند.

بخاطر عملکرد و مقیاس پذیری بالا، انجین ایکس ( NGINX ) اغلب به عنوان یک پروکسی معکوس برای سرورهای HTTP و غیر HTTP استفاده می شود.

تنظیمات پراکسی معکوس که در انجین ایکس قرار دارد معمواغلب در Node.js در Python و برنامه های Java قرار دارد.

استفاده از Nginx به عنوان یک پروکسی معکوس چندین مزیت دیگر به شما می دهد:

  • Load Balancing – انجین ایکس می تواند توازن بار را برای توزیع درخواست مشتری در سرورهای پروکسی ، عملکرد و مقیاس پذیری و قابلیت اطمینان را بهبود بخشد.
  • Caching – با Nginx به عنوان یک پروکسی معکوس ، می توانید نسخه های از پیش ارائه شده صفحات را ذخیره کنید تا زمان بارگذاری صفحه سرعت بگیرد. این کار با ذخیره کردن محتوای دریافت شده از پاسخ های سرورهای پراکسی و استفاده از آن برای پاسخ به مشتری بدون نیاز به تماس با سرور پراکسی برای همان محتوا ، در هر زمان انجام می شود.
  • SSL Termination – انجین ایکس می تواند به عنوان یک نقطه پایانی SSL برای ارتباط با مشتری عمل کند. این اتصالات SSL دریافتی را مدیریت و رمزگشایی می کند و پاسخ های سرور پروکسی شده را رمزگذاری می کند.
  • Compression – اگر سرور پراکسی پاسخ‌های فشرده سازی ارسال نمی کند ، می توانید Nginx را تنظیم کنید تا پاسخ ها را قبل از ارسال به کلاینت فشرده سازی کند.

پیش‌نیاز

نصب بودن Nginx در سرور اوبونتو، CentOS یا Debian

استفاده از انجین ایکس به عنوان Reverse Proxy

برای پیکربندی Nginx به عنوان یک پروکسی معکوس برای سرور HTTP ، پرونده پیکربندی بلوک سرور دامنه را باز کنید و یک مکان و یک سرور پراکسی را در داخل آن مشخص کنید:

server {
    listen 80;
    server_name www.example.com example.com;

    location /app {
       proxy_pass http://127.0.0.1:8080;
    }
}

URL سرور پراکسی با استفاده از دستور proxy_pass تنظیم شده است و می تواند از HTTP یا HTTPS به عنوان پروتکل ، نام دامنه یا آدرس IP و یک درگاه اختیاری و URI به عنوان آدرس استفاده کند.

پیکربندی فوق به Nginx می گوید همه درخواست ها را به موقعیت app/ در پراکسی سرور http://127.0.0.1:8080 منتقل کند.

نکته: در سرورهای مبتنی بر اوبونتو و دبیان محل ذخیره فایل‌های block server در
etc/nginx/sites-available/ قرار دارد و همچنین در سرورهای CentOS /etc/nginx/conf.d قرار دارد.

برای درک بهتر از نحوه عملکرد location و proxy_pass به مثال زیر توجه کنید:

server {
    listen 80;
    server_name www.example.com example.com;

    location /blog {
       proxy_pass http://node1.com:8000/wordpress/;
    }
}

اگر شخصی به آدرس http://example.com/blog/my-post دسترسی داشت، انجین ایکس پراکسی میکند این درخواست را به این آدرس http://node1.com:8000/wordpress/my-post

هنگامی که آدرس سرور پراکسی حاوی یو آر آی /wordpress/ است درخواست URI که به سرور پروکسی منتقل میشود با یک URI مشخص شده در کانفیگ جایگزین میشود.اگر آدرس سرور پراکسی بدون URI مشخص شود، درخواست کامل URI به سرور پروکسی منتقل میشود.

عبور Request Headers

وقتی که انجین ایکس یک درخواست همراه دارد، به طور خودکار در Header دو فیلد در درخواست پروکسی از طرف کلاینت به نام های Host و Connection تعریف و هدر های خالی را حذف میکند.

Host را در متغییری به نام proxy_host قرار میدهد و Connection را میبندد

برای تنظیم یا ست کردن هدر کانکشن های پروکسی از دستور proxy_set_header استفاده میشود.
اگر می خواهید از انتقال هدر به سرور پروکسی جلوگیری کنید ، آن را روی یک رشته ” ” خالی تنظیم کنید.

در مثال زیر،ما مقدار فیلد هدر Host را تغییر میدهیم به host$ و مقداری که در بخش Accept-Encoding نوشته را در با مقدار ” ” جایگذاری میکنیم.

location / {
    proxy_set_header Host $host;
    proxy_set_header Accept-Encoding "";
    proxy_pass http://localhost:3000;
}

در نظر داشته باشید بعد از هرگونه تغییر در فایل کانفیگ سرویس اینجین ایکس را ریستارت کنید.

کانفیگ Nginx به عنوان Reverse Proxy برای سرورهای پروکسی HTTP نیستند

برای پیکربندی Nginx به عنوان یک پروکسی معکوس برای سرور پراکسی غیر HTTP ، می توانید از دستورالعمل های زیر استفاده کنید:

  • fastcgi_pass – پروکسی معکوس برای سرورهای FastCGI
  • uwsgi_pass – پروکسی معکوس برای سرورهای uwsgi 
  • scgi_pass – پروکسی معکوس برای سرورهای SCGI
  • memcached_pass – پروکسی معکوس برای Memcached سرور

یکی از نمونه های رایج استفاده از Nginx به عنوان یک پروکسی معکوس برای PHP-FPM:

server {

    # ... other directives

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

آپشن های مشترک Nginx Reverse Proxy

ارائه مطالب از طریق HTTPS امروزه تبدیل به یک استاندارد شده است. در این بخش نمونه ای از تنظیمات پروکسی معکوس HTTPS Nginx از جمله پارامترهای پیشنهادی و هدرهای Nginx را برای شما آورده ایم.

  location/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version  1.1;
    proxy_cache_bypass  $http_upgrade;

    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        "upgrade";
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
  }

proxy_http_version 1.1 – نسخه پروتکل HTTP را برای پروکسی تعیین می کند ، بطور پیش فرض آن را برای Websockets روی 1.0 تنظیم می کند و برای کانکشن Keepalive از ورژن 1.1 استفاده نمایید.

proxy_cache_bypass $http_upgrade – شرایطی را تنظیم می کند که در آن پاسخ از حافظه کش گرفته نمی شود.

Upgrade $http_upgrade و Connection “upgrade” – در صورتی که برنامه شما از Websockets استفاده می کند ، این قسمت های هدر مورد نیاز است.

Host $host – متغیر host$ به ترتیب تقدم زیر شامل:
hostname از خط درخواست یا hostname از فیلد هدر Host یا نام سرور مطابق با درخواست

X-Real-IP $remote_addr – انتقال آی پی آدرس بازدیدکننده از طریق ریموت به پراکسی سرور

X-Forwarded-For $proxy_add_x_forwarded_for – لیستی که حاوی آدرس های IP همه سرورهایی است که کلاینت از طریق آن پروکسی شده است.

X-Forwarded-Proto $scheme – هنگامی که در داخل از HTTPS server Block استفاده میشود، هر یک از درخواست های HTTP از پراکسی سرور به HTTPS بازنویسی میشود.

X-Forwarded-Host $host – هاست اصلی درخواست شده توسط کلاینت را تعریف می کند.

X-Forwarded-Port $server_port – پورت اصلی درخواست شده توسط کلاینت را تعریف می کند.

اگر گواهی SSL/TLS را ندارید از cerbot میتوانید گواهی رایگان Let’s Encrypt SSL برای سرور Ubuntu بدست آورید.

نتیجه

شما آموخته اید که چگونه از Nginx به عنوان یک پروکسی معکوس استفاده کنید. ما همچنین به شما نشان داده ایم كه چگونه پارامترهای اضافی را به سرور منتقل كنید وفیلدهای مختلف هدر را در درخواست های پروکسی تغییر و تنظیم كنید.

درباره AfshinBalakar

افشین بالاکار دانشجوی مهندسی تکنولوژی نرم افزار، مدت 5 سال است با لینوکس رابطه افلاطونی دارم.

پیشنهاده میشه بخونی

نحوه راه اندازی Nginx Server Block در اوبونتو 18.04

Nginx Server Block به شما اجازه میدهد بیش از یک وب سایت را در سرور …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *