عنوان:

‫برگه خلاصه NGINX برای توسعه‌دهندگان ASP.NET Core


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۴/۱۲ ۱۰:۱۰
آدرس: www.dntips.ir
در ادامه یک برگه خلاصه (Cheat Sheet) کامل بر اساس تمام مطالب کلیدی که در این سری آموزشی مطرح شد، آماده شده است. این برگه برای مرور سریع و استفاده عملی حین کار طراحی شده است.

۱. مدیریت سرویس‌ها (دستورات پایه) ⚙️

  • sudo systemctl start nginx: سرویس NGINX را اجرا می‌کند.
  • sudo systemctl stop nginx: سرویس NGINX را متوقف می‌کند.
  • sudo systemctl restart nginx: سرویس NGINX را کاملاً متوقف و دوباره اجرا می‌کند (باعث قطعی لحظه‌ای می‌شود).
  • sudo systemctl reload nginx: تنظیمات جدید را بدون قطعی و با حفظ ارتباطات فعال، بارگذاری می‌کند.
  • sudo systemctl enable nginx: سرویس NGINX را برای اجرای خودکار پس از بوت شدن سرور، فعال می‌کند.
  • sudo systemctl status nginx: وضعیت فعلی سرویس NGINX (فعال، متوقف، خطا) را نمایش می‌دهد.
  • sudo systemctl status my-app.service: وضعیت سرویس اپلیکیشن ASP.NET Core شما را نمایش می‌دهد.
  • sudo nginx -t: صحت نوشتاری (Syntax) تمام فایل‌های کانفیگ NGINX را قبل از اعمال، تست می‌کند. (دستور حیاتی!)


۲. مدیریت فایل‌ها و دسترسی‌ها 📂

  • sudo ln -s /path/available /path/enabled: یک لینک نمادین (شورتکات) برای فعال‌سازی یک سایت از sites-available به sites-enabled ایجاد می‌کند.
  • sudo rm /path/enabled/site.conf: لینک نمادین یک سایت را برای غیرفعال کردن آن حذف می‌کند (فایل اصلی امن باقی می‌ماند).
  • sudo chown -R www-data:www-data /path/app: مالکیت یک پوشه و تمام محتویات آن را به کاربر www-data می‌دهد تا اپلیکیشن اجازه اجرا داشته باشد.


۳. پیکربندی‌های کلیدی NGINX (قطعه کدها) 📝

Reverse Proxy پایه برای ASP.NET Core
location / {
    proxy_pass http://localhost:5000;
    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;
}
ترافیک را به اپلیکیشن Kestrel هدایت کرده و هدرهای اصلی را برای حفظ اطلاعات کاربر، ارسال می‌کند.

فعال‌سازی SSL/TLS با Let's Encrypt
sudo certbot --nginx -d your-domain.com
به صورت خودکار گواهینامه SSL را دریافت، نصب و NGINX را برای استفاده از آن پیکربندی می‌کند.

سرو کردن فایل‌های استاتیک
root /var/www/app/wwwroot;
location / {
    try_files $uri @proxy;
}
location @proxy {
    proxy_pass http://backend;
    # ... proxy headers
}
ابتدا تلاش می‌کند فایل را به صورت استاتیک سرو کند؛ اگر نبود، درخواست را به اپلیکیشن ارسال می‌کند.

توزیع بار (Load Balancing)
upstream my_backend {
    least_conn; # یا ip_hash
    server localhost:5000;
    server localhost:5001;
}
# ... در location مربوطه
proxy_pass http://my_backend;
یک گروه از سرورهای اپلیکیشن تعریف کرده و ترافیک را بین آن‌ها توزیع می‌کند.

محدودسازی نرخ درخواست (Rate Limiting)
# در nginx.conf
limit_req_zone $binary_remote_addr zone=my_limit:10m rate=10r/m;

# در location (مثلا صفحه لاگین)
location /login { limit_req zone=my_limit burst=5 nodelay; }
از حملات Brute-force با محدود کردن تعداد درخواست‌های یک IP جلوگیری می‌کند.

مخفی‌سازی هویت سرور
# در nginx.conf
server_tokens off;

# در location پراکسی
proxy_hide_header X-Powered-By;
نسخه NGINX و نام تکنولوژی Backend (مانند ASP.NET) را از دید کاربران مخفی می‌کند.

مسدودسازی دسترسی به فایل‌های حساس
location ~* \.(db|git|log|sln|cs)$ { return 404; }
location ~ /\. { return 404; }
از دانلود فایل‌ها با پسوندهای مشخص و فایل‌های مخفی (که با نقطه شروع می‌شوند) جلوگیری می‌کند.

تنظیمات Time-out و آپلود فایل
# در server یا http
client_max_body_size 100M;

# در server یا location
proxy_read_timeout 180s;
حداکثر حجم آپلود (client_max_body_size) و زمان انتظار برای پاسخ از Backend (proxy_read_timeout) را افزایش می‌دهد.


۴. عیب‌یابی (Troubleshooting) 🕵️‍♂️

  • sudo systemctl status my-app.service: وضعیت کلی سرویس اپلیکیشن شما را نشان می‌دهد (آیا در حال اجراست؟ آیا در حلقه ری‌استارت گیر کرده؟).
  • sudo journalctl -u my-app.service -f -n 100: دستور طلایی! ۱۰۰ خط آخر لاگ‌های اپلیکیشن شما را نشان داده و سپس به صورت زنده هر لاگ جدیدی را نمایش می‌دهد.
  • sudo journalctl -u my-app.service --since today: تمام لاگ‌های مربوط به اپلیکیشن شما از ابتدای امروز را نمایش می‌دهد.
  • tail -f /var/log/nginx/error.log: لاگ خطاهای خود NGINX را به صورت زنده نمایش می‌دهد (مفید برای خطاهای 502 و ...).


۵. استقرار با Docker 🐳

  • docker-compose up -d --build: کانتینرها را بر اساس فایل docker-compose.yml در پس‌زمینه ساخته و اجرا می‌کند.
  • docker-compose down: کانتینرهای تعریف شده در docker-compose.yml را متوقف و حذف می‌کند.
پیکربندی پراکسی در Docker
# نام سرویس اپلیکیشن از فایل docker-compose.yml
proxy_pass http://my-aspnet-service:8080;
در محیط داکر، proxy_pass به جای localhost به نام سرویس اپلیکیشن اشاره می‌کند.