VPS · راهنما

راهنمای پروکسی معکوس nginx

به‌روزرسانی October 11, 2026 5 دقیقه مطالعه

در این صفحه
  1. پروکسی معکوس چه کاری انجام می‌دهد
  2. گام 1: نصب nginx
  3. گام 2: ساخت بلاک server برای پروکسی
  4. هدرها و اسلش انتهایی
  5. WebSockets
  6. گام 3: HTTPS رایگان با Certbot
  7. رفع خطاهای 502، 504 و 413
  8. اجرا روی VPS در HytHost
  9. پرسش‌های متداول

پروکسی معکوس جلوی برنامه‌های شما قرار می‌گیرد و درخواست‌های بازدیدکنندگان را به آن‌ها می‌رساند. با nginx در جلو، یک برنامهٔ Node.js، یک کانتینر Docker یا داشبوردی که روی یک پورت اجرا می‌شود به https://app.example.com تبدیل می‌شود، با HTTPS، هدرهای درست و یک جای واحد برای مدیریت همه‌چیز.

این راهنما گام‌به‌گام nginx را به‌عنوان پروکسی معکوس روی Ubuntu راه‌اندازی می‌کند: بلاک server، هدرها، WebSockets، HTTPS رایگان و خطاهایی که به احتمال زیاد با آن‌ها روبه‌رو می‌شوید.

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

  • یک نقطهٔ ورود عمومی. nginx روی پورت‌های 80 و 443 گوش می‌دهد و هر دامنه یا مسیر را به برنامهٔ درست می‌فرستد، بنابراین خود برنامه‌ها هرگز مستقیم در معرض اینترنت قرار نمی‌گیرند.
  • HTTPS در یک جا. nginx گواهی‌ها را مدیریت می‌کند؛ برنامه‌های پشت آن می‌توانند روی localhost با HTTP ساده کار کنند.
  • چند برنامه روی یک سرور. app.example.com، api.example.com و example.com/blog هر کدام می‌توانند به سرویس متفاوتی بروند.
  • امکانات اضافه: فشرده‌سازی، کش، محدودیت آپلود و قوانین دسترسی، بدون دست زدن به برنامه.

گام 1: نصب nginx

sudo apt update
sudo apt install nginx

http://your-server-ip را باز کنید؛ باید صفحهٔ خوش‌آمدگویی nginx را ببینید. اگر از ufw استفاده می‌کنید، ترافیک وب را با sudo ufw allow 'Nginx Full' مجاز کنید.

مطمئن شوید برنامهٔ شما در حال اجراست و روی خود سرور در دسترس است، مثلاً با curl http://127.0.0.1:3000. اگر این کار نکند، nginx هم کار نخواهد کرد.

nginx و برنامه‌هایتان را با دسترسی کامل root اجرا کنید: پلن‌های HytHost KVM VPS از €2.92 در ماه.

دیدن پلن‌های VPS

گام 2: ساخت بلاک server برای پروکسی

در Ubuntu هر سایت یک فایل در /etc/nginx/sites-available/ دارد که با یک لینک در sites-enabled فعال می‌شود. فایل /etc/nginx/sites-available/app.example.com را بسازید:

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

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

آن را فعال کنید، پیکربندی را تست کنید و دوباره بارگذاری کنید:

sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

رکورد A دامنه را به سرور خود اشاره دهید؛ حالا http://app.example.com برنامهٔ شما را نشان می‌دهد. همیشه پیش از بارگذاری دوباره nginx -t را اجرا کنید: اشتباه‌های تایپی را پیش از آنکه سایت را از کار بیندازند پیدا می‌کند.

هدرها و اسلش انتهایی

  • Host دامنه‌ای را که بازدیدکننده درخواست کرده منتقل می‌کند. بدون آن، nginx آدرس داخل proxy_pass را می‌فرستد و برنامه‌هایی که لینک‌ها را از host می‌سازند خراب می‌شوند.
  • X-Real-IP و X-Forwarded-For آدرس IP بازدیدکننده را منتقل می‌کنند. بدون آن‌ها هر درخواست انگار از 127.0.0.1 آمده است.
  • X-Forwarded-Proto به برنامه می‌گوید آیا بازدیدکننده از HTTPS استفاده کرده یا نه، تا در حلقهٔ ریدایرکت نیفتد.

بستهٔ nginx در Ubuntu این خطوط را در /etc/nginx/proxy_params دارد، پس include proxy_params; یک میان‌بر است.

اسلش انتهایی مهم است. برای برنامه‌ای زیر یک مسیر:

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

با اسلش بعد از پورت، /app/login به‌صورت /login به برنامه می‌رسد. بدون آن، برنامه کل /app/login را دریافت می‌کند.

WebSockets

برنامه‌های چت، داشبوردهای زنده و بسیاری از پنل‌های مدیریت از WebSockets استفاده می‌کنند که به دو هدر اضافه نیاز دارد. این map را یک بار داخل بلاک http اضافه کنید، مثلاً در فایل جدید /etc/nginx/conf.d/websocket.conf:

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

سپس داخل location:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 1h;

nginx اتصال پروکسی‌شده‌ای را که 60 ثانیه چیزی نفرستد می‌بندد؛ مقدار بلندتر proxy_read_timeout اتصال‌های WebSockets بی‌صدا را باز نگه می‌دارد. proxy_http_version 1.1 فقط از nginx 1.29.7 به بعد پیش‌فرض است و Ubuntu 24.04 نسخهٔ 1.24 را دارد، پس این خط را نگه دارید.

گام 3: HTTPS رایگان با Certbot

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
sudo certbot --nginx -d app.example.com

Certbot یک گواهی رایگان Let's Encrypt می‌گیرد، تنظیمات HTTPS را به بلاک server شما اضافه می‌کند و می‌تواند HTTP را به HTTPS ریدایرکت کند. گواهی را خودکار تمدید می‌کند؛ با sudo certbot renew --dry-run بررسی کنید. دربارهٔ گواهی‌ها در چگونه یک گواهی SSL رایگان بگیریم بیشتر بخوانید.

رفع خطاهای 502، 504 و 413

خطاعلت معمولراه‌حل
502 Bad Gatewaynginx به برنامه دسترسی ندارد: برنامه متوقف شده، کرش کرده یا روی پورت یا آدرس دیگری گوش می‌دهدبرنامه را اجرا کنید، پورت را با curl http://127.0.0.1:PORT بررسی کنید، /var/log/nginx/error.log را بخوانید
504 Gateway Timeoutپاسخ برنامه بیش از 60 ثانیه طول کشیده استدرخواست را سریع‌تر کنید یا proxy_read_timeout را برای آن location بالا ببرید
413 Request Entity Too Largeفایل آپلودی از محدودیت پیش‌فرض nginx یعنی 1 MB بزرگ‌تر استclient_max_body_size 50m; را در بلاک server تنظیم کنید
حلقهٔ ریدایرکتبرنامه نمی‌داند بازدیدکننده از HTTPS استفاده کرده استX-Forwarded-Proto را منتقل کنید و به برنامه بگویید پشت پروکسی است

بعد از هر تغییر: sudo nginx -t و سپس sudo systemctl reload nginx.

اجرا روی VPS در HytHost

پروکسی معکوس به سروری نیاز دارد که پورت‌های 80 و 443 آن در اختیار شما باشد. پلن‌های HytHost VPS روی KVM با دسترسی کامل root، فضای ذخیره‌سازی SSD و محافظت DDoS اجرا می‌شوند؛ Ubuntu 24.04 را انتخاب کنید و گام‌های بالا را دنبال کنید. برنامه‌هایتان را در کانتینر اجرا می‌کنید؟ اول Docker را با چگونه Docker را روی Ubuntu نصب کنیم راه‌اندازی کنید و پورت‌های کانتینرها را به 127.0.0.1 ببندید تا فقط nginx به آن‌ها دسترسی داشته باشد.

پرسش‌های متداول

پرسش‌های متداول

پروکسی معکوس درخواست‌ها را به یک یا چند برنامهٔ پشت خود می‌فرستد. Load balancer یک پروکسی معکوس است که درخواست‌ها را بین چند نسخه از یک برنامه پخش می‌کند. nginx هر دو کار را با یک بلاک upstream که نسخه‌ها را فهرست می‌کند انجام می‌دهد.

nginx به برنامهٔ پشت خود دسترسی ندارد. بررسی کنید برنامه در حال اجرا باشد و روی آدرس و پورت داخل proxy_pass گوش دهد، و برای علت دقیق /var/log/nginx/error.log را بخوانید.

نه، وقتی برنامه روی همان سرور اجرا می‌شود. nginx برای بازدیدکنندگان HTTPS را مدیریت می‌کند و با برنامه از طریق HTTP ساده روی 127.0.0.1 ارتباط دارد که هرگز از دستگاه خارج نمی‌شود.

به هر برنامه یک بلاک server جداگانه با server_name خودش بدهید، مثل app.example.com و api.example.com، و هر کدام با یک proxy_pass به پورتی متفاوت.

بله. پورت هر کانتینر را فقط روی 127.0.0.1 منتشر کنید و proxy_pass را به آن اشاره دهید. این‌طور کانتینرها از اینترنت عمومی دور می‌مانند، و این مهم است چون پورت‌های منتشرشدهٔ Docker از ufw عبور می‌کنند.

برنامه‌هایتان را پشت nginx میزبانی کنید

پلن‌های HytHost KVM VPS با دسترسی کامل root، فضای SSD و محافظت DDoS از €2.92 در ماه.

Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hours

این راهنما برایتان مفید بود؟