پیکربندی Caddy برای پروژه‌های دات‌نت کور | راه‌حل جامع

6/5/2025 MVC
217

مشکل اصلی:

پیکربندی فعلی Caddy فقط برای فایل‌های استاتیک کار می‌کند، اما برای پروژه‌های دات‌نت کور که نیاز به سرور برنامه دارند، مناسب نیست. نیاز به تنظیم Caddy به عنوان پروکسی معکوس داریم.
پیکربندی Caddy برای .NET Core

راه‌حل کامل

پیکربندی Caddyfile/etc/caddy/Caddyfile
devexedge.com {
    reverse_proxy http://localhost:5000 {
        header_up X-Forwarded-Proto {scheme}
        header_up X-Forwarded-For {remote}
        header_up Host {host}
        
        transport http {
            keepalive 30s
            keepalive_idle_conns 100
            websocket
        }
    }

    handle_path /static/* {
        root * /var/www/devexedge.com/wwwroot
        file_server
    }

    encode gzip zstd

    header {
        X-Content-Type-Options "nosniff"
        Referrer-Policy "strict-origin-when-cross-origin"
        Permissions-Policy "geolocation=(), camera=()"
    }

    @postLimit {
        path /api/*
        method POST
    }
    limit @postLimit 10r/s

    log {
        output file /var/log/caddy/devexedge.com.log
        format json
    }
}

برای ایجاد فایل log و ایجاد فایل دسترسی

sudo touch /var/lib/caddy/modifycompany.com.log
sudo chown caddy:caddy /var/lib/caddy/modifycompany.com.log

 

برای تست فرمت درست فایل caddy

sudo caddy validate --config /etc/caddy/Caddyfile

 

 فایل سرویس systemd (/etc/systemd/system/devexedge.service):

[Unit]
Description=DevexEdge .NET Service
After=network.target

[Service]
WorkingDirectory=/var/www/devexedge.com
ExecStart=/usr/bin/dotnet /var/www/devexedge.com/YourApp.dll
Restart=always
RestartSec=10
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://localhost:5000
Environment=ASPNETCORE_FORWARDEDHEADERS_ENABLED=true
LimitNOFILE=65536
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

نکات مهم پیاده‌سازی:

  • فایل YourApp.dll را با نام فایل DLL اصلی اپلیکیشن خود جایگزین کنید

  • مسیر /var/www/devexedge.com باید به مسیر واقعی اپلیکیشن شما اشاره کند

  • برای اعمال تغییرات پس از ویرایش فایل‌ها، دستورات زیر را اجرا کنید:

sudo systemctl daemon-reload
sudo systemctl enable devexedge.service
sudo systemctl start devexedge.service
sudo systemctl restart caddy​

 

مراحل پیاده‌سازی

  1. فایل Caddyfile را با محتوای ارائه شده جایگزین کنید
  2. فایل سرویس systemd را ایجاد کرده و تنظیمات مربوط به اپلیکیشن خود را اعمال کنید
  3. دسترسی‌های لازم را تنظیم کنید:
sudo chown -R www-data:www-data /var/www/devexedge.com

4- سرویس‌ها را فعال و راه‌اندازی کنید: 

sudo systemctl daemon-reload
sudo systemctl enable devexedge.service
sudo systemctl start devexedge.service
sudo systemctl restart caddy

 

5- افزودن کد پروکسی در .NET Core (Program.cs):

builder.Services.Configure<ForwardedHeadersOptions>(options => {
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | 
                               ForwardedHeaders.XForwardedProto;
});
app.UseForwardedHeaders();

6- بررسی تنظیمات:

 

sudo systemctl status devexedge.service
sudo systemctl status caddy
journalctl -u devexedge.service -f

 

این پیکربندی:

  • ترافیک را به اپلیکیشن دات‌نت روی پورت 5000 هدایت می‌کند

  • از WebSocket پشتیبانی می‌کند

  • فایل‌های استاتیک را بهینه سرویس می‌دهد

  • امنیت را با هدرهای مناسب افزایش می‌دهد

  • در برابر حملات DOS از API محافظت می‌کند

  • لاگ‌های ساختار یافته تولید می‌کند