Home Knowledge base Skyline Cloud Nginx کو ریورس پراکسی کے طور پر کیسے ترتیب دیں (مرحلہ وار) KNOWLEDGE BASE

Nginx کو ریورس پراکسی کے طور پر کیسے ترتیب دیں (مرحلہ وار)

لینکس سرور پر Nginx کو ریورس پراکسی کے طور پر ترتیب دینے کی مکمل اور درست رہنمائی — پراکسی ہیڈرز، WebSockets، HTTPS، لوڈ بیلنسنگ اور کیشنگ، پروڈکشن کے لیے تیار کنفیگ کے ساتھ جسے آپ کاپی کر سکتے ہیں۔

Nginx کو ریورس پراکسی کے طور پر کیسے ترتیب دیں (مرحلہ وار)

لینکس سرور پر Nginx کو ریورس پراکسی کے طور پر ترتیب دینے کی مکمل اور درست رہنمائی — پراکسی ہیڈرز، WebSockets، HTTPS، لوڈ بیلنسنگ اور کیشنگ، پروڈکشن کے لیے تیار کنفیگ کے ساتھ جسے آپ کاپی کر سکتے ہیں۔

ریورس پراکسی کیا کرتی ہے

ریورس پراکسی ایک یا زیادہ بیک اینڈ ایپلیکیشنز کے سامنے بیٹھتی ہے اور کلائنٹ کی درخواستوں کو اُن کی طرف بھیجتی ہے۔ اپنے ایپ سرور (Node.js، Python، PHP-FPM، کوئی Docker کنٹینر) کو براہِ راست انٹرنیٹ پر ظاہر کرنے کے بجائے، کلائنٹس Nginx سے بات کرتے ہیں، اور Nginx آپ کی ایپ سے ایک نجی ایڈریس پر بات کرتا ہے۔

اس سے آپ کو ایک واحد عوامی داخلی نقطہ ملتا ہے جہاں آپ TLS ختم (terminate) کر سکتے ہیں، متعدد بیک اینڈز پر ٹریفک تقسیم کر سکتے ہیں، جوابات کیش کر سکتے ہیں، ریٹ لمٹس نافذ کر سکتے ہیں، اور اندرونی ساخت چھپا سکتے ہیں۔ یہ پروڈکشن ویب ایپس کے لیے معیاری طریقہ ہے — اور یہ Skyline Cloud کے VPS یا کلاؤڈ سرور کے ساتھ قدرتی طور پر میل کھاتا ہے، جہاں آپ کا ڈیٹا PDPL اور NCA ہم آہنگی کے لیے مملکت کے اندر ہی رہتا ہے۔

یہ گائیڈ Ubuntu/Debian کے راستے (paths) استعمال کرتی ہے، لیکن ہر ڈائریکٹیو RHEL خاندان کے سسٹمز پر بھی بالکل اسی طرح لاگو ہوتا ہے۔

پیشگی تقاضے

  • ایک لینکس سرور جس پر sudo رسائی ہو (Skyline Cloud کا VPS یا کلاؤڈ سرور بخوبی کام کرتا ہے)۔
  • ایک بیک اینڈ ایپ جو پہلے سے چل رہی ہو اور مقامی طور پر سن (listen) رہی ہو — مثال کے طور پر 127.0.0.1:3000 پر۔
  • ایک ڈومین (جیسے کوئی .sa ڈومین) جس کا A ریکارڈ آپ کے سرور کے عوامی IP کی طرف اشارہ کرتا ہو۔

مرحلہ 1 — Nginx انسٹال کریں

sudo apt update
sudo apt install nginx -y

تصدیق کریں کہ یہ چل رہا ہے اور بوٹ پر فعال (enabled) ہے:

sudo systemctl status nginx
sudo systemctl enable nginx

اگر آپ UFW استعمال کرتے ہیں تو فائر وال کھولیں:

sudo ufw allow 'Nginx Full'

مرحلہ 2 — ریورس پراکسی سرور بلاک بنائیں

Nginx ہر اُس فائل کو لوڈ کرتا ہے جو /etc/nginx/conf.d/ سے .conf پر ختم ہوتی ہے، اور Debian/Ubuntu پر یہ /etc/nginx/sites-enabled/ کو بھی پڑھتا ہے۔ ایک مخصوص فائل بنائیں تاکہ آپ ڈیفالٹ کو نہ چھیڑیں:

sudo nano /etc/nginx/conf.d/app.conf

درج ذیل شامل کریں، اور app.example.com اور بیک اینڈ ایڈریس کو اپنے سے تبدیل کریں:

server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        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_connect_timeout 60s;
        proxy_send_timeout    60s;
        proxy_read_timeout    60s;
    }
}

ہر ہیڈر کیوں اہم ہے

ڈائریکٹیو مقصد
proxy_pass وہ بیک اینڈ ایڈریس جس کی طرف Nginx آگے بھیجتا ہے۔ یہاں آخر میں سلیش نہ ہونا اصل URI راستہ برقرار رکھتا ہے۔
Host اصل ہوسٹ نام منتقل کرتا ہے تاکہ ایپ درست لنکس بنائے اور ڈومین کے مطابق روٹ کرے۔
X-Real-IP کلائنٹ کا اصل IP، جو پراکسی بصورتِ دیگر چھپا دیتی۔
X-Forwarded-For ہر پراکسی ہاپ کو جوڑتا ہے تاکہ ایپ کو پورا کلائنٹ سلسلہ نظر آئے۔
X-Forwarded-Proto ایپ کو بتاتا ہے کہ اصل درخواست http تھی یا https — TLS شامل کرنے کے بعد یہ ناگزیر ہے۔

مرحلہ 3 — جانچ اور دوبارہ لوڈ کریں

کنفیگریشن کو لاگو کرنے سے پہلے ہمیشہ اسے توثیق (validate) کریں۔ اس سے نحوی (syntax) غلطیاں آپ کی سائٹ کو ٹھپ کرنے سے پہلے ہی پکڑی جاتی ہیں:

sudo nginx -t

آپ کو syntax is ok اور test is successful نظر آنا چاہیے۔ پھر دوبارہ لوڈ کریں — restart کے برعکس، reload کنفیگ کو نرمی سے دوبارہ پڑھتا ہے جس میں تقریباً صفر رکاوٹ ہوتی ہے:

sudo systemctl reload nginx

http://app.example.com پر جائیں اور آپ کو اپنی بیک اینڈ ایپ Nginx کے ذریعے سرو ہوتی نظر آنی چاہیے۔

مرحلہ 4 — WebSockets کی سپورٹ

اگر آپ کی ایپ WebSockets استعمال کرتی ہے (چیٹ، لائیو ڈیش بورڈز، ڈیولپمنٹ سرورز)، تو آپ کو Upgrade اور Connection ہیڈرز آگے بھیجنے ہوں گے، ورنہ کنکشن پروٹوکول تبدیل کرنے میں ناکام ہو جائے گا۔ اِنہیں اسی location بلاک کے اندر شامل کریں:

        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";

اس کے کام کرنے کے لیے مرحلہ 2 کی proxy_http_version 1.1; لائن لازمی ہے۔

مرحلہ 5 — مفت سرٹیفکیٹ کے ساتھ HTTPS شامل کریں

TLS کو Nginx پر ختم (terminate) کریں تاکہ بیک اینڈ اندرونی طور پر صرف سادہ HTTP سنبھالے۔ Certbot انسٹال کریں اور اسے خودکار طور پر SSL ترتیب دینے دیں:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d app.example.com

Certbot آپ کے سرور بلاک میں ترمیم کرتا ہے، ایک listen 443 ssl سرور شامل کرتا ہے، اور ایک خودکار تجدید (renewal) ٹائمر مرتب کرتا ہے۔ ایک ڈرائی رن کے ساتھ تصدیق کریں کہ تجدید کام کرتی ہے:

sudo certbot renew --dry-run

HTTP/2 فعال کرنے کے لیے، SSL بلاک میں listen لائن کو کراس ورژن شکل میں تبدیل کریں:

    listen 443 ssl http2;

الگ http2 on; ڈائریکٹیو کے بجائے listen 443 ssl http2; استعمال کریں — مشترکہ شکل Nginx کے تمام موجودہ ورژنز پر کام کرتی ہے۔

مرحلہ 6 — متعدد بیک اینڈز پر لوڈ بیلنس کریں

ٹریفک کو کئی ایپ انسٹینسز پر تقسیم کرنے کے لیے، ایک upstream گروپ متعین کریں اور نام کے ذریعے اس کی طرف پراکسی کریں۔ upstream بلاک کو فائل کے اوپر، server سے باہر رکھیں:

upstream backend_pool {
    least_conn;
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002 backup;
    keepalive 32;
}

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

    location / {
        proxy_pass http://backend_pool;
        proxy_http_version 1.1;
        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 Connection        "";
    }
}
  • least_conn ہر درخواست کو اُس بیک اینڈ کی طرف بھیجتا ہے جس پر سب سے کم فعال کنکشن ہوں۔ ڈیفالٹ (کوئی ڈائریکٹیو نہ ہونے پر) راؤنڈ رابن ہے۔
  • backup ایک ایسے سرور کو نشان زد کرتا ہے جو صرف اُس وقت استعمال ہوتا ہے جب باقی بند ہوں۔
  • keepalive 32 اپ اسٹریم کنکشنز دوبارہ استعمال کرتا ہے۔ اسے استعمال کرتے وقت، فی درخواست اُنہیں بند ہونے سے بچانے کے لیے proxy_set_header Connection ""; مقرر کریں۔

مرحلہ 7 — بیک اینڈ جوابات کیش کریں (اختیاری)

کیشنگ اُس مواد کے لیے آپ کی ایپ پر بوجھ کم کرتی ہے جو فی صارف تبدیل نہیں ہوتا۔ کیش اسٹور کو http سیاق و سباق میں متعین کریں (مثال کے طور پر /etc/nginx/nginx.conf میں):

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=app_cache:10m
                 max_size=1g inactive=60m use_temp_path=off;

پھر اس کا حوالہ location بلاک کے اندر دیں:

        proxy_cache       app_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        add_header X-Cache-Status $upstream_cache_status;

X-Cache-Status رسپانس ہیڈر HIT، MISS، یا BYPASS رپورٹ کرتا ہے، تاکہ آپ اپنے براؤزر کے نیٹ ورک ٹیب سے کیشنگ کی تصدیق کر سکیں۔

مسائل کا حل

  • 502 Bad Gateway — بیک اینڈ تک رسائی ممکن نہیں۔ ss -tlnp | grep 3000 کے ساتھ تصدیق کریں کہ یہ سن رہا ہے اور proxy_pass میں ایڈریس مماثل ہے۔
  • 504 Gateway Timeout — ایک سست بیک اینڈ؛ proxy_read_timeout بڑھائیں۔
  • ایپ HTTPS کے پیچھے http:// لنکس بناتی ہے — یقینی بنائیں کہ X-Forwarded-Proto $scheme مقرر ہے اور آپ کی ایپ اس پر بھروسہ کرتی ہے۔
  • لاگز چیک کریں: sudo tail -f /var/log/nginx/error.log۔

اختتامیہ

اب آپ کے پاس ایک پروڈکشن گریڈ ریورس پراکسی ہے: TLS ختم کرنا، درست کلائنٹ ہیڈرز، WebSocket سپورٹ، لوڈ بیلنسنگ، اور اختیاری کیشنگ۔ اسے اپنے صارفین اور اپنے ڈیٹا کے قریب چلائیں — Skyline Cloud ہر چیز مملکت کے اندر، PDPL/NCA ہم آہنگی، مقامی عربی سپورٹ، اور شفاف قیمتوں کے ساتھ ہوسٹ کرتا ہے۔ مکمل اسٹیک کے لیے اس پراکسی کو مینجڈ بزنس ای میل ہوسٹنگ کے ساتھ جوڑیں، اور سعودی ویب ہوسٹنگ ہب میں مزید گائیڈز دیکھیں۔

تعینات کرنے کے لیے تیار ہیں؟ اپنا Skyline Cloud اکاؤنٹ بنائیں اور چند منٹوں میں ایک VPS لانچ کریں۔

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.